by shigemk2

当面は技術的なことしか書かない

C言語のプログラムをアセンブル→オブジェクトファイル出力→リンクで実行する

適当な概要

gccでアセンブラを出力しそれを実行ファイルにする

inc・dec命令

# アセンブリ出力
$ gcc -S translate.c
# アセンブル      
$ as -o translate.o translate.s
# リンク
$ gcc -o translate translate.o 
$ ./translate 

実行環境は、x86_64のFedora20

何がしたいかというと、アセンブラを見たかった。それだけ。

なお、Oで最適化、gでデバッグ情報の付与。

逆アセなどしてみて機械語を眺めてみたりしての感想

translate.c

$ gcc -g -c translate.c -o translate.o
$ objdump -d -M intel translate.o 
movsxd rdx,eax
movzx  edx,BYTE PTR [rdx+0x0]
add    edx,0x1
cdqe   
mov    BYTE PTR [rax+0x0],dl
mov    eax,DWORD PTR [rip+0x0]

こいつをinc命令1つで処理してのけるアセンブリに対する知識と技量がなかった。 そもそもこれを1行でまとめるのがincなのかどうかもわからなかった。