作为一种爱好,我一直在花时间学习二进制文件。我正在创建一个主要执行Ollydbg的程序。我想承担这样一个大项目将教会我所有关于PE的知识。现在我正在开发一个类似于Ollydbg的内存映射的对话框,并列出与每个模块相关的堆和部分,但是遇到了对系统模块的访问权限的一些问题。我首先打开一个文件并将其作为调试对象运行。然后我
invoke OpenProcess,PROCESS_VM_READ,FALSE,AttachedPID
invoke ReadProcessMemory,eax,MemMapBaseAddress,offset MemMapMappingBuffer,1024h,offset MemMapNumberOfBytesWritten
invoke GetLastError
这适用于我尝试阅读的大约30%的模块。其余的给出了12B错误,只完成了ReadProcessMemory或WriteProcessMemory请求的一部分。给我这个错误的一个模块是ntdll。所以我做了一些研究,发现我可能没有权限访问我试图访问的内存部分。所以我试着用
来改变对那段内存的保护invoke OpenProcess,PROCESS_VM_READ,FALSE,AttachedPID
push eax
invoke VirtualProtectEx,eax,offset MemMapBaseAddress,1024h,PAGE_READWRITE,offset OldProtect
invoke GetLastError
pop eax
invoke ReadProcessMemory,eax,MemMapBaseAddress,offset MemMapMappingBuffer,1024h,offset MemMapNumberOfBytesWritten
invoke GetLastError
我收到VirtualProtectEx的错误5,访问被拒绝。我也试过以管理员身份运行该程序,并得到了相同的结果。有什么想法让我不能读取作为调试对象加载的模块的PE头?