将转到标签暴露给符号表

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

例如,我想从符号表中生成以下代码段的ret标签,并且可以使用标准API(如dlsym())进行引用。

感谢您的帮助!

#include  int main () { void *ret_p = &&ret; printf("ret: %p\n", ret_p); goto *ret_p; return 1; ret: return 0; } 

感谢Marc Glisse关于使用指定标签的内联asm的评论,我可以想出一个问题的解决方法。 以下示例代码段显示了我如何解决问题。

 #include  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 tc -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 tc 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 

我将进一步测试这种解决方法,validation这是否会产生任何意外的副作用。

谢谢