我试图获取libc中提供的函数exit()
的地址(十六进制),但我不知道在哪里以及如何找到它。
任何人都知道如何找到它请分享一些想法。谢谢!
答案 0 :(得分:9)
如果您需要过程中已存在的exit
功能的地址,请参阅Grijesh和其他人的回答。但是,如果您需要按名称解析libc exit
函数,例如因为libc的exit
已被另一个库遮蔽,您可以使用dlsym
获取它:
#define _GNU_SOURCE /* for RTLD_NEXT */
#include <dlfcn.h>
/* ... */
void (*exit_addr)(int) = dlsym(RTLD_NEXT, "exit");
要让dlsym
解决,您需要与-ldl
链接。
答案 1 :(得分:6)
我认为这会奏效:
printf("%p", (void*)exit);
IEEE Std 1003.1, 2004 Edition:
"%p"
参数应该是指向void
的指针。指针的值以实现定义的方式转换为可打印字符序列。
答案 2 :(得分:5)
任何函数的地址都只是它的名字(没有括号)。您还需要#include <stdlib.h>
。设置初始化指针:
void (*p)(int) = exit;
答案 3 :(得分:3)
您可以使用gdb,如下所示:
gdb ./yourprogram
break main
run
print exit
$1 = {<text variable, no debug info>} 0xb7e4b7f0 <exit>
here is exit() address----------------^
答案 4 :(得分:1)
printf("%p", exit);
您必须包含用于printf的stdio.h和用于退出的stdlib.h。这会创建一个退出并打印它的函数指针。