Я хочу знать, возможно ли выставить метку 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;
}
Благодаря Марк ГлиссВ комментарии, касающемся использования встроенного 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
Далее я протестирую этот обходной путь, чтобы убедиться, что он вызывает неожиданные побочные эффекты.
Спасибо
Других решений пока нет …