马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
操作系统: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是我哪里用错了么?还是操作系统上有什么特殊情况?还请给位大神解惑,小弟万分感谢 |