Winapi 在不使用GetModuleInformation的情况下,在DLL注入后获取DLL模块大小

Winapi 在不使用GetModuleInformation的情况下,在DLL注入后获取DLL模块大小,winapi,dll,inject,Winapi,Dll,Inject,我手动映射dll,无法使用GetModuleInformation获取其工作区域的MODULEINFO(我的答案总是“无法获取模块”)?。这是因为该函数试图从process environment块中的模块列表获取数据。但是手动映射的dll通常不会链接到该列表中,当然,除非手动添加新的列表条目。 它不使用标题中的信息(或者至少不直接使用)。 所以我已经有了一个叫做hModule的数据库。所以现在我只需要知道它的尺寸。 有没有办法不用GetModuleInformation获得它 static v

我手动映射dll,无法使用GetModuleInformation获取其工作区域的MODULEINFO(我的答案总是“无法获取模块”)?。这是因为该函数试图从process environment块中的模块列表获取数据。但是手动映射的dll通常不会链接到该列表中,当然,除非手动添加新的列表条目。 它不使用标题中的信息(或者至少不直接使用)。 所以我已经有了一个叫做hModule的数据库。所以现在我只需要知道它的尺寸。 有没有办法不用GetModuleInformation获得它

static void someFunc(HINSTANCE hModule)
{
    // all the vars we need for the GetModuleInformation call
    MODULEINFO modInfo;
    HANDLE hProcess = GetCurrentProcess();

    if (GetModuleInformation(hProcess, hModule, &modInfo, sizeof(MODULEINFO)))
    {
        // some work
    }
    else {
        std::cout << "Unable to obtain module" << std::endl;
    }
}
static void someFunc(HINSTANCE hModule)
{
//GetModuleInformation调用所需的所有变量
MODULEINFO-modInfo;
HANDLE hProcess=GetCurrentProcess();
if(获取模块信息(hProcess、hModule和modInfo、sizeof(MODULEINFO)))
{
//一些工作
}
否则{

std::cout如果我们想在自处理中获取映射图像的图像大小-我们可以从的
SizeOfImage
成员中读取它-这是内存中映射为图像图像的大小(而不是磁盘上的大小)


“[GetModuleInformation()失败]是因为该函数试图从process environment块中的模块列表获取数据。”您如何确定这一点?您传递给
GetModuleInformation()的
HPProcess
-句柄更有可能
根本没有
进程\u查询\u信息
进程\u VM\u读取
访问权限。映射时您知道它的大小。也就是说,假设我对手动映射的理解是正确的。@DavidHeffernan是的,我知道,但我的问题是如何从注入的dll中获取它。这个问题没有意义。您已经知道了模块的大小,因为-想必-这是手动映射所必需的(无论是什么)。为什么不使用它呢?在dll中,您可以轻松访问
IMAGE\u可选\u头
并读取
SizeOfImage
ImageNtHeader和RtlImageNtHeader之间的区别是什么?@SLI-当然不,除了它从哪个dll导出之外。对于
ImageNtHeader
需要加载
Dbghelp.dll
来处理,而对于
RtlImageNtHeader无需任何东西(ntdll始终存在)。此外,如果手动注入dll,您可以非常轻松地手动访问
图像\u NT\u标题
任何获取图像磁盘大小的方法?@SLI-用于什么?如果您知道图像文件-查询图像大小。无论如何
GetModuleInformation
也不要为您返回它
ULONG GetImageSize(PVOID ImageBase = &__ImageBase)
{
    if (PIMAGE_NT_HEADERS pinth = RtlImageNtHeader(ImageBase))
    {
        return pinth->OptionalHeader.SizeOfImage;
    }

    return 0;
}