系统调用的值在符号表中为0

系统调用的值在符号表中为0

我使用以下命令查看二进制文件的符号表:

readelf -s mybinary

您可以看到下面的部分输出: 在此输入图像描述

正如你所看到的,所有系统调用(例如 printf 和 exit)的值都是 00000000。但我想找到这个系统调用的地址。我应该怎么办?我搜索了很多,但没有找到任何东西。

答案1

printf包含和函数的库exit是一个共享库(*.so),在程序启动后动态加载。在动态链接器将库放入进程的地址空间之前,这些函数的地址是未知的。程序的一次运行和另一次运行期间,地址可能会发生变化。

您可以使用gdb调试器来查找动态链接器放置函数的位置,方法是运行程序直到出现断点,然后p printf在调试器提示符下键入。

为了避免动态链接,您可以将库静态链接到您的程序。如果执行此操作,则地址是预先已知的,并且可以使用进行检查readelf。要使用静态编译程序gcc,请将-static选项添加到命令行,例如:

gcc -static myprog.c -o myprog

相关内容