![]() |
eXeL@B —› Вопросы новичков —› Подмена ф-ции |
Посл.ответ | Сообщение |
|
Создано: 22 января 2010 23:28 · Личное сообщение · #1 Есть вызов ф-ции DrawTextA из приложения по определеному адресу, хочу подменить на вызов своей ф-ци NewDrawTextA, пишу на делфях, делаю так: JmpDrawTA.CallOp := $E8; JmpDrawTA.CallArg := @NewDrawTextA; ................................................................... WriteProcessMemory(INVALID_HANDLE_VALUE, AdrDrawTA, @JmpDrawTA, SizeOf(far_jmp_new), Bytes); в итоге вызов идет в никуда, понимаю что ламерский вопрос, но прошу помощи. ![]() |
|
Создано: 22 января 2010 23:36 · Личное сообщение · #2 |
|
Создано: 22 января 2010 23:42 · Личное сообщение · #3 |
|
Создано: 23 января 2010 00:04 · Личное сообщение · #4 |
|
Создано: 23 января 2010 00:18 · Поправил: yanus0 · Личное сообщение · #5 _ruzmaz_ спасибо, но хендл хендлом, а переход на ф-цию не получается. если делать переход через push: push adr; retn; то все ок, в adr адрес функции тоесть: JmpDrawTA.CallOp := $68; JmpDrawTA.CallArg := @NewDrawTextA; JmpDrawTA.NopOp:= $С3; а через call не получаеться. структура far_jmp_new = packed record CallOp: byte; CallArg: pointer; NopOp:byte; end; ![]() |
|
Создано: 23 января 2010 00:23 · Поправил: _ruzmaz_ · Личное сообщение · #6 |
|
Создано: 23 января 2010 00:32 · Личное сообщение · #7 |
|
Создано: 23 января 2010 00:47 · Поправил: _ruzmaz_ · Личное сообщение · #8 BoRoV пишет: наверное она и есть в этой длл что инжектится наверно так, да yanus0 пишет: JmpDrawTA.CallOp := $E8; JmpDrawTA.CallArg := @NewDrawTextA; ................................................................... тогда там нужно не @NewDrawTextA, а смещение NewDrawTextA относительно инструкции, следующей за call ![]() |
|
Создано: 23 января 2010 04:20 · Личное сообщение · #9 |
|
Создано: 23 января 2010 20:56 · Личное сообщение · #10 |
![]() |
eXeL@B —› Вопросы новичков —› Подмена ф-ции |
Эта тема закрыта. Ответы больше не принимаются. |