![]() |
eXeL@B —› Вопросы новичков —› IAT в Olly Dbg |
Посл.ответ | Сообщение |
|
Создано: 29 октября 2011 09:33 · Личное сообщение · #1 Если посмотреть на IAT в Olly Dbg можно увидеть что-то вроде такого: 004013FE .-FF25 84314000 JMP DWORD PTR DS:[<&USER32.KillTimer>] ; USER32.KillTimer или вот такого: 0040140A $-FF25 8C314000 JMP DWORD PTR DS:[<&USER32.LoadCursorA>] ; USER32.LoadCursorA Может кто-нибудь обьяснить, что именно означает current location counter ($) в данном случае? Ведь по-идее мы говорим: FF25 8C314000 == прыгай на адрес 40318С, там будет адрес USER32.LoadCursorA Что значат "$-" or "$+" and ".-"? Для чего они в opcode для unconditional jump? Заранее спасибо! ----- Give me a HANDLE and I will move the Earth. ![]() |
|
Создано: 29 октября 2011 09:40 · Поправил: Nightshade · Личное сообщение · #2 & -означает адрес т е &USER32.LoadCursorA - адрес функции LoadCursorA в библиотеке USER32 plutos пишет: Ведь по-идее мы говорим:FF25 8C314000 == прыгай на адрес 40318С, там будет адрес USER32.LoadCursorA Нет. Мы говорим прыгает на указатель по адресу 40318С(это иат) в котором содержится "адрес функции LoadCursorA в библиотеке USER32" $означает что сюда есть прыжки(точнее несколько). Они написаны ниже кода. Можешь нажать правой кнопкой на списке и посмотреть там код. ![]() |
|
Создано: 29 октября 2011 10:09 · Поправил: plutos · Личное сообщение · #3 |
|
Создано: 29 октября 2011 10:32 · Личное сообщение · #4 |
|
Создано: 29 октября 2011 10:33 · Поправил: PE_Kill · Личное сообщение · #5 Что то вы тут собрали всё подряд. IAT - Import Adress Table Таблица адресов импортируемых функций. & - в OllyDbg означает указатель. FF25 (JMP) - используется для оптимизации размера кода. Т.е. если везде, где нужно вызвать API генерировать FF15 (CALL), то код будет 6 байт, если сделать один переходник FF25 (JMP) и вызывать его через CALL (E8), то код будет 5 байт. $- FF25 - означает, что переходник как раз и вызывается напрямую через CALL (E8) .- FF25 - означает, что адрес переходника где то считывается, например @L: jmp dword ptr [<&USER32.KillTimer>] mov eax, offset @L call eax PS Поправил, натупил. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 29 октября 2011 11:21 · Поправил: plutos · Личное сообщение · #6 |
|
Создано: 29 октября 2011 12:34 · Личное сообщение · #7 |
|
Создано: 30 октября 2011 06:18 · Личное сообщение · #8 "если сделать один переходник..." Уважаемый PE_Kill! Хочу убедиться, что правильно Вас понял. Когда Вы говорите про "один переходник", Вы имеете ввиду вот это: By using the pointer table, the loader does not need to fixup all of the places in the code that want to use the api call, all it has to do is add the pointer to a single place in a table and its work is done. ----- Give me a HANDLE and I will move the Earth. ![]() |
|
Создано: 30 октября 2011 08:34 · Личное сообщение · #9 Ну да. Допустим у нас по адресу 401020 лежит адрес функции CreateFileA. Мы пишем программу по работе с файлами и постоянно вызываем эту функцию. Если компилятор будет вызывать ее через указатель 401020, то будет много таких вызовов: call dword ptr [401020] call dword ptr [401020] call dword ptr [401020] call dword ptr [401020] т.е. FF15 ADDR, а это каждый раз 6 байт, 2 байта на опкод FF15, и 4 байта на адрес. Если вместо этого где то в начале или в конце, компилятор сгенерирует jmp dword ptr [401020], то можно уже не вызывать API через адрес 401020, а вызывать именно через этот jmp, например: 401000: jmp dword ptr [401020] call 401000 call 401000 call 401000 call 401000 call 401000 Т.е. теперь API вызывается с помощью короткого CALL (E8 OFFSET) и занимает 5 байт, 1 байт на опкод E8 и 4 байта на смещение. Ну и как ты сам упоминул при таком подходе используется относительная адресация через смещение, а не через адрес, поэтому загрузчику не нужно исправлять адреса в коде, как при первом варианте, тут ему нужно будет поправить адрес только в инструкции jmp dword ptr [401020]. Т.е. применить fixup если файл загрузился не по своей базе. ----- Yann Tiersen best and do not fuck ![]() |
![]() |
eXeL@B —› Вопросы новичков —› IAT в Olly Dbg |