-1

编辑:我知道使用 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
4

1 回答 1

1

在您提供的代码中,开关的变量来自返回您需要的值的函数。正如您在代码中看到的那样。他们正在向那个值添加一个指针,减小值,移到 v14。然后在交换机中使用它。另请注意,他们从函数中调用它。在某些情况下,它可能很重要。因此,您所要做的就是复制相同的更改并在您的交换机中使用它。

于 2013-07-21T00:14:37.163 回答