我可以通过执行以下命令成功检索我的进程中加载的模块的基址:
MODULEINFO mInfo;
GetModuleInformation(GetCurrentProcess(),GetModuleHandle(L"moduleName"),&mInfo,sizeof(mInfo));
LPVOID baseAddress = mInfo.lpBaseOfDll;
但是现在如何检索该模块的.text
部分的起始和结束地址?
答案 0 :(得分:2)
应用程序和模块(也称为任何可执行代码)是基于Microsoft指定的所谓“Portable Executable”格式构建的。为了检索所需的信息,您必须遍历内存中的逻辑表,并根据PE格式访问所需的成员。部分托管数据和代码。为了检索节的开头和结尾(例如.text),您必须检查节标题并检索它是否可执行。 Matt Pietrek编写了标准文件,必须将其视为PE的“引入”。