C++ exe 中的修补调用
C++ Patching Calls In Exe
问题:
我正在注入程序并修补调用,但我想知道是否有任何方法可以逐行浏览应用程序并找到特定的调用。 _IE:假设程序"Foo.exe"在内存中的某个位置调用了 MessageBox。
如果我做了以下代码:(只是一个粗略的想法)
a = GetModuleHandle ( "<dll>" );
b = GetProcAddress ( a , "<name>" );
swap ( b , (DWORD)*fake_function );
- 一切正常,直到你开始调用实际函数 - 这创造了一个永远持续的巨大循环(哎哟)。
现在我不确定这一点,我可能是错的,但是......上面的代码是替换内存中的"Foo.exe"调用,还是将 DLL 的函数替换为"fake_function"?
我对一些事情感兴趣...
A) 如何在"Foo,exe"中找到调用 MessageBox 的所有内存位置,并将内存位置替换为对"fake_function"的调用?
B) 绕道如何解决这个问题?
不需要找到调用 MessageBox 的所有实例,而是可以挂钩函数。似乎您已经大致了解了,但是您要做的是浏览相关模块的PE导入表。当你走它时,你寻找你想要挂钩的函数,然后你做交换。从那时起,每当模块调用 MessageBox 函数时,它都会在导入表中查找对该函数的引用,并查找函数的地址,该地址以前可以找到 Microsoft 的 MessageBox 实现的地址。在您的函数中,您可以做任何您想做的事情,您甚至可以调用交换时必须保存的 MessageBox 函数的原始地址。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 调用'begin(int [n])'没有匹配函数
- 什么时候调用析构函数
- 如何用参数值调用函数(仅在运行时已知)
- std::cout.imbue()多重调用
- C++ exe 中的修补调用