The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Может ли функция узнать, откуда она вызвана?"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Может ли функция узнать, откуда она вызвана?"
Сообщение от divan emailИскать по авторуВ закладки on 17-Дек-03, 13:34  (MSK)
Такая вот задача - нужно узнавать из какой функции(нужен адресс) произошел вызов. Можно ли такое осуществить? Компилятор gcc, проект пишеться на ANSI C, под Linux. Идеи и ссылки приветствуютсья.
Зараннее ссенкс!
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

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

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

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


  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Может ли функция узнать, откуда она вызвана?"
Сообщение от genie Искать по авторуВ закладки on 18-Дек-03, 00:03  (MSK)
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.
>
>>Зараннее ссенкс!


  Рекомендовать в FAQ | Cообщить модератору | Наверх

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

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


  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Может ли функция узнать, откуда она вызвана?"
Сообщение от Murr Искать по авторуВ закладки on 09-Янв-04, 22:13  (MSK)
__builtin_return_address(0)
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру