[budowa pliku]skąd null między nazwami bibliotek?!

0

Witam.
Studiuję już cały dzień budowe pliku exe(PE) dla systemu Windows.
Sporo <ort>RZeczy</ort> nie mogę się doszukać więc sam kombinuje jak to jest zrobione.
Mianowicie utknąłem na sekcji .idata
Elegancko znajduje sobie kawałek kodu w pliku w którym zadeklarowane są biblioteki itp.
Przykładowo:

                Name: .idata
         VirtualSize: 000000C0
      VirtualAddress: 00003000
       SizeOfRawData: 00000200
    PointerToRawData: 00000600
PointerToRelocations: 00000000
PointerToLinenumbers: 00000000
 NumberOfRelocations: 00000000
 NumberOfLinenumbers: 00000000
     Characteristics: C0000040

   OrginalFirstThunk: 00003056
       TimeDateStamp: 00000000
      ForwarderChain: 00000000
                Name: 0000303C
         String Name: KERNEL32.DLL
          FirstThunk: 00003066               <-

   OrginalFirstThunk: 000030A2
       TimeDateStamp: 00000000
      ForwarderChain: 00000000
                Name: 0000304A
         String Name: USER32.DLL
          FirstThunk: 000030AA

FirstThunk przeliczam na adres w pliku(sam to wykombinowałem :-D )
Czyli 0x600 + 0x3066 - 0x3000 = 0x666(lol). Patrze pod ten adres i widze:
0x3076, 0x308A, 0x3094, 0x0000 Są to adresy wirtualne do nazw procedur biblioteki KERNEL32.DLL
0x0676, 0x068A, 0x0694, KONIEC - przeliczone na adres w pliku.

Pod tymi adresami kryje się takie coś:
[0][0]GetModuleHandleA[0][0][0][0]Lolek2[0][0][0][0]ExitProcess[0][B2][30]
I tu coś mi nie pasuje.

Adres 0x0676 wskazuje na [0][0]GetModuleHandleA[0] - kończy się nullem bo to łańcuch, a zaczyna się dwoma nullami(dlaczego?).
(Adres 0x068A wskazuje na [0][0]Lolek2[0].....)

Ta zasada zmienia się bo jak widać między nazwami są 4 nulle czyli o 1 więcej. Wyglądało by to tak że nazwa funkcji nie kończy się jednym nullem tylko dwoma, lecz to też nie pasuje bo po ExitProcess jest jeden null(dalej zaczynają się inne dane).
Dlaczego tak to jest?

I jeszcze jedno pytanko:
Po co jest OrginalFirstThunk jak jest FirstThunk?

Są to adresy do adresów nazwy funkcji z czym te adresy nazw funkcji wskazują na te same nazwy, lecz adresy nazw funkcji występują w innych miejscach pliku :-)

0

Ależ to zagmotwane :D
Pomyliłem sobie temat posta. "między nazwami..." + "funkcji bibliotek?"

1 użytkowników online, w tym zalogowanych: 0, gości: 1