根据Linux man page for mprotect函数有3个参数:

int mprotect(const void *addr, size_t len, int prot);

但是当我在一个我正在分析的程序上运行ltrace时,我看到mprotect的调用方式如下:
mprotect(0x8049000, 4096, 3, 1, 0xb7e057ac)      = 0

第四和第五个论点是什么??
编辑:使用ltrace 0.5版。和内核2.6.24-24-generic
谢谢

最佳答案

5是ltrace在配置文件中找不到函数描述时将打印的参数数。(/etc/ltrace.conf默认情况下,我想)。
在我的系统中,我可以看到相同的行为,但在那里找不到mprotect,只有sys_mprotect。
如果您想再次查看ltrace源,感兴趣的地方是output.c,即“func=name2func(function_name);”后面的条件,它打印5个参数
如果找不到函数名的元信息(在这种情况下,name2func内的线性查找返回null)。
所以,手册是正确的,是ltrace,它是“错误的”(引用“错误的”,因为从技术上来说,代码工作正常,尽管配置中的def可能应该被修复)

07-24 09:46