python&C&Assembly 常见函数(持续更新)
PYTHON
range()函数
range(start,stop[,step])
计数从start开始(默认为0),到stop结束(不包括stop),step为步长,默认为1
example:
range(9):[0,1,2,3,4,5,6,7,8]
range(1,11):[1,2,3,4,5,6,7,8,9,10]
range(0,10,3):[0,3,6,9]
range(0,-10,-1):[0,-1,-2,-3,-4,-5,-6,-7,-8,-9]
class int(x. base=10)
x--字符串或数字
base--进制数,默认为十进制(如何看x)
返回值:返回整型数据
字符串的截取
变量[头下标:尾下标],其中下标从0开始,可以是正数或负数,下标位置为空表示截取到头或尾,注意:列表右边的元素是不被包含的。
subprocess
python中的subprocess模块定义了Popen类:
class subprocess.Popen( args,
bufsize=0,
executable=None,
stdin=None,
stdout=None,
stderr=None,
preexec_fn=None,
close_fds=False,
shell=False,
cwd=None,
env=None,
universal_newlines=False,
startupinfo=None,
creationflags=0)
参数说明:
args可以是一个字符串,也可是一个包含程序参数的参数列表。若是字符串,则被当作可执行程序的路径;若是参数列表,则一般第一项是需要执行的程序。
stdin,stdout&stderr分别表示子程序的标准输入、标准输出和标准错误。可选的值有PIPE(创建一个新的管道[我的理解是在新的管道里进行进行输入和输出,用于父进程和子进程的交互?])或者一个有效的文件描述符(正整数)或者是文件对象,还有NONE(不做任何重定向,子进程的文件描述符继承父进程)。另外,stderr可以是STDOUT,表示子进程的标准错误也输出到标准输出。
shell为True时,将args在shell中解释执行,否则默认使用os.execvp()来执行子程序。
communicate()函数:Popen.communicate(input=None)
和子进程进行交互,发送数据到stdin并且从stdout和stderr中读数据,直到接收到EOF,等待子进程结束。父进程若要通过此函数给子进程发送数据,则stdin要为PIPE,要从子进程中接收数据,stdout和stderr也都要为PIPE。可选的input要为字符串类型。返回值为一个元组:(stdoutdata,stderrdata)。
各字符形式转换
十进制数->ascii字符:chr( )
ascii字符->十进制数:ord( )
base编码
import base64
s=b'hello'
a=base64.b64encode(s)
查找字符
cipher='hello' print cipher.find('h')
PWNTOOLS
pwntools IO模块使用
p.send(data) #发送数据 p.sendline(data) #!! 发送数据和'\n' p.recv(numb=2048,timeout=default) #接收指定字节和超时的数据 p.recvline(keepends=True) #接收一行数据 p.recvuntil("...",drop=False) #接收数据直到我们设置的标志 p.recvall( ) #一直接收到EOF为止 p.recvrepeat(timeout=default) #持续接收直到EOF出现或超时 p.interactive( ) #得到shell后进入交互模式
u32: unpack解包,把字符串小端序转化成十进制整数
p32: pack打包,把十进制整数以小端序转化成十六进制的字符串
C
atoi函数
int atoi(const char *nptr)
扫描参数nptr字符串,会跳过前面的空白字符,从第一个不是空白的字符开始将字符串转换成整型数,如果第一个字符就不是数字,则转换失败。如果nptr不能转换成数字或者为空字符串,则返回0。该函数要求被转化的字符串是按十进制数理解的,并且对于字符串中的数字存在大小限制(int类型大小有限),若过大,可能返回-1。
fflush函数
//头文件 #include<stdio.h> //函数原型 int fflush(FILE *stream)
功能:
如果stream是空指针,则fflush( )函数将对上面定义了行为的所有流执行刷新操作;否则,刷新并将任意未写入的数据写入文件流。如果成功刷新,返回0;指定的流没有缓冲区或者只读打开时也返回0。返回EOF指出一个错误。
例如:fflush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃[非标准]
fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上
strtof函数
//头文件 #include<stdlib.h> //函数原型 float strtof(const char* restrict str, char ** restrict str_end)
功能:解释str指向的字符串中的浮点值,函数丢弃任何的空格字符,直到找到第一个非空白字符,然后将字符串中的字符形成有效的浮点并转换成浮点值
SSE指令集
Intel扩充的指令集,用于像信号处理、科学计算或者3D图形计算一样的应用。其优势包括:更高分辨率的图像浏览和处理、高质量音频、MPEG2视频、同时MPEG2加解密;语音识别占用更少CPU资源;更高精度和更快响应速度。(简单理解就是追求了更高性能)
使用xmm0-xmm8共8个128bit的暂存器实现从内存中进行数据的暂存
_mm_cvtsi128_si32()
将低32位的数据转换成整数保存
浮点数存储
对于float型数据,其二进制有32位,其中符号位1位,阶码8位,尾数23位;对于double型数据,其二进制为64位,符号位1位,阶码11位,尾数52位。
任意浮点数可以表示成:
其中符号位存储s,阶码存储E,尾数存储M。
E是有符号数,为正数时高位为1,负数时高位为0。
当E不全为0或1时,M默认为1.xxxx的形式,最高位的1省略,所以在float类型下可以存储24位的精度;当E全为0时,M为0.xxxx格式,存储0或很小的浮点数;当 E全为1是,若M全为0,则表示±∞(看符号位决定),否则不是一个数(NaN)。
sprintf函数
int sprintf(char *buf,char *format,[argument,...])
类似与printf()函数,但是sprintf函数并不会把字符串输出到标准输出流,而是输出到buf缓冲段。
fread函数
size_t fread(void *buffer,size_t size,size_t count, FILE* stream)
表示从stream文件流中每次读入size字节数的内容存入buffer缓冲区,共读入count次。
calloc函数
void *calloc( unsigned int num, unsigned int size)
申请num个size大小的chunk块,在申请后会自动把申请到的chunk清零
C++
const char* std::string::c_str(string) const
将string转换成char* 这样便可以使C++中的string使用C中操作字符串的函数了