strace命令跟踪ping调用函数整理

Posted on 2021-04-20 14:24  hrers  阅读(619)  评论(0编辑  收藏  举报

execve函数:execve(执行文件)在父进程中fork一个子进程,在子进程中调用exec函数启动新的程序。exec函数一共有六个,其中execve为内核级系统调用,其他(execl,execle,execlp,execv,execvp)都是调用execve的库函数。用来调用shell命令
brk函数:是将数据段(.data)的最高地址指针_edata往高地址推。malloc小于128k的内存,使用brk分配内存
mmap函数:是在进程的虚拟地址空间中(堆和栈中间,称为文件映射区域的地方)找一块空闲的虚拟内存。malloc大于128k的内存,使用mmap分配内存,在堆和栈之间找一块空闲内存分配(对应独立内存,而且初始化为0)
access函数:用来判断指定的文件或目录是否存在(F_OK),已存在的文件或目录是否有可读(R_OK)、可写(W_OK)、可执行(X_OK)权限。F_OK、R_OK、W_OK、X_OK这四种方式通过access函数中的第二个参数mode指定。如果指定的方式有效,则此函数返回0,否则返回-1。
open函数:打开和创建文件(建立一个文件描述符,其他的函数可以通过文件描述符对指定文件进行读取与写入的操作。)
fopen与open的区别:以可写的方式fopen一个文件时,如果文件不存在则会自动创建,而open一个文件时必须明确O_CREAT才会创建文件,否则文件不存在就出错返回
close函数:关闭一个已经打开的文件
fstat函数:由文件描述符取得文件状态,fstat()用来将参数filedes 所指向的文件状态复制到参数buf 所指向的结构中(struct stat)。fstat()与stat()作用完全相同,不同之处在于传入的参数为已打开的文件描述符。
read函数:read函数可以读取文件。读取文件指从某一个已打开地文件中,读取一定数量地字符,然后将这些读取的字符放入某一个预存的缓冲区内,供以后使用。
--------
handle: 这是一个已经打开的文件句柄,表示从这个文件句柄所代表的文件读取数据。
buffer: 指缓冲区,即读取的数据会被放到这个缓冲区中去。
n: 表示调用一次read操作,应该读多少数量的字符。
number:表示系统实际所读取的字符数量。
--------
mprotect()函数:可以修改调用进程内存页的保护属性,如果调用进程尝试以违反保护属性的方式访问该内存,则内核会发出一个SIGSEGV信号给该进程。
--------
#include <sys/mman.h>
int mprotect(void *addr, size_t len, int prot);
addr:修改保护属性区域的起始地址,addr必须是一个内存页的起始地址,简而言之为页大小(一般是 4KB == 4096字节)整数倍。
len:被修改保护属性区域的长度,最好为页大小整数倍。修改区域范围[addr, addr+len-1]。
prot:可以取以下几个值,并可以用“|”将几个属性结合起来使用:
1)PROT_READ:内存段可读;
2)PROT_WRITE:内存段可写;
3)PROT_EXEC:内存段可执行;
4)PROT_NONE:内存段不可访问。
返回值:0;成功,-1;失败(并且errno被设置)
1)EACCES:无法设置内存段的保护属性。当通过 mmap(2) 映射一个文件为只读权限时,接着使用 mprotect() 标志为 PROT_WRITE这种情况就会发生。
2)EINVAL:addr不是有效指针,或者不是系统页大小的倍数。
3)ENOMEM:内核内部的结构体无法分配。
--------
arch_prctl函数: 设置架构的具体进程或线程状态。代码选择一个子功能和参数地址传递给它。
munmap函数:用来取消参数start所指的映射内存起始地址,参数length则是欲取消的内存大小。当进程结束或利用exec相关函数来执行其他程序时,映射内存会自动解除,但关闭对应的文件描述符时不会解除映射。
capget()函数:用来获得进程的权能;capset() 用来设置进程权能。关于权能的说明,https://www.cnblogs.com/sky-heaven/p/12096758.html
getuid()函数:用来取得执行目前进程的用户识别码。uid is 0 //当使用root 身份执行范例程序时
setuid()函数:设置目前进程的用户识别码,setuid(0),设置为root用户
prctl函数:给线程命名,linux下的prctl库自kernel 2.6.9后开始支持PR_SET_NAME和PR_GET_NAME选项用于设置和获取进程名字,第二个参数为设置的名字
geteuid()函数:用来取得执行目前进程有效的用户识别码。
socket函数:是一种可用于根据指定的地址族、数据类型和协议来分配一个套接口的描述字及其所用的资源的函数。用于网络通信
connect()函数:用于建立与指定socket的连接。
stat函数:用于获取文件信息,https://blog.csdn.net/qq_40839779/article/details/82789217
uname函数:获取当前内核名称和其它信息。
setsockopt()函数:用于任意类型、任意状态套接口的设置选项值。https://blog.csdn.net/c_base_jin/article/details/94353956
poll函数:是Linux中的字符设备驱动中的一个函数。Linux 2.5.44版本后,poll被epoll取代。和select实现的功能差不多,poll的作用是把当前的文件指针挂到等待队列。
SendTo函数:是一个计算机函数,指向一指定目的地发送数据,sendto()适用于发送未建立连接的UDP数据包 (参数为SOCK_DGRAM)
ioctl函数:是设备驱动程序中设备控制接口函数,一个字符设备驱动通常会实现设备打开、关闭、读、写等功能,在一些需要细分的情境下,如果需要扩展新的功能,通常以增设 ioctl() 命令的方式实现。
recvfrom()函数:本函数用于从(已连接)套接口上接收数据,并捕获数据发送源的地址。
bind函数:把一个本地协议地址赋予一个套接字。对于网际协议,协议地址是32位的IPv4地址或是128位的IPv6地址与16位的TCP或UDP端口号的组合。
getsockname()函数:用于获取一个套接字的名字。它用于一个已捆绑或已连接套接字s,本地地址将被返回。本调用特别适用于如下情况:未调用bind()就调用了connect(),这时唯有getsockname()调用可以获知系统内定的本地地址。在返回时,namelen参数包含了名字的实际字节数。
recvmsg()和sendmsg()函数:这个两个函数是通用的I/O函数。实际上可以把所有read,readv,recv,recvfrom调用替换成recvmsg调用;类似的,各种输出函数也可以替换成sedmsg调用。
sigaction函数:功能是检查或修改与指定信号相关联的处理动作(可同时两种操作)。
inet_addr() 函数:作用是将点分十进制的IPv4地址转换成网络字节序列的长整型。