使用ptrace进行系统调用跟踪

时间:2012-03-19 11:29:20

标签: c linux system-calls ptrace

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

  

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

根据我的研究,这些必须在寄存器中(ebx - edx)如果是这样,这些寄存器值是什么意思? 我得到了这个link
但我真的无法从那里得到多少。此外,对此的任何进一步参考将是非常有帮助的。

1 个答案:

答案 0 :(得分:0)

(上面的修改后的评论形式(所以你可以接受)):

可以在Linux内核头syscalls.h中查找详细的系统调用参数。 在上面的例子中,sys_access(x86上的#33)只有两个参数:

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

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

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