Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2013, 12:24   #1
Bezurog
 
Регистрация: 01.02.2011
Сообщений: 4
Печаль Машинный код CALL

Помогите разобраться с машинным кодом команды CALL.
Воскурение мануалов не дало просветления. Говорят что вызов процедуры по прямому адресу есть команда E8, по косвенному FF.

Однако, насколько я знаю, вызов функции, запись о которой присутствует в таблице импорта, осуществляется через обращение к полю FirstThunk нужной функции из таблицы адресов импорта (IAT) куда загрузчик пихает реальный адрес процедуры. Однако это получается косвенный вызов, типа CALL dword ptr [тута_адрес_FirstThunk] , соответственно команда должна быть FF, но отладчик мне выдает команду E8.

Если есть войны дзена, знающие PE-файлы и машинные коды помогите
Bezurog вне форума Ответить с цитированием
Старый 07.05.2013, 12:56   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
но отладчик мне выдает команду E8.
А ты посмотри куда она указывает. Возможно это не сама функция а ее заглушка - длинный jmp на функцию.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.05.2013, 03:37   #3
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Bezurog,
чтобы вызов процедур из секции импорта был прямым — придется отказаться от инвокабельного вызова
Код:
.386
.model flat
include windows.inc
include kernel32.inc
include user32.inc
includelib user32.lib
includelib kernel32.lib
 
.data
MsgCaption      db "Iczelion's tutorial #2",0
MsgBoxText      db "Win32 Assembly is Great!",0 
.code
start:
    invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK
    invoke ExitProcess,NULL
end start
под отладчиком выглядит вот так
Код:
.00400230: 6A00          ; push MB_OK
.00400232: 6800304000    ; push offset MsgCaption
.00400237: 6819304000    ; push offset MsgBoxText
.0040023C: 6A00          ; push 0
.0040023E: E807000000    ; call [40024A];invoke MessageBox,NULL,addr MsgBoxText,addr MsgCaption,MB_OK
.00400243: 6A00          ; push 0
.00400245: E806000000    ; call [400250];invoke ExitProcess,NULL
.0040024A: FF250820400000; jmp MessageBoxA
.00400250: FF250020400000; jmp ExitProcess
.00400256:
Если заменить invoke MessageBox на call _imp__MessageBoxA@16 и invoke ExitProcess на call _imp__ExitProcess@4
Код:
.386
.model flat
include windows.inc
include user32.inc
includelib user32.lib
includelib kernel32.lib
extern _imp__MessageBoxA@16:dword
extern _imp__ExitProcess@4:dword
.code
start:  push MB_OK
    push offset MsgCaption
    push offset MsgBoxText
    push NULL
    call _imp__MessageBoxA@16
    push NULL
    call _imp__ExitProcess@4
.data
MsgCaption      db "Iczelion's tutorial #2",0
MsgBoxText      db "Win32 Assembly is Great!",0
end start
тогда получим
Код:
400200:  6A00              ;push MB_OK
400202:  681B024000      ;push offset MsgCaption
400207:  6832024000      ;push offset MsgBoxText
40020C:  6A00              ;push 0
40020E:  E807000000      ;call MessageBox
400214:  6A00              ;push 0
400216:  E806000000      ;call ExitProcess
40021B:  49637A656C69...;'Iczelion''s tutorial #2',0
и вызов из импорта будет прямым без всяких заглушек. Более подробно всё расписано здесь
Mikl___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Машинный код и архитектура ЭВМ koljsch Компьютерное железо 5 05.03.2013 13:35
Как превратить amx файл (то есть машинный код) в исходный в pwn. DenisReaver Помощь студентам 4 19.08.2011 15:40
Машинный код pascal Nicko_mt Паскаль, Turbo Pascal, PascalABC.NET 3 22.05.2011 23:20
Delphi и машинный код. Создание файлов в Delphi 7. organic Помощь студентам 6 21.04.2010 13:16