一尘不染

使用ptrace进行系统调用跟踪

linux

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

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

根据我的研究,这些必须在寄存器(ebx-
edx)中。如果是,则这些寄存器值表示什么?我知道了这个链接
但是我真的不能从那里得到很多。同样,对此的任何进一步参考也将很有帮助。


阅读 458

收藏
2020-06-07

共1个答案

一尘不染

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

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

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

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

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

2020-06-07