2013-06-11 8 views
7

Я нашел «.dynsym» в таблице строк, получил индекс. Затем я нашел раздел с именем sh_name = index & & sh_type = SHT_DYNSYM. Итак, я получил sh_offset = 464 и sh_size = 64. Но вы можете видеть на прилагаемом рисунке, что на смещении 464 есть только нули.Где находится таблица импорта в файле ELF?

Я полагаю, что импорт таблица начинается смещение 528. Вопрос: как вычислить его%)

enter image description here

ответ

6

Но вы можете увидеть в прилагаемом изображении, что смещение 464 есть только нули.

Неправильно: 01, 20, 29, 12 т.д. не "нули" в последний раз я проверил.

Я полагаю, что импорт Таблица начинается по смещению 528

Нет, это не так. По какой-то причине вы ожидаете найти таблицу импорта стилей Microsoft PE в файле ELF. Его нет.

эквивалент таблицы импорта в ELF содержится в двух таблицах. Один из них содержит Elf{32,64}_Sym записи фиксированного размера:

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; 

и содержится в разделе .dynsym.

Другая таблица содержится в разделе .dynstr (который в вашем файле начинается со смещения 528) и имеет только строки (переменный размер), разделенные символом NUL.

В первой таблице .st_name относится к офсету в .dynstr.

+0

спасибо за ответ. Но на смещении 464 нет записи Elf32_Sym. sh_offset = 464 Я получил из заголовка раздела .dynsym. Странно, что sh_size = 64 и в то же время sizeof (Elf32_Sym) = 16. – Qwerty

+0

Я просто задумался. Может быть, эти 64 байта - 4 записи (Elf32_Sym)? – Qwerty

Смежные вопросы