gpt4 book ai didi

c - 如何在 C 中跳过执行缓冲区溢出的行

转载 作者:太空狗 更新时间:2023-10-29 16:41:19 24 4
gpt4 key购买 nike

我想在 C 中跳过一行,行 x=1;在主要部分使用 bufferoverflow ;但是,我不知道为什么我不能跳过4002f4中的地址。到下一个地址4002fb尽管我正在计算 7 字节形式 <main+35><main+42> .

我还在 Debian 和 AMD 环境中配置了 randomniZation 和 execstack 环境选项,但我仍然得到 x=1; .这个过程有什么问题?

我已经使用 dba 调试堆栈和内存地址:

0x00000000004002ef <main+30>:    callq  0x4002a4 **<function>**  
**0x00000000004002f4** <main+35>: movl $0x1,-0x4(%rbp)
**0x00000000004002fb** <main+42>: mov -0x4(%rbp),%esi
0x00000000004002fe <main+45>: mov $0x4629c4,%edi

void function(int a, int b, int c)
{
char buffer[5];
int *ret;

ret = buffer + 12;
(*ret) += 8;
}

int main()
{
int x = 0;
function(1, 2, 3);
x = 1;
printf("x = %i \n", x);
return 0;
}

最佳答案

您一定在阅读 Smashing the Stack for Fun and Profit文章。我正在阅读同一篇文章,发现了同样的问题,它没有跳过那条指令。在 IDA 中调试几个小时后,我更改了如下代码,它正在打印 x=0 和 b=5。

#include <stdio.h>

void function(int a, int b) {
int c=0;
int* pointer;

pointer =&c+2;
(*pointer)+=8;
}

void main() {
int x =0;
function(1,2);
x = 3;
int b =5;
printf("x=%d\n, b=%d\n",x,b);
getch();
}

关于c - 如何在 C 中跳过执行缓冲区溢出的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5280789/

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