次の短いCプログラム:
void foo(int a, int b) {
printf("a = %p b = %p\n", &a, &b);
}
main() {
foo(1, 2);
}
さて、gdb を使用してこのプログラムを表示しました。私は出力として得ました:
a = 0x7fff5fbff9ac b = 0x7fff5fbff9a8
出力後に実行を停止しました(foo()内)。0x7fff5fbff9ac を調べたところ、内容は次のとおりでした。
1....正解
次に 0x7fff5fbff9a8 とコンテンツ:
2...正しい
ここで、関数の戻りアドレスを表示し、(a + 4 バイト) を調べたい:
x/g 0x7fff5fbff9b1 (8 バイト!! アドレス、したがって "g" (巨大な単語))
その内容は次のとおりです。
(gdb) x/g 0x7fff5fbff9b1
0x7fff5fbff9b1: 0xd700007fff5fbff9
しかし、これはメインからのリターン ADR ではありません。私のせいはどこですか?