· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Еще раз о таблице импорта

Посл.отвђт Сообщен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