如何使用 ASM 将 FARPROC 的内存地址移动到另一个功能?
How do I move a FARPROC's memory address to another Function using ASM?
我有2个FARPROCs,我想用ASM替换其中一个的地址。
什么是FARPROC?[int (FAR WINAPI * FARPROC)()]在C语言中,FARPROC声明指示一个具有未指定参数列表的回调函数。然而,在c++中,声明中的空形参表表示函数没有形参。这种细微的区别可以破坏粗心的代码。下面是处理这种情况的一种方法:
下面是我的代码: HMODULE h = LoadLibrary("myDLL.dll");
FARPROC p = GetProcAddress(h, "_GetHelloMessage@0");
if(!p) MessageBox(hwnd, "injected, but function not found", "Loader", NULL);
HMODULE dllHmodule = GetModuleHandle("InjectFunctions.dll");
FARPROC injproc = GetProcAddress(dllHmodule, "_GetHelloMessage@0");
if(!injproc) MessageBox(hwnd, "injproc is null", "Loader", NULL);
__asm{
mov eax, p
ADD injproc [EAX],8
}
我的问题是我如何使它,所以每当程序加载这个DLL调用p它会调用injproc?
外部DLL中的每个引用函数在可执行文件头区域的Import Address Table中获得一个条目。该条目的一部分是函数的地址。这是你用来把电话转到别的地方的。在开放的互联网上应该有很多关于如何做到这一点的例子,尽管我碰巧手边没有链接。
如果你想自己做这件事,从msdn下载可移植可执行文件规范,看看这些头文件的格式是什么
相关文章:
- 如果需要转换,我可以在读取参数的同时将其移动到另一个参数吗?
- 将 std::array 移动到另一个 std::array
- 如何在不复制的情况下将一个向量移动到另一个向量中
- 为什么在 std::map 上移动无法将元素从一个映射移动到另一个映射
- 如何将所有指针从一个向量移动到另一个向量?
- 如何有效地将(一些)项目从一个std::map移动到另一个std::map
- 如何将"this"的生命周期移动到C++中的另一个对象中?
- 基于范围的 for 循环将对象移动到另一个容器中?
- 将列表的对象C++移动到另一个对象
- 如何将文件移动到Qt中的另一个现有目录
- C++将所有文件从一个目录移动到另一个目录
- 发送到另一个窗口的鼠标移动消息不执行任何操作
- 将对象从一个 std::d eque 移动到另一个的更好方法
- 如果我尝试将对话框从一个项目移动到另一个项目,我是否需要从 rc 文件中复制 DESIGNINFO、对话框信息和AFX_
- Qt 创建者在我将项目移动到另一个地方后仍然使用源项目
- 从一个堆栈移动到另一个堆
- 当设置对象等于另一个函数的返回值时,为什么要调用移动构造函数/分配
- 使用 C++98 将矢量的一部分移动(而不是复制)到另一个矢量
- 将过滤器中的所有.cpp和.h移动到另一个项目并更正其文件夹位置
- C 可以使用MOVE SEMATICS将数据从一个向量移动到另一个向量