取得方法を知りたい: flags 0x00000112: EXEC_P, HAS_SYMS, D_PAGED in C.
あなたの質問からは、数値 を取得する方法がわからないのか、0x112
その数値を に変換する方法などがわからないのかが明確ではありませんEXEC_P
。[1]
前者は、ファイルの先頭にある Elf64_Ehdr の e_flags の値です。つまり、ファイルのsizeof(struct Elf64_Ehdr)
オフセットからバッファ [2] にバイト単位で読み込み、次に:0
printf("flags: 0x%x\n", ((struct Elf64_Ehdr *)buf)->e_flags);
後者: EXEC_P
、HAS_SYMS
などは、内部で使用するフラグを表しlibbfd
、実際のファイルとはほとんど関係がありませんELF
。それらは内部の抽象化であり、誰にとってもほとんど関心がありません (またはそうあるべきです)。
しかし、本当に気にするのであれば、ファイルに がある場合、フラグD_PAGED
が設定されます。e_phnum != 0
if (((struct Elf64_Ehdr *)buf)->e_phnum != 0) {
printf("D_PAGED\n");
}
またはセクションが存在するHAS_SYMS
場合などに設定されていると確信しています。.symtab
.dynsym
[1] 注: 考えられることとは反対に、EXEC_P
フラグはから導出できませんflags
。
[2] ファイルが 32 ビット ELF の場合、これには明らかな調整が必要です。また、ネイティブELF ファイルを見ていることも前提としています。リトルエンディアン マシンでビッグ エンディアン ELF ファイルを調べる (またはその逆) には、追加の作業が必要になります。