mmapシステム コールを使用するプログラムがあります。
map_start = mmap(0, fd_stat.st_size, PROT_READ | PROT_WRITE , MAP_SHARED, fd, 0)
およびヘッダー変数:
header = (Elf32_Ehdr *) map_start;
シンボル テーブルにアクセスし、ヘッダー変数を使用してその内容全体を出力するにはどうすればよいですか?
mmapシステム コールを使用するプログラムがあります。
map_start = mmap(0, fd_stat.st_size, PROT_READ | PROT_WRITE , MAP_SHARED, fd, 0)
およびヘッダー変数:
header = (Elf32_Ehdr *) map_start;
シンボル テーブルにアクセスし、ヘッダー変数を使用してその内容全体を出力するにはどうすればよいですか?
e_shoff
elf ヘッダーのフィールドを調べると、セクション テーブルが表示されます。
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) マニュアル ページには、フォーマットに関する多くの情報があります。