做题遇到的函数
[TOC]
strtoull函数
munmap函数
setvbuf函数
fgets函数
- char *fgets(char *str, int n, FILE *stream);
- fgets() 从 stream 中读取字符,直到读取了 n-1 个字符、读取并转移到字符串的换行符 (’\n’),或者遇到文件结束 (EOF) 条件为止。如果读取到换行符,则包含在字符串中。在读取的最后一个字符后添加了一个空终止符 (’\0’),因此生成的字符串是以空终止的。
mmap函数
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); addr:指定映射的起始地址,通常为NULL,让操作系统自动选择合适的地址。 length:指定映射的长度,以字节为单位。 prot:指定映射区域的保护方式,prot=7表示可读可写可执行 flags:用于控制映射的选项,flags=34(0x22)表示MAP_SHARED | MAP_PRIVATE,映射可以同时被多个进程共享,但每个进程都有自己的私有映射。 fd:如果是从文件映射,需要指定文件描述符,设置为0即为stdin offset:指定文件映射的偏移量,通常设置为0表示从文件的开头开始映射。一般设置为0
scanf函数
在C语言中,scanf 函数是用于从标准输入(通常是键盘)读取输入数据的函数。scanf 函数的执行会一直等待用户输入,直到发生以下情况之一,才会停止: 1.遇到空白字符(空格、制表符、换行符等): scanf 在默认情况下使用空白字符作为输入项的分隔符。当用户输入空白字符时,scanf 会将其视为输入项的结束,并将已读取的内容赋给相应的变量。 2.达到指定的格式控制符(例如 %d, %f 等): scanf 根据格式控制符指定的格式来读取输入。当输入的内容与格式控制符不匹配时,scanf 会停止。 所以当我们不想改变一个地方原本的值的时候,输入不符合格式就好了,这点我们可以利用来泄露出一些东西,比如可以泄露一些函数的地址这样我们可以得到Libcbase 3.到达文件尾(EOF): 如果输入流(例如文件或标准输入)已经结束,scanf 会返回 EOF,表示文件结束,此时 scanf 将停止继续读取。 4.scanf 函数的返回值是成功读取和赋值的输入项的数量。具体来说,scanf 的返回值表示成功匹配并处理的格式控制符的数量
alarm函数
- 将程序名为ProgrammName中的alarm替换为isnan
sed -i s/alarm/isnan/g ./ProgrammName
atoi函数
strtok 函数
strtok 函数是C语言标准库中的一个字符串处理函数,用于将字符串分割为多个子字符串。其原型定义在 <string.h> 头文件中。 char *strtok(char *str, const char *delim); strtok 函数会从参数 str 所指向的字符串中扫描并找出连续一段不含有参数 delim 所指定的分割字符的字串,然后将找到的子串返回,并将字符串指针指向该子串的下一个字符,以便于下次调用 strtok 函数时继续获取下一个子串。
strtok 函数在第一次被调用时,必须给定一个字符串参数 str,以后每次调用则将 str 参数设置为 NULL,这样就可以从上次返回的位置继续扫描。
strtol函数
- strtol 是一个 C 语言标准库函数,用于将字符串转换为长整型(long int)
- long int strtol(const char *str, char **endptr, int base);
- str 是要转换的字符串。
- endptr 是一个指向字符指针的指针,用于存储转换结束后未转换的部分的地址。如果该参数为非空指针且转换过程中未发现可转换的数字,则 *endptr 被设置为 str 的起始地址。
- base 表示要转换的数字的进制,可以是 2 到 36 之间的任意值。如果 base 为 0,则会根据字符串的前缀来判断进制,如 “0x” 表示十六进制,“0” 表示八进制,否则默认为十进制。
eval函数
from pwn import *
r = remote('node4.buuoj.cn',28366)
context(arch='amd64',os='linux',log_level='debug')
for i in range(100):
r.recvuntil('answer? ')
expression = r.recvuntil('=',drop=True).decode() #这个=不需要所以要drop掉
expression = expression.replace('x','*') #eval中乘法应该是*
ans = eval(expression)
r.sendlineafter('what?',str(ans))
r.interactive()
strchr函数
strchr() 用于查找字符串中的一个字符,并返回该字符在字符串中第一次出现的位置。 strchr() 其原型定义在头文件 <string.h> 中, char *strchr(const char *str, int c) 在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。 strchr() 函数返回的指针指向字符串中的字符,如果要将该指针用作字符串,应该将其传递给其他字符串处理函数,例如 printf() 或 strncpy()。 char *strchr(const char *str, int c) str – 要查找的字符串。 c – 要查找的字符。 如果在字符串 str 中找到字符 c,则函数返回指向该字符的指针,如果未找到该字符则返回 NULL。
strstr函数
1、strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。 2、找到所搜索的字符串,则该函数返回第一次匹配的字符串的地址; 3、如果未找到所搜索的字符串,则返回NULL。 char *strstr(char *str1, const char *str2); //返回值为字符型指针 str1: 被查找目标 str2: 要查找对象
strlen函数
C 库函数 size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。 遇到空字符\x00结束,注意这里的运用
strcpy函数
把从src地址开始且含有’\x00’结束符的字符串复制到以dest开始的地址空间。 strcpy,字符串复制,遇到’\x00’停止
strcat函数
C 库函数 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。 先找到dest的末尾,也就是找到\x00,然后strcat,字符串拼接,遇到’\x00’停止
fseek函数
- fseek(stream, 0LL, 2);:这行代码将文件指针移动到文件末尾。fseek() 函数的第一个参数是文件指针,第二个参数是偏移量,第三个参数指定了偏移的起始位置,2 表示从文件末尾开始偏移。因为偏移量为0,所以文件指针会直接移到文件末尾
- fseek(stream, 0LL, 0);:这行代码将文件指针重新定位到文件开头。和第一行代码类似,但是第三个参数改为了 0,表示从文件开头开始偏移
ftell函数
n = ftell(stream);:这行代码获取当前文件指针的位置(即文件大小),并将其赋值给变量 n。ftell() 函数返回文件指针的当前位置。
access函数
access 函数通常用于检查文件系统中的文件是否存在以及对文件的访问权限 R_OK:表示读取权限,对应的数值是 4。 W_OK:表示写入权限,对应的数值是 2。 X_OK:表示执行权限,对应的数值是 1。 F_OK:表示文件存在性,对应的数值是 0
strdup函数
函数名: strdup 头文件:<string.h> 函数原型: char *strdup(const char *str); 功能: 将字符串复制到新建立的空间,该函数会先用malloc()配置与参数str字符串相同的空间大小,然后将参数str字符串的内容复制到该内存地址,然后把该地址返回。该地址最后可以利用free()来释放。 参数: char *str 为要复制的字符串 返回值: 返回一字符串指针,该指针指向复制后的新字符串地址。若返回NULL表示内存不足。
sscanf函数
_isoc99_sscanf 是C语言标准库中的函数 sscanf 的一个特定版本。通常情况下,sscanf 函数用于从一个字符串中按照指定的格式解析数据并存储到变量中。