У меня только базовый адрес DLL загружен в память другого процесса.Я хочу получить размер изображения DLL.Поэтому я получаю MEMORY_BASIC_INFORMATION от VirtualQuery.Эта функция не завершается с ошибкой, но allocBase всегда равен 0. Приложение вылетает в строке, где вы можете прочитать «ошибка».
Вопросы: Виртуальная работа работает в данной ситуации?Есть ли лучший способ получить размер изображения?Но помните мою ситуацию: я хочу загрузить размер изображения DLL в память другого процесса!DLL не загружена в мое приложение, и у меня нет дескриптора приложения (но можно было бы получить дескриптор).
...
DWORD baseAddress = (DWORD)me32.modBaseAddr; // base address of a DLL of other process
MEMORY_BASIC_INFORMATION mem;
if (NULL==VirtualQuery((LPCVOID)baseAddress, &mem, sizeof(mem))) {
printError( TEXT("VirtualQuery") );
return false;
}
unsigned char* allocationBase = (unsigned char*)mem.AllocationBase;
_tprintf( TEXT("\n allocationBase = %d"), allocationBase ); // 0
IMAGE_DOS_HEADER *dos = (IMAGE_DOS_HEADER*)mem.AllocationBase;
IMAGE_NT_HEADERS *pe = (IMAGE_NT_HEADERS*)((unsigned long)
dos+(unsigned long)dos->e_lfanew); // bug crashes application
size_t base_len = (size_t)pe->OptionalHeader.SizeOfImage;