|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Окт 2, 2004 19:28:23 Проясните пожалуйста ситуацию с таблицей импорта. Во всех описаниях PE файлов написано, что таблица импорта (не берем в счет таблицу диапазонного импорта и отложенного) находится по адресу, указанному во втором элементе DATA DIRECTORY. Причем это RVA адресс. Вопрос стоит вот как: как получить RAW Offset на таблицу импорта? Если это делать как в статье Iczelion, то необходимо грузить файл в память (он проецирует файл в память). Так в общем то и у других(например Касперски). Но как тогда системный загрузчик считывает таблицу импорта (он то ведь грузит файл с диска)? Может быть я что-нибудь пропустил, если да то укажите где. |
|
|
Дата: Окт 2, 2004 19:48:40 Bubon RVA транслируется в RAW Offset, используя таблицу секций я писал так: RVA2RAW proc uses edi ecx edx ebx,lpPEHeader:DWORD, dwRVA:DWORD LOCAL nSections:WORD LOCAL pSections:DWORD mov edi, lpPEHeader movzx ecx, word ptr [edi].IMAGE_NT_HEADERS.FileHeader.NumberOfSections dec ecx add edi, sizeof IMAGE_NT_HEADERS mov pSections, edi mov edx, dwRVA @TRY_NEXT: mov edi, sizeof IMAGE_SECTION_HEADER imul edi, ecx add edi, pSections mov ebx, [edi].IMAGE_SECTION_HEADER.VirtualAddress add ebx, [edi].IMAGE_SECTION_HEADER.Misc.VirtualSize .if edx >= [edi].IMAGE_SECTION_HEADER.VirtualAddress && edx <= ebx mov eax, edx sub eax, [edi].IMAGE_SECTION_HEADER.VirtualAddress add eax, [edi].IMAGE_SECTION_HEADER.PointerToRawData ; check if it lay in the raw range mov edx, [edi].IMAGE_SECTION_HEADER.PointerToRawData add edx, [edi].IMAGE_SECTION_HEADER.SizeOfRawData .if eax <= edx && eax >= [edi].IMAGE_SECTION_HEADER.PointerToRawData jmp @RETURN .endif .endif dec ecx cmp ecx, -1 jnz @TRY_NEXT or eax, -1 @RETURN: ret RVA2RAW endp |
|
|
Дата: Окт 2, 2004 22:12:23 Спасибо |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.083 |