実験概要
実験用プログラム
test.c
#include<stdio.h>
void func1(){
int a=8;
}
void func2(){
int b;
printf("%d",b);
}
int main(){
func1();
func2();
return 0;
}
func1及びfunc2のアセンブリ表記
func1
func2
実行結果
8
考察
アセンブリ言語を見ると、変数a
もb
もDWORD PTR [rbp-0x4]
となっている。
どちらもmain
から直接呼び出された関数なので、fanc1
とfanc2
が呼び出された時点でrbp
は一致するはずである。
スタックを解放する時、rsp
とrbp
の挿しているアドレスを変更するだけで値の初期化はしていない。
よってb
が指しているDWORD PTR [rbp-0x4]
はa
で代入された8
が残ったままとなっている。
(スタックフレームのことは又別で投稿する)