Изменить поведение целевой функции, но не полностью

РЕДАКТИРОВАТЬ: Я знаю, что это возможно с OllyDBG, я сделал это работающим, но мне все еще нужна версия времени выполнения (CPP), чтобы я мог выполнить прыжок там.

В этот функция (псевдокод) внутри коммутатора. Я бы хотел изменить операции в случае 115, например, изменить CALL 100CE3E8 на CALL 100CF1E9

Это выглядит как:

(дело 115)

sub_100CE3E8(a1, v19);
break;

1024185D   8B45 E8          MOV EAX,DWORD PTR SS:[EBP-18]
10241860   50               PUSH EAX
10241861   8B4D 08          MOV ECX,DWORD PTR SS:[EBP+8]
10241864   51               PUSH ECX
10241865   8B0D A0B12A10    MOV ECX,DWORD PTR DS:[102AB1A0]
1024186B   E8 78CBE8FF      CALL somelib.100CE3E8

И я хотел бы заменить в этом случае указанную часть инструкции, например, 1024186B

Я использую MS Windows Detours 1.5 для выполнения таких операций, и в большинстве случаев это работает хорошо.

    void hSwitchFunction(int a1)
{
//So what should I put here to jump directly to 1024185D,
//and don't replace the function completely?
//I mean I want to modify just the part of this function.
}

//somewhere in the code
DetourFunction((PBYTE)0x10241630, (PBYTE)hSwitchFunction);
//somewhere in the code

-1

Решение

В приведенном вами коде переменная switch — это функция, возвращающая нужное вам значение. и как вы можете видеть в коде. что к этому значению они добавляют указатель, уменьшая значение, которое перемещено в v14. а затем использовать его в коммутаторе.
Также обратите внимание, что они вызывают его из функции.
в некоторых случаях это может быть важно.
Поэтому все, что вам нужно сделать, это скопировать те же самые изменения и использовать их в вашем коммутаторе.

1

Другие решения

Других решений пока нет …