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]

int函数

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中操作字符串的函数了

 

posted @ 2020-01-24 17:19  Theffth  阅读(397)  评论(0编辑  收藏  举报