gpt4 book ai didi

c - 帮助理解 C Stack

转载 作者:太空宇宙 更新时间:2023-11-04 00:19:48 24 4
gpt4 key购买 nike

我正在尝试了解 C 中的低级内存管理器,尤其是 Stack。正如我所知,当一个函数被调用时,返回地址被压入堆栈。然后局部变量位于之后。

所以我写了一个小程序来调查这个。这是我的程序:

#include <stdio.h>

void TestStack();

void DoTestStack() {
char x1 = 1;
char x2 = 2;
char x3 = 3;
char x4 = 4;
char *x = &x4;

printf("TestStack: %08X\n", (&TestStack));
printf("\n");

int i;
x = &x4;
for(i = 0; i < 32; i++)
printf("%02d: %08X : %08X\n", i, *(x + i), *(x - i));

printf("\n");
printf("x1: %02X\n", x1);
printf("x2: %02X\n", x2);
printf("x3: %02X\n", x3);

printf("DONE!!!\n");
}

void TestStack() {
DoTestStack();
}

void main() {
TestStack() ;
}

基本上,它会调查位置 x4 之前和之后的所有内存。这应该很好地覆盖返回地址的位置。

但我似乎根本找不到任何类似于返回地址的字节。

这是我的结果:

TestStack: 08048B49

00: 00000004 : 00000004
01: 00000003 : FFFFFFBF
02: 00000002 : FFFFFFAC
03: 00000001 : FFFFFFED
04: 00000004 : 0000001C
05: FFFFFFC3 : 00000000
06: FFFFFFB9 : 00000000
07: 00000000 : 00000000
08: FFFFFFF4 : 00000008
09: FFFFFFBF : 00000000
10: FFFFFFB9 : FFFFFF90
11: 00000000 : FFFFFFBD
12: 00000038 : 00000020
13: FFFFFFED : 00000000
14: FFFFFFAC : 00000000
15: FFFFFFBF : 00000000
16: 00000054 : 00000000
17: FFFFFF8B : 00000000
18: 00000004 : FFFFFFFF
19: 00000008 : 00000000
20: 00000045 : 00000008
21: 00000073 : 00000000
22: FFFFFFA7 : 00000000
23: 00000000 : 00000000
24: 00000020 : 00000017
25: FFFFFFBD : 00000008
26: FFFFFF90 : 00000004
27: 00000000 : FFFFFF8C
28: 00000048 : FFFFFFCF
29: FFFFFFED : 00000008
30: FFFFFFAC : 00000004
31: FFFFFFBF : FFFFFF8A

x1: 01
x2: 02
x3: 03
DONE!!!

我在这里错过了什么?有人可以解释一下吗。

无论如何我都在使用 Ubuntu 9.10。

提前致谢。 :-D

最佳答案

您正在查看单个字符,然后将它们转换为 32 位整数,这让您感到困惑。返回地址在这四行的最低有效字节中:

16: 00000054 : 00000000
17: FFFFFF8B : 00000000
18: 00000004 : FFFFFFFF
19: 00000008 : 00000000

即你的返回地址是 0x08048b54。

试试这个:

uint32_t *x;
x = (uint32_t *)&x4;
for(i = 0; i < 32; i++)
printf("%02d: %08X : %08X\n", i, *(x + i), *(x - i));

关于c - 帮助理解 C Stack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1513469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com