1

我编写了一个程序来列出由命令(例如 /bin/ls)执行的所有系统调用。现在我要做的是找到所有可能传递给它的系统调用参数、环境变量、命令行参数

示例:如果我打开一个文件。系统调用 sys_access 会打开文件吗?但是如何获得这些值呢?
想要对系统调用执行此操作,例如打开、读取、写入、关闭。

根据我的研究,这些必须在寄存器中(ebx - edx)如果是这样,这些寄存器值意味着什么?我得到了这个链接
但我真的不能从那里得到什么。此外,对此的任何进一步参考都会很有帮助。

4

1 回答 1

0

(以上评论的修改形式(以便您可以接受)):

详细的系统调用参数可以在 Linux 内核头文件syscalls.h中查找。在上述情况下,因为 sys_access(x86 上的#33)只有两个参数:

  • 首先是指向文件名的指针,因此您的文件名存储在地址 0x4c4d8e
  • 第二个参数是文件模式(见模式标志定义)
  • 由于此系统调用没有第三个参数,edx 不相关并且包含一些未定义的值

此系统调用的返回值为 -2(ENOENT,在errno-base.h中定义),表示错误(没有这样的文件或目录)。

另请注意(请参阅上面的 Basile 评论)您正在复制strace实用程序的功能。

于 2012-03-19T21:13:26.727 回答