異なっている。ここスタックフレームがどのように見えるかです:は私のスタックフレームは、従来の1
(high memory addresses)
-function arguments
-return address
-saved frame pointer
-local variables
(low memory addresses)
私のスタックフレームは、そのように見える理由の質問は次のとおりです。
(high memory addresses)
-return address
-saved frame pointer
-local variables
-function arguments
(low memory addresses)
デバッグ中に、私はそれに気づきましたgdbで Cでコーディングし、Kali Linux x86_64(intel core i7)でgcc 5.4.0を使用してコンパイルします。
Cコード:主にRBPの
void test_function(int a, int b, int c, int d) {
int flag;
char buffer[10];
flag = 31337;
buffer[0] = 'A';
}
int main() {
test_function(1, 2, 3, 4);
return 0;
}
値:
0x7fffffffe260
アセンブリ命令test_functtionコールアドレスの後:Xコマンドの
0x00000000004004e1
結果RSP上でながらtest_functionフレーム:
0x7fffffffe240: 0x00000004 0x00000003 0x00000002 0x00000001
0x7fffffffe250: 0x00400441 0x00000000 0x004003b0 0x00007a69
0x7fffffffe260: 0xffffe270 0x00007fff 0x004004e1 0x00000000
0x7fffffffe270: 0x004004f0 0x00000000 0xf7a575f0 0x00007fff
スタックが_downwards_に成長するため、正しいレジスタにあります。 – tkausl
私は知っていますが、あなたがそれを逆にすれば、それは対応していません。 –
"スタックフレームがどのように見えるかは次のとおりです:"#:。あなたはどこからそれを手に入れましたか? – kaylum