Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
промежуточная инструкция jmp при вызове импортируемой функции
 
Гайз, я пишу курсач, в ходе которого мне нужно идти по секции кода бинарника и записывать в лог вызываемые функции. Алгоритм таков:
1) идём по коду, видим инструкцию вызова
2) вычисляем адрес перехода, который указывает на инструкцию jmp (0xFF25), которая указывает на адрес в структуре _IMAGE_IMPORT_DESCRIPTOR в таблице импорта
3) читаем из этой структуры имя импортируемой функции

выглядит это так:
вызов функции ExitProcess из секции кода программы
0040100C    E8 73000000     CALL <JMP.&kernel32.ExitProcess>         ; Jump to KERNEL32.ExitProcess
=> ведёт на промежуточный jmp
00401084  - FF25 08204000   JMP DWORD PTR [<&kernel32.ExitProcess>]
=> который уже прыгает на нужный адрес из таблицы импорта (который заменяется загрузчиком при старте программы)
ExitProce   55              PUSH EBP                                 ; KERNEL32.ExitProcess(ExitCode)


Этих промежуточных инструкций jmp в конце секции кода полным полно - целая таблица, причём это не зависит от компилятора, хоть я пишу на си в VS или CodeBlocks, хоть компилирую masm32.
Зачем она нужна? Есть подробный материал описывающий эту таблицу?
Был бы до жути признателен   :)
Страницы: 1
Читают тему