VirtualAllocEx失败GetError返回ERROR_INVALID_ADDRESS

时间:2018-03-16 11:54:39

标签: c++ c winapi

我试图在Suspended模式下创建一个CreateProcessA进程,然后在基础0x400000地址上分配内存,问题是当我设置dynamicbase标志时,virtualallocex随机失败,但是当我关闭dynamicbase标志时,它每次都失败。 / p>

VirtualAllocEx(PI.hProcess, ImageBase,SizeOfImage, 0x3000, PAGE_EXECUTE_READWRITE);

我想在创建进程暂停状态后,在特定地址(即ImageBase)上分配内存,这是我无法做到的。

我想在该地址加载代码并在进程恢复后执行它。 谢谢

1 个答案:

答案 0 :(得分:1)

如果您只是想在此过程中分配一些内存,那么您应该让VirtualAllocEx为您选择一个空闲地址,方法是指定NULL作为基础。

如果要在流程中修改某些内容,则必须使用toolhelp / PSAPI函数查找实际模块基址,并在调用{{1}之前使用VirtualProtectEx更改要修改的页面的保护}}。如果您在此过程中更改了代码,则还需要致电WriteProcessMemory

您可以使用FlushInstructionCache查找有关这些网页的信息,VirtualQueryEx可能会失败,因为模块已经加载到那里。