有没有办法绕道c ++构造函数?

时间:2015-04-12 03:04:51

标签: c++ c++11 detours

有趣的是,我不久前回答了一个关于获取C ++构造函数的地址的问题,说它无法完成,所以请使用完美转发。但是,就使用微软的Detour库进行绕行而言,这不是一个选择。为了绕开任何呼叫,需要 地址。所以现在我不得不问一个问题,如果没有构造函数的地址,是否可以绕道一个?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:0)

不确定MS Detour,但我通常在C ++中使用内联汇编手动绕道。如果代码(构造函数实例)映射到内存中,并且您可以写入该内存区域,则可以绕过

  • 绕道而行的基本机制是找到用JUMP将原始操作码替换到你的代码洞穴的地方。如果JUMP代码与原始操作码的大小不匹配,请用NOP填充。
  • 在代码洞中执行原始操作码
  • PUSHAD& PUSHFD
  • 使用全局变量执行任何操作(推荐)
  • 调用任何没有参数的自定义函数
  • POPFD& POPAD
  • 跳回补丁操作码(技能一些字节的NOPS)

第一步,要获取构造函数实例的地址,需要通过ReadProcessMemory或任何方法搜索其动态地址。我确实从动态加载的DLL中绕过了一个函数。为了获得该函数,我使用HANDLE tempHandle = GetModuleHandle((LPCWSTR)"DLLFileName.dll");并使用DLL句柄的偏移量。