如何获取并将退出库函数的地址分配给全局变量?

时间:2013-07-24 11:35:34

标签: c global-variables shared-libraries exit

我想获取退出库函数的地址,然后将此地址分配给全局变量。

  //test3.c

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4   int fp = &exit;
  5 
  6 int main(){
  7   printf("fp=%d\n",fp);
  8   return 0;
  9 }

但是当我使用gcc编译上面的test3.c程序时出现了一个错误。

$ gcc -o test3 test3.c
test3.c:4:12: warning: initialization makes integer from pointer without a cast [enabled by default]
test3.c:4:3: error: initializer element is not computable at load time

当我得到并将exit的地址分配给main函数中的局部变量时,没有错误。

  //test4.c

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 int main(){
  5   int fp = &exit;
  6   printf("fp=%d\n",fp);
  7   return 0;
  8 }

我可以打印结果:

$ gcc -o test4 test4.c
test4.c: In function ‘main’:
test4.c:5:12: warning: initialization makes integer from pointer without a cast [enabled by default]
$ ./test4
fp=4195408

如何将退出地址分配给全局变量?

1 个答案:

答案 0 :(得分:3)

您应该使用正确的类型声明fp(即指向函数的指针int并且不返回任何内容):

void (*fp)(int) = &exit;

然后不确定您要对printf尝试做什么。如果您要打印地址,请使用%p代替%d