Получение e_lfanew от DLL, в результате E8, а не F8? - PullRequest
0 голосов
/ 04 мая 2020

Я читаю файл DLL в буфер (pSrcData), отсюда я хотел напечатать e_lfanew

bool readDll(const char* dllfile)
{
    BYTE* pSrcData;

    std::ifstream File(dllfile, std::ios::binary | std::ios::ate);

    auto FileSize = File.tellg();

    pSrcData = new BYTE[static_cast<UINT_PTR>(FileSize)];

    File.seekg(0, std::ios::beg);
    File.read(reinterpret_cast<char*>(pSrcData), FileSize);
    File.close();

    std::cout << std::hex << reinterpret_cast<IMAGE_DOS_HEADER*>(pSrcData)->e_lfanew;

    pOldNtHeader = reinterpret_cast<IMAGE_NT_HEADERS*>(pSrcData + reinterpret_cast<IMAGE_DOS_HEADER*>(pSrcData)->e_lfanew);

    return true;
}

Вывод: E8

Открытие DLL в HxD я получаю это (адрес 0000000 - 00000030):

4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 
B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 F8 00 00 00  

Значение e_lfanew должно быть F8. Тем не менее, я получаю E8 при выполнении кода выше. Кто-нибудь может увидеть, что я делаю не так?


Дополнение: Получение e_magi c работает как std::cout << std::hex << reinterpret_cast<IMAGE_DOS_HEADER*>(pSrcData)->e_magic дает 5a4d, используя младший порядковый номер, переведенный в 4D 5A

1 Ответ

1 голос
/ 04 мая 2020

Извините, я нашел установку конфигурации в Visual Studio 2019 на x86 Release, задает e_lfanew на F9 и x86 Debug, устанавливает e_lfanew на E8. Я сравнивал разные версии отладки / выпуска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...