snaka; 第5章 文字表示とコンソールクラス - uchan-nos/os-from-zero GitHub Wiki
osbook_day05a の実行結果
objcopy のオプション
$ 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.
osbook_day05c の実行結果
osbook_day05d の実行結果
osbook_day05e の実行結果
呼び出し規約 (Calling Convention)
- 関数を呼び出す際の決まりごと
- 引数の渡し方
- 戻り値の返し方
- 関数の中で変更して良いレジスタはどれか
Syatem V AMD64 ABI の呼び出し規約
- 引数
- 先頭から
RDI,RSI,RDX,RCX,R8,R9の順番にレジスタを割り当てる
- 先頭から
- 戻り値
RAX,RDXの順番で使うRAXに値をセットした状態でret命令を実行することで値を返す
- レジスタの保存と退避
- 関数呼び出しの前後で以下のレジスタの値が保たれていなければならない
RSP,RBP,RBX,R12,R13,R14,R15
- スタックに一時的に退避して関数を実行
- 関数から抜けるときに退避していたスタックからレジスタを復旧する
- 関数呼び出しの前後で以下のレジスタの値が保たれていなければならない