здравствуйте, делаю LoadLibrary dll'ки, далее, получаю адрес внутри подгруженной dll'ки(функция этой же dll'ки возвращает) - rva. После этого необходимо этот же адрес найти в этой дллке на жестком диске, т.е. открывая её с CreateFile, CreateFileMapping, MapViewOfFile. известно, в какой секции этот адрес(.data) формула offset = rva - image_section_header.virtual_address + image_section_header.pointer_to_raw_data - возвращает непонятный результат, а именно с каким-то непонятным смещением вперед... откуда оно берется как раз и хочется спросить а так же, как правильно перевести rva полученное вышеуказанным образом в физическое смещение большое спасибо!
необходимо вычислить смещение в памяти относительно начала секции, далее суммировать его с файловым смещением начала секции об этом написано в "Упаковщиках" на сайте, хотя слегка и мутновато
Прошу прощения, немного не так изьяснился: ... После этого необходимо этот же адрес ( а не адрес функции) ... Код (Text): invoke LoadLibrary, offset dllName mov hdll, eax invoke GetProcAddress, eax, offset funcName push offset pArray call eax mov ebx, pArray sub ebx, hdll ; в ebx, RVA из которого нужно вычислить offset mov rva, ebx ... ; открываю эту длл (CreateFile, CreateFileMapping, MapViewOfFile) mov edi, pDataSection ; .data в открытой на хард драйве длл assume edi : ptr IMAGE_SECTION_HEADER mov esi, [edi].VirtualAddress add esi, [edi].PointerToRawData mov ebx, rva sub ebx, esi ; получаю странную фигню может и назад, не скажу точно сейчас.. в любом случае, как можно определить точное смещение?..
nitrotoluol Зачем че-либо показывать? В статье про упаковщики приведена даже формула, да я понимаю что есть случаи когда она не работает, но это автор уж сам додумает
EvilsInterrupt Формулу он знает, он еще в первом посте ее показал. Внимательней смотрим Ko1d это как?
дык логическая ошибка Код (Text): mov esi, [edi].VirtualAddress add esi, [edi].PointerToRawData mov ebx, rva sub ebx, esi ; получаю странную фигню это offset = rva - image_section_header.virtual_address - image_section_header.pointer_to_raw_data а надо Код (Text): mov esi, [edi].VirtualAddress sub esi, [edi].PointerToRawData mov ebx, rva sub ebx, esi вообще вот есть либа http://usar.pp.ru/download/index.php?path=&download=yzPELib.v0.4.rar там функция VA2RO, работает с учетом всяких извращений в PE файле
Большое спасибо всем! особенно yuzvir непонятно, только почему ошибка в логике, очевидно ето тонкости формата PE....