URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2399
[ Назад ]

Исходное сообщение
"Может ли функция узнать, откуда она вызвана?"

Отправлено divan , 17-Дек-03 13:34 
Такая вот задача - нужно узнавать из какой функции(нужен адресс) произошел вызов. Можно ли такое осуществить? Компилятор gcc, проект пишеться на ANSI C, под Linux. Идеи и ссылки приветствуютсья.
Зараннее ссенкс!

Содержание

Сообщения в этом обсуждении
"Может ли функция узнать, откуда она вызвана?"
Отправлено vnp , 17-Дек-03 21:43 
>Такая вот задача - нужно узнавать из какой функции(нужен адресс) произошел вызов.
>Можно ли такое осуществить? Компилятор gcc, проект пишеться на ANSI C,
>под Linux. Идеи и ссылки приветствуютсья.

Средствами собственно языка невозможно. Так или иначе, необходимо иметь таблицу символов, а также знать детали архитектуры и условия компиляции и сборки. Смотрите на gdb. Помните, что сколько-нибудь надежный анализ пути вызова возможен только при -g.

>Зараннее ссенкс!



"Может ли функция узнать, откуда она вызвана?"
Отправлено genie , 18-Дек-03 00:03 
Ya tak ponimau, chto rech' idet o i386 arhitekture?

Togda mozhno sdelat' tak - pri vyzove funkcii prohodit' po vsem frames v steke i iskat', kakomu simvolu prinadlezhit adres vozvrata - a eto mozhno uznat' libo cherez map-file (esli est') libo v nachale raboty zaregistrirovat' adres vseh izvestnyh i interesuuschih tebya funkcii v kakom-to map.

>>Такая вот задача - нужно узнавать из какой функции(нужен адресс) произошел вызов.
>>Можно ли такое осуществить? Компилятор gcc, проект пишеться на ANSI C,
>>под Linux. Идеи и ссылки приветствуютсья.
>
>Средствами собственно языка невозможно. Так или иначе, необходимо иметь таблицу символов, а
>также знать детали архитектуры и условия компиляции и сборки. Смотрите на
>gdb. Помните, что сколько-нибудь надежный анализ пути вызова возможен только при
>-g.
>
>>Зараннее ссенкс!



"Может ли функция узнать, откуда она вызвана?"
Отправлено oxid , 18-Дек-03 01:11 
>Такая вот задача - нужно узнавать из какой функции(нужен адресс) произошел вызов.
>Можно ли такое осуществить? Компилятор gcc, проект пишеться на ANSI C,
>под Linux. Идеи и ссылки приветствуютсья.
>Зараннее ссенкс!
Попробуй longjmp. Используй setjmp перед входом в ф-цию.

"Может ли функция узнать, откуда она вызвана?"
Отправлено divan , 18-Дек-03 10:44 
Гм, пришлось отказаться от такого подхода. Дело в том, что функция должна вызываться из подключаемых модулей. Собственно и нужно было определять, из какого модуля вызываеться. Сделал это немного пояпонски, но для данного случая идеально(подробностей писать не буду - требует дальнейшего вникания в проект :)
Всем ссенкс.



"Может ли функция узнать, откуда она вызвана?"
Отправлено Murr , 09-Янв-04 22:13 
__builtin_return_address(0)