2021-11-07 · 1

スタックフレームとは?

securityreversing

この記事は公開から2年以上経過しています。

スタックフレーム(Stack Frame)とは?

What's the stack frame?


スタックフレーム(Stack Frame)とは、関数が呼び出されるとき、その関数だけのスタック領域を区分するために生じる領域である。この空間には関数に関係するローカル変数、パラメータが保存され、関数呼び出し時に割り当てられ、関数が終了すると消滅する。

関数が呼び出されると、スタックには関数のパラメータ、呼び出しが終わった後に戻る戻りアドレス値、関数で宣言されたローカル変数などが保存されます。このようにスタック領域に順に保存される関数の呼び出し情報をスタックフレーム(Stack Frame)といいます。このスタックフレームのおかげで、関数の呼び出しがすべて終わった後、その関数が呼び出される以前の状態に戻ることができます。

1. 関数プロローグ(Prolog)

push rbp, mov rbp, rsp

!> ****](https://eliez3r.github.io/post/2019/10/16/study-system.Stack-Frame.html)

push rbp を使って関数の rbp をスタックに保存します。そして rsp を rbp にコピーすることで rsp を rbp アドレスに設定します。rbp は関数の基準点を表すので、rbp を基準に RET や argc、argv、関数のローカル変数などの位置を簡単に知ることができる。## 2. 関数エピローグ(Epilog) 関数エピローグは、自分の関数が終わって再び戻るときにスタックを整理する過程です。再び元の状態にすることです。隣では mov eax, 0x0 pop rbp , ret を使っているが、le — study-system.Stack-Frame.html

https://blog.naver.com/hermet/56227646


原文(韓国語): tistory — 2021-11-07 公開、当ブログへ移行。この翻訳は AI の協力で作成されました。

コメント

コメントを削除しますか?

関連記事

スタックフレームとは? · 나봄하랑