本帖最后由 htpidk 于 2022-7-21 11:47 编辑
在WIN7 X64上失败,截图看我前面的楼层,看了下代码,从第一个使用到的NtAllocateVirtualMemory_x64函数开始看,看到那一段汇编代码有一段有点迷惑,有两句代码明显不需要的不知道为什么有,按我的直觉来看这样是错的,但是按照我的意思修改了这段汇编在WIN7 X64上还是失败,今天在公司WIN10 X64上重新试了你的代码,看起来是没错,但是增加了一个调试输出就可以看出你这个函数写错了
l_Status = NtQueryVirtualMemory_x64 (l_handle, l_Addr, 0, p_字节集 (l_InformationMemory ), 48, l_MemoryQuery )调试输出 (“调用NtQueryVirtualMemory的Status:” + 到文本 (l_Status ), “页面jz:” + 到文本 (指针到长整数 (p_字节集 (l_InformationMemory )) ), “保护类型:” + 到文本 (指针到整数 (p_字节集 (l_InformationMemory ) + 16 )), “内存状态:” + 到文本 (指针到整数 (p_字节集 (l_InformationMemory ) + 32 )), “RegionSize:” + 到文本 (指针到整数 (p_字节集 (l_InformationMemory ) + 24 )) )
原来你的源码里是没有最后一个输出 “RegionSize:” + 到文本 (指针到整数 (p_字节集 (l_InformationMemory) + 24))的,增加了这句后输出结果如下:
很明显这个RegionSize是错误的,按照我修改的如下,去掉了两句代码:
这个RegionSize才是对的。
其他函数代码还没看,不知道是否也存在类似问题,不过最主要是WIN7 X64不支持(不知道是我个例还是所有WIN7 X64都不行),没有eWOW64Ext这种方法通用
|