我使用CreateProcess()在我的进程中创建了一个子进程(在C ++中) 然后我继续使用ReadProcessMemory来读取内存并搜索特定内容。
我想从该过程的入口点开始我的搜索,因为该过程被加载到它自己的虚拟空间中我现在不知道如何找到代码本身的入口点(我不在乎)关于PE文件的其他部分), 我知道PE格式的'AddressOfEntryPoint'字段,我已经拥有它,但由于我不知道该进程将加载到哪个地址,我如何计算入口点本身?
为了演示我想要的东西,如果你用OllyDbg打开一个进程,例如你立即到达代码的入口点,我想要有那个地址
请记住,这是我创建的子进程,如果它有帮助
让我提一下,我不想在该应用程序中注入任何代码或DLL,找出该地址
答案 0 :(得分:1)
使用PSAPI的GetModuleInformation,其HMODULE为NULL。这将为您提供可执行文件的入口点以及内存中的总大小(遗憾的是,未设置基址。)
请注意,入口点不一定是main()函数 - 它可能是CRT 入口点又调用你的main()。
您还可以使用EnumProcessModules获取流程中的所有模块及其基址。
答案 1 :(得分:0)
我不确切知道但是...据我所知,你能在.exe / .dll的PE头中找到EntryPoint地址
或....这是一个固定的
这就是我记得的全部
答案 2 :(得分:0)
AddressOfEntryPoint是相对于图像基地址(相同IMAGE_OPTIONAL_HEADER结构的ImageBase成员)。对于可执行文件,映像库几乎总是在PE头中设置的,因为每个可执行文件都有自己的虚拟地址空间。
事实上,带有剥离重定位部分的exes只能加载到PE中的基础。
我不确定是否有异常,是否可以检索正在运行的进程的图像库...