我正在使用一个用于反射DLL加载的库。下面是我遇到问题的文件:
https://github.com/stephenfewer/ReflectiveDLLInjection/blob/master/inject/src/GetProcAddressR.c
最后一行:
return fpResult;
字符串
它包含我试图获取地址的函数的正确全长地址。
当我回到我的主程序时,它看起来像这样:
PVOID address = GetProcAddressR(buffer, length);
型
地址被截断为32位数。
0x00002023A83EFF30
型
变成
0xFFFFFFFA83EFF30
型
我检查了这个的disasemmbly,它看起来像指令
CDQE
型
正在被调用,这正是我遇到的问题。但是,我不确定上面链接的文件中的哪个位置导致了任何问题。
1条答案
按热度按时间v9tzhpje1#
我只是因为自己的失败而偶然发现了这一点,也许这有助于某些人在某个时候像我一样盲目的人。在我的情况下,我只是忘记了包括实际声明我试图使用的数据类型的头。在下面的例子中,应用程序在VS 2022中构建得很好,但没有报告任何错误或警告。虽然问题会出现在main()中,变量sample被赋值为sample_create()实际返回的64 b指针的32 b值。从技术/编译器的Angular 来看,这对我来说完全没问题,我只是错过了VS的一个警告,即使用了一个未知类型。
参见以下简化示例。
样品h:
字符串
sample.c
型
main.c
型