如何知道 Linux 系统调用的参数?

逆向工程 linux 系统调用
2021-06-12 10:32:47

据我所知,是了解 Linux 系统调用参数的不错资源。但是,这仅列出了 32 位系统调用,而不是 64 位系统调用。此外,参考文献没有说明哪个参数正在使用哪个寄存器。

到目前为止,我明白,libc 包装器的手册页或参考 Linux 内核头文件可以是一个解决方案。但是,我正在寻找可以快速咨询的更友好的资源。

  • 知道注册映射的参数的真实资源是什么?
  • 是否也有 64 位系统调用的资源?
2个回答

这个 StackOverflow 答案是一个很好的资源。

总之,对于 32 位:系统调用号是 eax。ebx、ecx、edx、esi、edi、ebp 用于参数。你用 调用系统调用int 0x80在系统调用之后,所有寄存器都被保留。

对于 64 位,该答案引用了规范,正如您所要求的那样,这可能是一个很好的“真实资源”。

是一个很好的 64 位系统调用表。

是一个很好的 32 位系统调用表。

我不会把它真实的,但这个肯定是我一直在使用了一段时间的来源。

双击 syscall 行以查看参数是什么(及其类型)。

您可能会看到诸如 之类的内容struct sockaddr __user,因此您需要深入研究源文件。