Welcome Guest ( Log In | Register )

Help | Search | Members | Calendar

 
IAT size
« Next Oldest | Next Newest » Track this topic | Email this topic | Print this topic
nop
Posted: May 11 2009, 21:08

Wise Dreamer

Group: Elite Member
Member No.: 3143

Joined: July 2, 2008

Помогите плз, пишу курсовую по теме Импортируемых Функций в PE файлах...Задача вот в чем:
найти все библиотеки и все функции из этих библиотек, из которых программа импортирует эти самые функции... smile.gif
Так вот, перечитал тутор аrniх-a (первый раз 2 года назад) "Import Table", все понятно, тока не понимаю как определяется конец IAT? Т.е. мне нужно определить - где кончает(ся) IAT и где начинается массив структур библиотек...
Прочитал еще документацию майкрософта, но там тоже об этом ничего не сказано, только - размер всей таблицы, а вот мне нужно размер самой IAT.

P.S. Аrniх куда ты пропал?

--------------------
- Но это же противоречит здравому смыслу
- А что такое здравый смысл? - спросил
Путешественник во Времени.
 
     Top
SMoKE
Posted: May 12 2009, 09:12

Light Bringer

Group: Elite Member
Member No.: 26

Joined: March 9, 2003

эх видимо не хорошо читал...

...The import directory is an array of IMAGE_IMPORT_DESCRIPTORs, one for
each used DLL. The list is terminated by a IMAGE_IMPORT_DESCRIPTOR
that's entirely filled with 0-bytes....

потом...


OriginalFirstThunk - An RVA (32 bit) pointing to a 0-terminated array of....
FirstThunk - An RVA (32 bit) to a 0-terminated array of....

потом...

...So each IMAGE_IMPORT_DESCRIPTOR in the array gives you the name of the
exporting DLL and, apart from the forwarder and timestamp, it gives you
2 RVAs to arrays of IMAGE_THUNK_DATAs, using 32 bits. (The last member
of each array is entirely filled with 0-bytes to mark the end.)...

помог ?

если что... http://webster.cs.ucr.edu/Page_TechDocs/pe.txt



--------------------
http://freenet.am/~softland

mov ebp, 04243484Bh
mov ax, 004h
int 003h
 
     Top
nop
Posted: May 12 2009, 16:32

Wise Dreamer

Group: Elite Member
Member No.: 3143

Joined: July 2, 2008

Ну из приведенной цитаты я ниче нового не нашел (видимо хорошо читал wink.gif ), но щас посмотрю линк...
Проблема в том, чтобы найти адрес первой структуры (5-и элементной), зная его - я могу читать до "нулевого элемента" и этим самым у меня будут имена и адреса всех библиотек, дальше нужно будет только для каждой библиотеки читать массив адресов функций...
Т.е. в общем получается так:
Читаю dword по адресу 3Ch (по этому адресу, как я понял, хранится адрес PE загаловка), прибавляю 80h (смещение относително PE загаловка, по которому хранится адрес IAT), иду по полученному адресу, читаю dword (адрес IAT), прибавляю "IAT Size" и получается адрес структуры первой библиотеки...фууу...Где я ошибаюсь?

--------------------
- Но это же противоречит здравому смыслу
- А что такое здравый смысл? - спросил
Путешественник во Времени.
 
     Top
SMoKE
Posted: May 13 2009, 09:49

Light Bringer

Group: Elite Member
Member No.: 26

Joined: March 9, 2003

извини конечно но я не знаю что ты там и насколько хорошо читал,
но решение твоей задачи занимает пару строк...
допустим по адресу XXX загружен твой файл...

mov edi, XXX
add edi, 03Ch
ASSUME edi:ptr IMAGE_NT_HEADERS
; get IT address...
push [edi].OptionalHeader.DataDirectory[SIZEOF IMAGE_DATA_DIRECTORY].VirtualAddress ;твое "прибавляю 80h..."
pop eax
; конвертим его с RVA в offset
push eax
push XXX
call RVA2Offset ;придется самому написать...
; прибавляем к ХХХ смещение...
mov esi, eax
add esi, XXX
ASSUME esi:ptr IMAGE_IMPORT_DESCRIPTOR
; ЕSI показывает как ты называешь "адрес первой структуры (5-и элементной)" wink.gif

да и не забудь про ordinal imports...

--------------------
http://freenet.am/~softland

mov ebp, 04243484Bh
mov ax, 004h
int 003h
 
     Top
nop
Posted: May 13 2009, 12:07

Wise Dreamer

Group: Elite Member
Member No.: 3143

Joined: July 2, 2008

QUOTE
допустим по адресу XXX загружен твой файл...

А файл не загружен в память wink.gif, он находится на диске и с ним нужно работать как с обычным "file of byte"...
И еще - пишу на TASM 5.0 smile.gif (никаких библиотек и инклудов)
В общем я почти уже догадался как написать biggrin.gif, когда занкончю - выложу...

--------------------
- Но это же противоречит здравому смыслу
- А что такое здравый смысл? - спросил
Путешественник во Времени.
 
     Top
arnix
Posted: May 14 2009, 02:16

Challenger

Group: Moderator
Member No.: 869

Joined: July 31, 2004

QUOTE (In the immortal words of nop, since Some day...)
перечитал тутор аrniх-a (первый раз 2 года назад) "Import Table", все понятно, тока не понимаю как определяется конец IAT? Т.е. мне нужно определить - где кончает(ся) IAT и где начинается массив структур библиотек...

Конец IAT = IAT Address + IAT Size, эти значения находятся в DataDirectory (12-й IMAGE_DATA_DIRECTORY в массиве).

QUOTE (In the immortal words of SMoKE, since Some day...)

call RVA2Offset ;придется самому написать...

есть на FASM-e, nop, если надо, скажи.

QUOTE (In the immortal words of nop, since Some day...)

А файл не загружен в память, он находится на диске и с ним нужно работать как с обычным "file of byte"...


можешь делать mapping:
invoke CreateFile, addr filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
cmp eax, INVALID_HANDLE_VALUE
jz cf_error
mov h_file, eax
invoke CreateFileMapping, h_file, NULL, PAGE_READONLY, 0, 0, 0
test eax, eax
jz cfm_error
mov h_mapping, eax
invoke MapViewOfFile, h_mapping, FILE_MAP_READ, 0, 0, 0
test eax, eax
jz mvf_error
mov p_mapping, eax
; тут у тебя в eax pointer на контент файла "какбэ" в памяти smile.gif
invoke UnmapViewOfFile, p_mapping
mvf_error:
invoke CloseHandle, h_mapping
cfm_error:
invoke CloseHandle, h_file
cf_error:
 
    Top
5 replies since May 11 2009, 21:08 Track this topic | Email this topic | Print this topic

<< Back to System and low-level programming

 




Arminco Global Telecommunications