Предоставление меток goto в таблицу символов

Я хочу знать, возможно ли выставить метку 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;
}

3

Решение

Благодаря Марк ГлиссВ комментарии, касающемся использования встроенного 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

Далее я протестирую этот обходной путь, чтобы убедиться, что он вызывает неожиданные побочные эффекты.

Спасибо

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]