Здравствуйте. Ранще, когда мне нужно было парсит РЕ я использовал ZwOpenFile\ZwReadFile +пересчет из RVA в оффсеты. Попробовал за грузить через ZwCreateFile/ZwCreateSection/ZwMapViewOfSection но возникают какие-то ошибки: 1)Если пытаться загрузить ntdll, то в ZwMapViewOfSection возникает ошибка STATUS_IMAGE_NOT_AT_BASE. Как я понял она возникает из-за реалоков. Как можно обойти эту ситуацию. 2)Если загружаю другую библиотеку(kernel32) всё вроде бы проходит без ошибок,в параметр ViewSize почему-то постоянно возвращается значение 1000(hex). Соответственно при парсинге, когда я выхожу за пределы этого значения ловлю BSOD. Получается что при маппинге таком загружается 1 секция; можно ли загрузить весь файл целиком или это у меня ошибка? Код (Text): if (ZwCreateFile(&File, GENERIC_READ, &oa, &io, 0, FILE_ATTRIBUTE_NORMAL, 0, FILE_OPEN, 0, 0, 0)== STATUS_SUCCESS) { if (ZwCreateSection(&Section, SECTION_ALL_ACCESS, 0, NULL, PAGE_READWRITE, /*SEC_COMMIT*/0x1000000, File) == STATUS_SUCCESS){ temp = ZwMapViewOfSection(Section, ZwCurrentProcess(), &ret, 0, 0, NULL, &ViewSize, ViewShare, 0, PAGE_READWRITE); if (temp != STATUS_SUCCESS){ [...] } } ZwClose(Section); ZwClose(File); } return ret; }
Это не код ошибки, это даже не код предупреждения. Это информационный код - секция проецируется, просто винда подсказывает - этот образ загружен не по его родному адресу.