我为radare2调试器编写了一个Linux系统调用映射。这意味着要提供一个巨大的静态数组,将系统调用编号映射到syscall名称、名称和它所采用的参数数量。这对于OpenBSD来说很简单,因为syscall编号是在sys/syscall.h中定义的,并且在上面的注释中每个都是参数的数量。只需编写一个脚本来解析它并抛出数组的C代码即可。
然而,在linux上,我们没有这种奢侈。从内核头文件中获取syscall数很容易,但是如何获取args数呢?我唯一的想法是:
1)手动输入。对于每个拱门(它们在linux中的拱门之间是不同的)。所有300+的该死的东西。不行!
2)解析手册页。
3)编写一个脚本,尝试使用0,1,2来调用每个系统调用...参数,直到程序生成。不适用于varargs,但是syscall支持它吗?
一定有更好的方法。请帮帮我!
发布于 2011-07-07 07:18:05
strace
(home page)提供了包含所有这些内容的表(请参阅linux/<platform>/syscallent.h
)。源代码可以在GitHub/strace和GitLab/strace中找到。例如,x86_64架构中的系统调用列表是this link格式的。
发布于 2011-07-07 07:05:06
我所知道的唯一列表是include/linux/syscalls.h中的内核源代码。但这只是名称,而不是数字;我认为您需要使用特定平台的syscall.h头来获取数字。该文件中有几个#ifdefs ...
发布于 2018-03-05 02:53:02
This的帖子值得一读。希望这能有所帮助:)
https://stackoverflow.com/questions/6604007
复制相似问题