求助windows使用VirtualAlloc申请内存失败的原因
操作系统:Win10 64位测试程序:Winows 32位程序
第一段代码:这是我申请一段内存,直接从ntdll.dll的ImageBase处申请空间,加载ntdll.dll到内存中
code = (unsigned char *)VirtualAlloc((LPVOID)(ntdllHeader->OptionalHeader.ImageBase),
old_header->OptionalHeader.SizeOfImage,
MEM_RESERVE,
PAGE_READWRITE);
第二段代码:因为ntdll.dll的Imagebase可能已经被占用,无法再度申请该内存地址的空间,所以使用如下代码,让系统分配位置,加载ntdll.dll到内存中
code = (unsigned char *)VirtualAlloc(NULL, old_header->OptionalHeader.SizeOfImage, MEM_RESERVE, PAGE_READWRITE);
现在出现的问题有:
1.只有按照ntdll的imagebase位置,加载到内存中的ntdll.dll才是正确的
2.执行第二段代码,让系统分配配置的话,会出现两种情况,一个GetlastError返回487,一个是GetLastError返回0,但是再调用ntdll里的函数时,GetLastError依然返回487;两种情况都会到值程序崩溃
3.我曾经把第二段代码的第一个参数改为0x7de70000,这个是win7加载ntdll.dll的地址,虽然getlasterror没错,但是调用它的内部函数ZWQueryInformationProcess时,程序崩溃
我想求助各位大神,这个VirtualAlloc是我哪里用错了么?还是操作系统上有什么特殊情况?还请给位大神解惑,小弟万分感谢 好像VirtualAlloc没有用错(看第一眼觉得没错)
还有就是你究竟要干什么,加载ntdll到进程的地址空间?系统已经帮你加载好了,还想再来一次的话用LoadLibrary就行。 本帖最后由 FlyCode 于 2017-1-9 15:45 编辑
无符号整形 发表于 2017-1-7 17:57
好像VirtualAlloc没有用错(看第一眼觉得没错)
还有就是你究竟要干什么,加载ntdll到进程的地址空间?系 ...
这是壳里的代码,用来模拟操作系统的运行,我需要自己加载ntdll.dll,最终在里面结合一些反调试的操作。
我需要把ntdll从内存中载入到我的进程空间里来,求版主解惑{:5_93:}
注:这段代码我再Win7 64位系统下运行没问题,但是在Win10 64位系统下就不行 无符号整形 发表于 2017-1-7 17:57
好像VirtualAlloc没有用错(看第一眼觉得没错)
还有就是你究竟要干什么,加载ntdll到进程的地址空间?系 ...
大神,在否,能否出来指点一下,到底Win10 上什么原因导致的这种结果发生啊 FlyCode 发表于 2017-1-11 11:04
大神,在否,能否出来指点一下,到底Win10 上什么原因导致的这种结果发生啊
这个嘛,我也不太清楚,win10加多了很多其他的函数
我以前的自己做的一个调试器在win10上也有点问题 无符号整形 发表于 2017-1-11 12:10
这个嘛,我也不太清楚,win10加多了很多其他的函数
我以前的自己做的一个调试器在win10上也有点问题
好吧,如果您需要源码的话,想研究的话,我可以贴出来,我这边也研究了好久,一直无果 VirtualAlloc用的是对的,第一个参数传NULL,只是ntdll加载后要修复偏移,重定位之类的 flac 发表于 2017-3-17 21:56
VirtualAlloc用的是对的,第一个参数传NULL,只是ntdll加载后要修复偏移,重定位之类的
哦?您的意思说,在Win10系统上,这个dll需要重新进行修复偏移?可是为什么win7不需要呢?
页:
[1]