前提・実現したいこと
アセンブリ言語を勉強しています。
後述のとおり、簡単なC言語のソースをコンパイルし、逆アセンブルしたものを読み解いているのですが、いくつか質問があります。
該当のソースコード
C
1int main(){ 2 int i; 3 i = 1; 4 5 return 0; 6}
これをコンパイルし、逆アセンブルしたものがこちらです。
simple: file format mach-o-x86-64 Disassembly of section .text: 0000000100000f9e <_main>: 100000f9e: 55 push rbp 100000f9f: 48 89 e5 mov rbp,rsp 100000fa2: c7 45 fc 01 00 00 00 mov DWORD PTR [rbp-0x4],0x1 100000fa9: b8 00 00 00 00 mov eax,0x0 100000fae: 5d pop rbp 100000faf: c3 ret
Q1. 逆アセンブルしたソースに出現する" mov eax,0x0"の意味
それまではrbpやrspしかレジスタが登場していないにも関わらず、突如eaxを0に代入する部分の意味があまりよく分かりませんでした。
Cのソースで0が登場しているのは"return 0"の部分ですが、eaxに関連があるのか分かりませんでした。
Q2. DWORD PTR[rbp-0x4]について(※勘違いでした)
~~(元の質問)初歩的な質問になりますが、push rbs, mov rbs, rspが終わった後に出現するDWORD PTRrbp-xは、スタックフレームを確保するためにxバイトだけメモリを確保する(スタックを下位アドレスにむけて伸ばす)と解釈してよろしいのでしょうか。
~~
(自己解決)
DWORD PTR[rbs-x]は、rbsのアドレスからxバイト、下位アドレスの方に向かったところにあるメモリのアドレスに値を入れる、ということでした。
私の質問内容を実現しているのは、
mov rbp, rsp
sub rsp, 0x10
のようにrspを操作してスタックフレームを確保する技術のようです。
独学なので、初歩的な質問ですが、よろしくお願いいたします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。