libc中的函数地址?

时间:2013-03-08 19:37:11

标签: c linux libc


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

5 个答案:

答案 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。这会创建一个退出并打印它的函数指针。