実験概要
実験用プログラム
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が残ったままとなっている。
(スタックフレームのことは又別で投稿する)

