Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 485
от 03.07.2006, 03:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 331, Экспертов: 22
В номере:Вопросов: 1, Ответов: 2


Вопрос № 47524: Здравствуйте. Задача такая: необходимо узнать адрес начала функции в которой в текущий момент выполняется программа. Например: void function() { ... /*Как узнать в данной строке адрес function? Нужен универсальный вариант (т...

Вопрос № 47.524
Здравствуйте.
Задача такая: необходимо узнать адрес начала функции в которой в текущий момент выполняется программа.
Например:

void function() {
...
/*Как узнать в данной строке адрес function? Нужен универсальный вариант (т.е. ничего о самой function я не знаю). Вариант void *f=function естественно не подходит.
*/
...
}

void main() {
function();
}

Так же хотелось бы узнать как происходит вызов функции под Linux 64 (что делает команда call известно, а вот что дальше происходит со стеком?).
Разработка ведётся под Linux 64 на C + inline asm.
Отправлен: 28.06.2006, 01:02
Вопрос задал: Сиднев Алексей (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгений Иванов
Здравствуйте, Сиднев Алексей!
Обычно это делается так:

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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное