Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向符号表公开goto标签_C++_C_Gcc_Symbols_Goto - Fatal编程技术网

C++ 向符号表公开goto标签

C++ 向符号表公开goto标签,c++,c,gcc,symbols,goto,C++,C,Gcc,Symbols,Goto,我想知道是否有可能从C/C向符号表公开函数中的goto标签++ 例如,我想使下面代码段的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; } #包括 in

我想知道是否有可能从C/C向符号表公开函数中的goto标签++

例如,我想使下面代码段的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;
}
#包括
int main(){
void*ret_p=&&ret;
printf(“ret:%p\n”,ret\u p);
后进先出;
返回1;
ret:
返回0;
}
多亏了关于使用指定标签的内联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;
}
我将进一步测试这个解决方案,以验证它是否会产生任何意外的副作用


谢谢

根本不可能(并且你的代码不是标准C++,而且,也不是标准C——但是你可能知道)。你可以使用内联的ASM来添加汇编程序希望指示的任何代码。(顺便说一句,&&ret是一个gcc扩展,我想,你可能想添加一个gcc标签)@KonradRudolph是的,你是对的,Konrad,计算goto不是标准的一部分。不过,我正在寻找一种适用于gcc(或clang)的解决方案。我确信编译后可以编辑符号表,并添加一个指向已知函数中偏移量的“符号”,然后读取该地址和jmp,希望寄存器和内存状态不会立即导致CPU崩溃…aaaaaaaarrgh!!!如果“goto”是邪恶的,那么这是什么??世界末日野兽的疑虑?!?
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