2016-12-04 11 views
-5

私はC言語が新しく、アセンブリ言語にC言語をマップする直感を築きたいので、スタック、レジスタ、メモリ、コードがどのように動作するかを強く意識することができます。 Cコードを参照してください。私はいくつかのアセンブリ言語の本を読んでおり、主にcとアセンブリの関係よりもアセンブリ構文に焦点を当てています。誰もがcとアセンブリ言語の間の地図についてそのような本をどこに見つけることができるか知っていますか?アセンブリ言語にC言語をマップする

+1

"*マップ*"はありません。異なるコンパイラでは異なる設定をしていますが、同じコンパイラでも設定が異なります。 – harold

+0

Cはスタックもレジスタもありません。 – Olaf

答えて

0

私はそのような本が存在するかどうか分かりません(そうであれば、コンパイラに関する本です)。しかし、簡単な解決策があります:試してみてください。 、これはMyFunctionにブレークポイントを設定します

gdb ./foo 
break MyFunction 
run 
disass 

はその後、いくつかのCコードを書くデバッグシンボルでコンパイル(これらの命令は、Linuxを想定):

gcc foo.c -o foo 

を次に、デバッガを使用しますそのブレークポイントに達するまでプログラムを実行します。 disassはその関数のアセンブリを出力します。 stepiを使用すると、一度に1つの命令をステップ実行するか、nextを使用して、一度に1つのC行だけステップすることができます。

+1

また、 'gcc -S foo.c'を実行して、コンパイラにアセンブリファイルを直接作成させることもできます(これにより、アセンブリファイル内のマッピングに関する情報が少し残る場合があります)。 – microtherion