Сейчас на форуме: Rio (+5 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Вопрос - по импорту функций |
Посл.ответ | Сообщение |
|
Создано: 06 августа 2008 16:11 · Личное сообщение · #1 Здравствуйте. Хочу чётко понять и поэтому хочу спросить знающих, как происходит импорт. Если я буру например простую прогу, (шаблон для keygen, я её прикрепляю) и открываю её в W32DSM И пытаюсь понять например как происходит импорт функции GetModuleHandleA из kernel32.dll то я вижу, что сначала делается Call 0040118C
А внутри функции которая начинается по адресу 0040118C я вижу Jmp dword prt [00402000] тоесть кудато происходит Jmp, только непойму как он работает.
Почему при Jmpe на 00402000 я оказываюсь в kernel32.dll, если я делаю debugging. Объясните пожалуйста ктонибудь как это всё работает поподробней, буду очень благодарен ![]() ![]() ![]() |
|
Создано: 06 августа 2008 16:40 · Личное сообщение · #2 tent пишет: Почему при Jmpe на 00402000 я оказываюсь в kernel32.dll Потому что джамп происходит на адрес, который лежит по адресу 00402000. Т.е. адрес 00402000 является указателем на функцию GetModuleHandleA Об этом красноречиво говорят квадратные скобки. Посмотри свой кейген лучше под отладчиком (OllyDbg). Там все наглядно увидишь. ![]() |
|
Создано: 07 августа 2008 19:25 · Поправил: tent · Личное сообщение · #3 |
|
Создано: 07 августа 2008 19:57 · Личное сообщение · #4 |
|
Создано: 08 августа 2008 09:39 · Личное сообщение · #5 Ок понятно. Я ещё хотелбы узнать. Когда происходит Call GetModuleHandle например в моём кейгене, допустим Call 0040118C
и после происходит Jmp Jmp dword prt [00402000]
То jmp происходит на адрес 00402000 который находится (насколько я понимаю) вне адресного пространства сегмента кода, но при этом я попадаю при jmpе на адрес 7C80B529. Вот этот момент я неособо понимаю, расскажите пожалуйста как это работает. ![]() |
|
Создано: 08 августа 2008 10:04 · Личное сообщение · #6 В ячейке 00402000 лежит RVA на данные 0000,'GetModuleHandleA',0 При запуске загрзчик вычисляет адрес GetModuleHandleA и вписывает его в ячейку 00402000. А вообще тебе надо сначала асм поучить а не импорт. Т.к. tent пишет: Jmp dword prt [00402000] То jmp происходит на адрес 00402000 Эта команда не может переходить на адрес 00402000. Она переходит на адрес, который лежит в ячейке 00402000. ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 08 августа 2008 14:10 · Поправил: tent · Личное сообщение · #7 |
|
Создано: 08 августа 2008 14:37 · Поправил: Errins · Личное сообщение · #8 Загрузчик берет эти данные из таблицы экспорта библиотеки, в которой находится функция. Там лежат RVA функций библиотеки, он добавляет к этим значениям ImageBase библиотеки и пишет их в таблицу импорта файла. Вообще с такими вопросами почитай про формат PE (например, тут http://www.exelab.ru/art/?action=view&id=146), там вся необходимая информация есть. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Вопрос - по импорту функций |