readelfを自作
readelfを自作したいt6o_o6t.icon
e_ident領域の読み方は分かった
elf.hで定義された内容を元に書けば良い
とりあえず動くものを作ろう
書式の確認
code:format.txt
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: DYN (Position-Independent Executable file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
2023/08/21
入力部のベースが出来たかな
code:main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FLAG_SIZE 1
#define HEADER_FLAG 0
typedef struct
{
char flagsFLAG_SIZE;
char *filename;
} INPUT;
void print_usage(FILE *fp, char *program_name)
{
fprintf(fp, "Usage: %s <option(s)> elf-file(s)\n", program_name);
fputs(" Display information about the contents of ELF format files\n", fp);
fputs(" Options are:\n", fp);
fputs(" -a --all Equivalent to: -h -l -S -s -r -d -V -A -I\n", fp);
fputs(" -h --file-header Display the ELF file header\n", fp);
}
int main(int argc, char *argv[])
{
int i;
INPUT input;
input.filename = NULL;
if (argc < 3)
{
print_usage(stderr, argv0);
exit(1);
}
for (i = 1; i < argc; i++)
{
if (strncmp(argvi, "-h", 2) == 0)
{
input.flagsHEADER_FLAG = 1;
}
else
{
if (input.filename != NULL)
{
fprintf(stderr, "You can only specify one file name.\n");
exit(1);
}
input.filename = argvi;
}
}
return 0;
}
コマンドのUsageのよい実装が分からなかった
gnu系のツールのソースを読むのが早いと思うが..?
次は、ファイルをバイナリ形式で開いて、先頭16バイト読もう
この実装は出来た。
次は、ファイルヘッダーの書式で出力しよう
ちょっと時間かかる
明日はMagicを出力するところまでやってここは終わりにしたい