📚
ゼロからのOS自作入門 5章 osbook_day05c の objcopy のオプションメモ
実行するコマンドはこちら。 p. 127
objcopy -I binary -O elf64-x86-64 -B i386:x86-64 hankaku.bin hankaku.o
意味は以下のとおり
-I bfdname
--input-target=bfdname
Consider the source file's object format to be bfdname, rather than attempting to deduce it.
-O bfdname
--output-target=bfdname
Write the output file using the object format bfdname.
-B bfdarch
--binary-architecture=bfdarch
Useful when transforming a architecture-less input file into an object file. In this case the output architecture can be set to bfdarch.
This option will be ignored if the input file has a known bfdarch. You can access this binary data inside a program by referencing the
special symbols that are created by the conversion process. These symbols are called _binary_objfile_start, _binary_objfile_end and
_binary_objfile_size. e.g. you can transform a picture file into an object file and then access it in your code using these symbols.
p. 126 の
_binary から始まる3つの変数はobjcopyコマンドにより決められた名前ですから、自由に命名することはできません。
は上記 -B
のこの説明のこと。
These symbols are called _binary_objfile_start, _binary_objfile_end and _binary_objfile_size
bfdname とはなんぞや
GNU BFDライブラリ由来のもの BFDライブラリ - Wikipedia
objcopy は GNU binutils に含まれていて、 GNU binutils のいくつかのツールはこの BFD ライブラリというものを使うらしい。
指定できる bfdname は objdump の出力で確認できるらしい ( GNU Development toolkit )。
たとえばこう。適当に改行してます。 -O
と -I
に指定するのはターゲット名。 -B
に指定するのはアーキテクチャ名。
$ objdump --hep
略
objdump: サポートされているターゲット:
elf64-x86-64 # -O elf64-x86-64 に指定している
elf32-i386
elf32-iamcu
elf32-x86-64
pei-i386
pei-x86-64
elf64-l1om
elf64-k1om
elf64-little
elf64-big
elf32-little
elf32-big
pe-x86-64
pe-bigobj-x86-64
pe-i386
srec
symbolsrec
verilog
tekhex
binary # -I binary に指定している
ihex
plugin
objdump: サポートされているアーキテクチャ:
i386
i386:x86-64 # -B i386:x86-64 に指定している
i386:x64-32
i8086
i386:intel
i386:x86-64:intel
i386:x64-32:intel
i386:nacl
i386:x86-64:nacl
i386:x64-32:nacl
iamcu
iamcu:intel
l1om
l1om:intel
k1om
k1om:intel
objdump -i にも現れる。
$ objdump -i
BFD ヘッダファイルバージョン (GNU Binutils for Ubuntu) 2.34
elf64-x86-64
(header リトルエンディアン, data リトルエンディアン)
i386
略
binary
(header エンディアン不明, data エンディアン不明)
i386
l1om
k1om
iamcu
Discussion