Вопрос № 47524: Здравствуйте.
Задача такая: необходимо узнать адрес начала функции в которой в текущий момент выполняется программа.
Например:
void function() {
...
/*Как узнать в данной строке адрес function? Нужен универсальный вариант (т...
Вопрос № 47.524
Здравствуйте.
Задача такая: необходимо узнать адрес начала функции в которой в текущий момент выполняется программа.
Например:
void function() {
...
/*Как узнать в данной строке адрес function? Нужен универсальный вариант (т.е. ничего о самой function я не знаю). Вариант
void *f=function естественно не подходит.
*/
...
}
void main() {
function();
}
Так же хотелось бы узнать как происходит вызов функции под Linux 64 (что делает команда call известно, а вот что дальше происходит
со стеком?).
Разработка ведётся под Linux 64 на C + inline asm.
Отвечает: Евгений Иванов
Здравствуйте, Сиднев Алексей!
Обычно это делается так:
call GetAddress
eax - адрес функции
proc GetAddress
pop eax
push eax
ret
endp
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус:
Профессор) Россия, Нижний Новгород Тел.: +78313145721 Организация: M2Media.ru Адрес:
Нижний Новгород, ул.Малая Ямская WWW:Eugene Ivanov ICQ:
214;88;90;76 ---- Ответ отправлен: 28.06.2006, 08:44
Отвечает: Mihasic
Здравствуйте, Сиднев Алексей!
В C (как и в C++) имя функции и является ее адресом:
void *p = function;
(в C++)
void *p = reinterpret_cast<void *>(function);
Про стэк -- к описанию компилятора (обычно в C за очистку стэка отвечает вызывающий код, если не установлены другие опции
компилятора либо спецификаторы в функции).
Ответ отправил: Mihasic (статус:
2-ой класс)
Ответ отправлен: 28.06.2006, 11:25