8

mmapシステム コールを使用するプログラムがあります。

map_start = mmap(0, fd_stat.st_size, PROT_READ | PROT_WRITE , MAP_SHARED, fd, 0)

およびヘッダー変数:

header = (Elf32_Ehdr *) map_start;

シンボル テーブルにアクセスし、ヘッダー変数を使用してその内容全体を出力するにはどうすればよいですか?

4

2 に答える 2

10

e_shoffelf ヘッダーのフィールドを調べると、セクション テーブルが表示されます。

sections = (Elf32_Shdr *)((char *)map_start + header->e_shoff);

SHT_SYMBTABシンボル テーブルであるタイプ のセクションをセクション テーブルから検索できるようになりました。

for (i = 0; i < header->e_shnum; i++)
    if (sections[i].sh_type == SHT_SYMTAB) {
        symtab = (Elf32_Sym *)((char *)map_start + sections[i].sh_offset);
        break; }

もちろん、ファイルが ELF ファイルでない場合や、何らかの形で破損している場合に備えて、多くの健全性チェックも行う必要があります。

Linuxのelf(5) マニュアル ページには、フォーマットに関する多くの情報があります。

于 2014-05-22T16:12:36.627 に答える