【问题标题】:How to get the parameter list and their type of a system call?如何获取系统调用的参数列表及其类型?
【发布时间】:2013-11-21 15:23:51
【问题描述】:

我想知道是否有一种方法可以获取 linux 系统调用的所有参数及其类型...作为列表或任何数据结构。绝对使用 C 或 C++。 有一些方法可以给出参数的内存地址,但我需要实际值。

或者是否有人可以告诉我如何从这些内存地址中获取实际值?因为这些地址在不同的时间持有不同类型的值。

谁能帮帮我?

【问题讨论】:

  • man <name ot the syscall>
  • 你能举例说明你的意思吗?
  • 在此链接link 中,您将找到一个演示读取 SYS_write 系统调用寄存器的示例。我希望与其他系统调用一起使用,并希望读取实际值而不是内存地址。例如,在该程序中,输出如下:Write called with 1, 1075154944, 30 。这里的第二个值是一个地址。
  • Here is a list of i386 linux system calls。通过 Google 搜索短语 “Linux 系统调用列表”(包括每个参数信息)
  • 您在寻找strace吗?它已经为您编写了所有 150719 cases。

标签: c++ c linux system


【解决方案1】:

试试看这里,看起来它应该可以带你去你要去的地方:

How can I get a list of Linux system calls and number of args they take automatically?

【讨论】:

  • 这只给出了参数的数量......我也需要参数类型。 :(
  • 如果你有权限,你可以查看定义这些的头文件,其中应该有每个调用的签名,允许你获取类型。 root/include/linux/syscalls.h。你应该能够在运行时解析它并得到你需要的东西。见syscalls.h
  • 是的。但我很困惑......我应该将它作为文本阅读并解析所需的信息......还是有其他聪明的方法可以做到这一点?可能是元编程或在运行时确定函数参数类型的任何方式。
  • 我会说,如果任何其他建议的解决方案(例如 strace)不能满足您的需求,那么您可以对其进行解析并以这种方式获取您需要的信息。
猜你喜欢
  • 2022-10-31
  • 1970-01-01
  • 2014-03-02
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 2015-05-10
  • 2017-06-30
  • 1970-01-01
相关资源
最近更新 更多