2013-06-11 24 views
7

Znalazłem ".dynsym" w tabeli strun, otrzymałem indeks. Następnie znalazłem sekcję z sh_name = index & & sh_type = SHT_DYNSYM. Więc mam sh_offset = 464 i sh_size = 64. Ale na załączonym obrazku widać, że na offsecie 464 są tylko zera.Gdzie jest tabela importu w pliku ELF?

Przypuszczam, że import Tabela rozpoczyna się przesunięciem 528. Pytanie brzmi: jak obliczyć%)

enter image description here

Odpowiedz

6

Ale widać na załączonym obrazku, to na przesunięcie 464 są tylko zera.

Źle: 01, 20, 29, 12 itp są nie tylko "Zera" ostatni raz sprawdzałem.

Przypuszczam, że import Tabela rozpoczyna się przesunięcie 528

Nie, tak nie jest. Z jakiegoś powodu spodziewasz się znaleźć tabelę importu stylu Microsoft PE w pliku ELF. Nie ma go.

Odpowiedniktabeli importu w ELF zawarty jest w tabelach dwóch. Jedna zawiera Elf{32,64}_Sym rekordy stałym-size:

typedef struct 
{ 
    Elf32_Word st_name;    /* Symbol name (string tbl index) */ 
    Elf32_Addr st_value;    /* Symbol value */ 
    Elf32_Word st_size;    /* Symbol size */ 
    unsigned char st_info;    /* Symbol type and binding */ 
    unsigned char st_other;    /* Symbol visibility */ 
    Elf32_Section st_shndx;    /* Section index */ 
} Elf32_Sym; 

i jest zawarty w sekcji .dynsym.

Druga tabela znajduje się w sekcji .dynstr (która w pliku zaczyna się od przesunięcia 528) i zawiera tylko ciągi (zmienne) oddzielone znakiem NUL.

Numer .st_name w pierwszej tabeli odnosi się do przesunięcia w .dynstr.

+0

спасибо за ответ. Ale na offsecie 464 nie ma rekordu Elf32_Sym. sh_offset = 464 Dostałem z nagłówka sekcji .dynsym. Dziwnie, że sh_size = 64 i w tym samym czasie sizeof (Elf32_Sym) = 16. – Qwerty

+0

Po prostu przyłapałem myśli. Może to być 64 bajty to 4 rekordy (Elf32_Sym)? – Qwerty