libc中的函数地址?

All*_*ang 8 c linux libc


我试图获取exit()libc中提供的函数的地址(十六进制),但我不知道在哪里以及如何找到它.
任何人都知道找到它的方法请分享一些想法.谢谢!

use*_*342 9

如果您需要exit过程中已存在的函数的地址,请参阅Grijesh和其他人的答案.但是如果你需要通过名称来解析libc exit函数,例如因为libc 被另一个库遮蔽了,你可以使用以下方法获取它:exitdlsym

#define _GNU_SOURCE     /* for RTLD_NEXT */
#include <dlfcn.h>
/* ... */
void (*exit_addr)(int) = dlsym(RTLD_NEXT, "exit");
Run Code Online (Sandbox Code Playgroud)

对于dlsym解决,您需要与链接-ldl.

  • 感谢您的回答,感谢您的良好技术答案:) (2认同)

Gri*_*han 6

我认为这会奏效:

printf("%p", (void*)exit);
Run Code Online (Sandbox Code Playgroud)

IEEE Std 1003.1,2004版:

"%p"参数应该是指针void.指针的值以实现定义的方式转换为可打印字符序列.


tep*_*pic 5

任何函数的地址都只是它的名字(没有括号).你也需要#include <stdlib.h>.要设置初始化指针:

void (*p)(int) = exit;
Run Code Online (Sandbox Code Playgroud)