リンカスクリプト、ELFフォーマット、objdumpで遊ぶ
「12ステップで作る組み込みOS自作入門」で、リンカスクリプト、ELFフォーマットの勉強になった。
で、バイナリファイルの中身を知るのもなかなか楽しい。
objdumpも使って遊んでみる。
プログラムを動かす訳ではなく、どんな風なバイナリに生成されるのかだけ確認。
■test.c
int a = 10;
int main()
{
return 0;
}
■ld.scr
OUTPUT_FORMAT("elf32-h8300")
OUTPUT_ARCH(h8300h)
ENTRY("_start")
SECTIONS
{
. = 0x0;
.text : {
*(.text)
}
.rodata : {
*(.strings)
*(.rodata)
*(.rodata.*)
}
.data : {
*(.data)
}
.bss : {
*(.bss)
*(COMMON)
}
}
h8のクロスコンパイル環境でビルドしてelfファイルを生成。
int a がどういう風に格納されているか見てみたい。
$ h8300-elf-readelf -a test.elf
・・・
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .text PROGBITS 00000000 000074 00000e 00 AX 0 0 2
[ 2] .data PROGBITS 0000000e 000082 000002 00 WA 0 0 2
[ 3] .comment PROGBITS 00000000 000084 000011 01 MS 0 0 1
[ 4] .shstrtab STRTAB 00000000 000095 000030 00 0 0 1
[ 5] .symtab SYMTAB 00000000 0001e0 000080 10 6 5 4
[ 6] .strtab STRTAB 00000000 000260 000018 00 0 0 1
・・・
Symbol table '.symtab' contains 8 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 SECTION LOCAL DEFAULT 1
2: 0000000e 0 SECTION LOCAL DEFAULT 2
3: 00000000 0 SECTION LOCAL DEFAULT 3
4: 00000000 0 FILE LOCAL DEFAULT ABS test.c
5: 0000000e 2 OBJECT GLOBAL DEFAULT 2 _a
6: 00000000 0 NOTYPE GLOBAL DEFAULT UND _start
7: 00000000 14 NOTYPE GLOBAL DEFAULT 1 _main
_a がメモリマップ的に、0000000e に入り、セクションは .data 、ですねと。
で、初期値がちゃんと入ってるかというと。
$h8300-elf-objdump -s -j .data test.elf
test.elf: file format elf32-h8300
Contents of section .data:
000e 000a
000aで10が格納されてますねと。
というか、普通にディスアセンブルしてみる。
$h8300-elf-objdump -s -d test.elf
test.elf: file format elf32-h8300
Contents of section .text:
0000 01006df6 0ff61900 01006d76 5470 ..m.......mvTp
Contents of section .data:
000e 000a ..
Contents of section .comment:
0000 4743433a 2028474e 55292034 2e352e32 GCC: (GNU) 4.5.2
0010 00 .
Disassembly of section .text:
00000000 <_main>:
0: 01 00 6d f6 mov.l er6,@-er7
4: 0f f6 mov.l er7,er6
6: 19 00 sub.w r0,r0
8: 01 00 6d 76 mov.l @er7+,er6
c: 54 70 rts
なるほどなるほど。
Contents of section .data:
ですね。
2014-01-01 09:33
nice!(0)
コメント(0)
トラックバック(0)
コメント 0