アセンブリ言語
機械語よりはるかに人間にとって読みやすい
例えば、『
実行可能ファイルの16進数表現「55」が、「pushl %ebp」に対応する』などと予め定義しておくことで、そういった利用ができている
拡張子は .s
アセンブリ→機械語の変換も「コンパイル」だが、わかりやすくあえて「アセンブルする」と言ったりもする
記法
gcc -S -masm=intel <input-file>
読みやすい
第一オペランドがdestination
第二オペランドがsource
レジスタの名前はそのまま表記
レジスタの値が指すアドレスを表すときは []
で囲む
gccやobjdumpのデフォルトの出力
第一オペランドがsource
第二オペランドがdestination
レジスタの名前に %
を付ける
レジスタの値が指すアドレスを表すときは ()
で囲む
gccでCコードからアセンブリを出力する
-S
オプションを付ける
$ gcc -S hoge.c
gccでアセンブリを機械語にコンパイルする
$ gcc -o hoge hoge.s
$ ./hoge
構文
<Mnemonic> <Destination>, <Source>
Mnemonic: 命令
Destination: 値を受け取る領域のアドレス
Source: Destinationに作用する値、または値の入っている領域のアドレス
命令の例
Cコードをアセンブリにリアルタイム変換するサイト
参考
本を見つけた