使用ptrace进行系统调用跟踪

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

Example: If I open a file. The system call sys_access will open the file right ? But how to get these values?
Want to do this for system calls like open, read, write, close.

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

解决方法:

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

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

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

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

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

上一篇:如何使用内存缓存(IMemoryCache)


下一篇:linux-ptrace’ing多线程应用程序