6

根据mprotect 的 Linux 手册页,该函数有 3 个参数:

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

但是在我正在分析的程序上运行 ltrace 时,我看到 mprotect 是这样调用的:

mprotect(0x8049000, 4096, 3, 1, 0xb7e057ac)      = 0

第 4 和第 5 个论点是为了什么?

我正在使用 ltrace 0.5 版。和内核 2.6.24-24-generic

4

1 回答 1

7

五是如果 ltrace 在配置文件中找不到函数的描述,它将打印的参数数量。(我认为默认情况下是 /etc/ltrace.conf)。

在我的系统上,我可以看到相同的行为,但在那里找不到 mprotect,只有 SYS_mprotect。

如果你想再看一下 ltrace 源码,感兴趣的地方是 output.c,“func = name2func(function_name);”之后的条件 - 如果找不到函数名称的元信息(并且在这种情况下 name2func 中的线性查找返回 NULL),则打印 5 个 args。

因此,手册是正确的,它是“错误”的 ltrace(引用“错误”,因为从技术上讲代码可以正常工作,尽管配置中的 defs 可能应该被修复)

于 2009-10-27T22:07:51.167 回答