我想知道是否可以从C / C++将函数中的goto标签公开给符号表

例如,我想使以下代码段的ret标 checkout 现在符号表中,并且可以使用诸如dlsym()之类的标准API进行引用。

谢谢您的帮助!

#include <stdio.h>

int main () {
  void *ret_p = &&ret;
  printf("ret: %p\n", ret_p);
  goto *ret_p;

  return 1;

  ret:
  return 0;
}

最佳答案

感谢Marc Glisse的注释,它是有关使用指定标签的嵌入式asm的,因此我可以提出一个解决该问题的方法。以下示例代码段显示了如何解决该问题。

#include <stdio.h>

int main () {
  void *ret_p = &&ret;
  printf("ret: %p\n", ret_p);
  goto *ret_p;

  return 1;

  ret:
  asm("RET:")

  return 0;
}

这将添加一个符号表条目,如下所示。
jikk@sos15-32:~$ gcc  -Wl,--export-dynamic t.c  -ldl
jikk@sos15-32:~$ readelf -s a.out

39: 08048620     0 FUNC    LOCAL  DEFAULT   13 __do_global_ctors_aux
40: 00000000     0 FILE    LOCAL  DEFAULT  ABS t.c
41: 0804858a     0 NOTYPE  LOCAL  DEFAULT   13 RET
42: 08048612     0 FUNC    LOCAL  DEFAULT   13 __i686.get_pc_thunk.bx
43: 08049f20     0 OBJECT  LOCAL  DEFAULT   19 __DTOR_END__

jikk@sos15-32:~$ ./a.out
ret: 0x804858a

我将进一步测试此变通办法,以验证是否会产生任何意外的副作用。

谢谢

关于c++ - 将goto标签暴露给符号表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14268325/

10-09 13:25