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

RFpro.ru: Ассемблер? Это просто! Учимся программировать


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

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

Чемпионы рейтинга экспертов в этой рассылке

_Ayl_
Статус: Студент
Рейтинг: 960
∙ повысить рейтинг >>
Jimhucksly
Статус: 5-й класс
Рейтинг: 587
∙ повысить рейтинг >>
Boriss
Статус: Академик
Рейтинг: 194
∙ повысить рейтинг >>

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Номер выпуска:1240
Дата выхода:09.08.2009, 19:05
Администратор рассылки:Лысков Игорь Витальевич, Модератор
Подписчиков / экспертов:433 / 63
Вопросов / ответов:1 / 1
IRC-канал по теме:#assembler

Вопрос № 171058: Здравствуйте уважаемые эксперты!!! Объясните, пожалуйста, как работает команда invoke??? если хотите, можете показать какой-нибудь простенький пример с использованием invoke(тока на FASM'е)!!!


Вопрос № 171058:

Здравствуйте уважаемые эксперты!!!
Объясните, пожалуйста, как работает команда invoke???
если хотите, можете показать какой-нибудь простенький пример с использованием invoke(тока на FASM'е)!!!

Отправлен: 04.08.2009, 18:49
Вопрос задал: WWWorm, Посетитель
Всего ответов: 1
Страница вопроса >>


Отвечает Зенченко Константин Николаевич, Модератор :
Здравствуйте, WWWorm.

Это не команда, а макрос, находится в файле INCLUDE\MACRO\PROC32.INC
Код:
macro invoke proc,[arg]   ; indirectly call STDCALL procedure
{ common
if ~ arg eq
reverse
pushd arg
common
end if
call [proc] }

Этот макрос генерирует код, который сохраняет в стеке значения аргументов и после этого вызывает подпрограмму с именем указанным первым.
Для примера расмотрим строку invoke MessageBoxA,0,_message,_caption,MB_ICONQUESTION+MB_YESNO файла EXAMPLES\BEER\BEER.ASM(fasm 1.67.26). После компиляции программы получился исполняемый файл BEER.EXE. Смотрим его в дизассемблере, к примеру IDA, получаем ре зультат:
Код:
.flat:00401000                 push    24h
.flat:00401002 push offset aDesktopConfigu ; "Desktop configuration"
.flat:00401007 push offset aDoYouNeedAddit ; "Do you need additional place for the be"...
.flat:0040100C push 0
.flat:0040100E call MessageBoxA

Как видно сгенерирован код, в котором все аргументы макроса прочитаны с право на лево, сохранены в стеке и после этого вызвана подпрограмма вывода сообщения.
Удачи!
-----
Итерация от человека. Рекурсия — от Бога. — Л. Питер Дойч

Ответ отправил: Зенченко Константин Николаевич, Модератор
Ответ отправлен: 04.08.2009, 19:55
Украина, Киев
Тел.: +38-097-953-66-19
Адрес: Украина, Киев

Оценка ответа: 5

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 252940 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск >>
    Нам очень важно Ваше мнение об этом выпуске рассылки!

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

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.6 от 21.07.2009

    В избранное