我编写了一个程序来列出命令(比如/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(#33 on x86)只有两个参数:
- 首先是指向文件名的指针,所以你的文件名存储在地址0x4c4d8e
- 第二个参数是文件模式(见模式标志定义)
- 因为这个系统调用没有第三个参数,edx 不相关并且包含一些未定义的值
此系统调用的返回值为 -2(ENOENT,在 errno-base.h 中定义),表示错误(没有此类文件或目录)。
另请注意(参见上面 Basile 的评论)您正在复制 strace 的功能效用。
关于c - 使用 ptrace 跟踪系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9769350/