gpt4 book ai didi

c - 当另一个静态数组溢出时覆盖堆栈静态数组

转载 作者:行者123 更新时间:2023-11-30 21:20:39 24 4
gpt4 key购买 nike

#include<stdio.h>

int main(){
char A[10];
char B[10];
sprintf(A,"Hello");
sprintf(B,"AAAAAAAAAABBBBBBBBBBCCCCCCCCCC");
printf("%s:%s\n",A,B);
return(0);
}

(gdb) p &A
$1 = (char (*)[10]) 0x7fffffffe450
(gdb) p &B
$2 = (char (*)[10]) 0x7fffffffe440
(gdb) step
2: B = "AAAAAAAAAA"
1: A = "BBBBCCCCCC"
printf o/p- BBBBCCCCCCCCCC:AAAAAAAAAABBBBBBBBBBCCCCCCCCCC

问题-

A 在堆栈帧中先出现,B 在后出现。如果 B 覆盖 A,则所有 "BBBBBBBBBB"应该进入 A 为什么 A 从 "BBBBCCCCCCCCCC" 开始?

另外我想知道如果我覆盖BP,程序会终止吗?

最佳答案

当然B出现在堆栈中的“A”之后,但是堆栈(通常,并且根据打印输出推测在您的平台上)会增长向下。请注意,B 的地址小于 A 的地址。

因此,B 的覆盖会写入 A

另外,我认为 gdb 很聪明,只打印 B 中的 10 个字符,因为它打印 10 A 并且没有终止.

您无法使用流氓字符串格式覆盖处理器寄存器,寄存器不在内存中(一般情况下,当然不在您可能使用的 x86 上)。

请注意,您的代码会调用未定义的行为,因此它可能会因此而终止。

关于c - 当另一个静态数组溢出时覆盖堆栈静态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36056358/

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