c - 使用 ptrace 跟踪系统调用

标签 c linux system-calls 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(#33 on x86)只有两个参数:

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

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

另请注意(参见上面 Basile 的评论)您正在复制 strace 的功能效用。

关于c - 使用 ptrace 跟踪系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9769350/

相关文章:

linux - 如何在 Linux 中对齐包含不同分隔符的文本文件的不同部分?

linux - Linux 程序中的偏移指令

linux - 与计算机上安装的用于添加系统调用的 linux 内核代码相同吗?

c# - 将指针传递给 Go DLL Syscall 中的指针

c - 无法检查 Nt Authority\System SID

指向不完整结构类型和后来的结构类型完成 VS 的 C 指针。指向未声明类型 T_t 和稍后类型 T_t 声明的指针

c - 关于 C 分配的问题

c - 链接到 libGL 添加了对 NVidia 库的引用

c - 在c套接字编程中使用write发送缓冲区

c++ - 为什么使用 conio.h?