Такая вот задача - нужно узнавать из какой функции(нужен адресс) произошел вызов. Можно ли такое осуществить? Компилятор gcc, проект пишеться на ANSI C, под Linux. Идеи и ссылки приветствуютсья.
Зараннее ссенкс!
>Такая вот задача - нужно узнавать из какой функции(нужен адресс) произошел вызов.
>Можно ли такое осуществить? Компилятор gcc, проект пишеться на ANSI C,
>под Linux. Идеи и ссылки приветствуютсья.Средствами собственно языка невозможно. Так или иначе, необходимо иметь таблицу символов, а также знать детали архитектуры и условия компиляции и сборки. Смотрите на gdb. Помните, что сколько-нибудь надежный анализ пути вызова возможен только при -g.
>Зараннее ссенкс!
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.
>
>>Зараннее ссенкс!
>Такая вот задача - нужно узнавать из какой функции(нужен адресс) произошел вызов.
>Можно ли такое осуществить? Компилятор gcc, проект пишеться на ANSI C,
>под Linux. Идеи и ссылки приветствуютсья.
>Зараннее ссенкс!
Попробуй longjmp. Используй setjmp перед входом в ф-цию.
Гм, пришлось отказаться от такого подхода. Дело в том, что функция должна вызываться из подключаемых модулей. Собственно и нужно было определять, из какого модуля вызываеться. Сделал это немного пояпонски, но для данного случая идеально(подробностей писать не буду - требует дальнейшего вникания в проект :)
Всем ссенкс.
__builtin_return_address(0)