【发布时间】:2012-12-25 10:54:25
【问题描述】:
我想知道是否可以将函数内的 goto 标签暴露给 C/C++ 的符号表
例如,我想让以下sn-p的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;
}
【问题讨论】:
-
根本不可能(而且你的代码不是标准的 C++,而且,AFAIK,它也不是标准的 C——但你可能知道)。
-
您可以使用内联汇编来添加汇编程序期望指示符号的任何代码。 (顺便说一句,我认为 &&ret 是一个 gcc 扩展,您可能需要添加一个 gcc 标签)
-
@KonradRudolph 是的,你是对的 Konrad,计算的 goto 不是标准的一部分。但是我正在寻找适用于 gcc(或 clang)的解决方案。
-
我确信可以在编译后编辑符号表并添加一个指向已知函数中偏移量的“符号”,然后读取该地址并 jmp 并希望寄存器和内存状态获胜不要立即导致 CPU 冒烟...
-
Aaaaaaarrgh!!! 如果
goto是邪恶的,那么这是什么?末世兽的疑虑?!?