gpt4 book ai didi

c++ - 将 goto 标签暴露给符号表

转载 作者:太空狗 更新时间:2023-10-29 21:25:18 26 4
gpt4 key购买 nike

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

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

提前感谢您的帮助!

#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关于使用指定标签的内联汇编的评论,我可以想出一个解决方法来解决这个问题。以下示例代码片段展示了我是如何解决这个问题的。

#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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com