gpt4 book ai didi

c - GDB 调试 : Passing arguments using IO redirection

转载 作者:行者123 更新时间:2023-12-03 20:27:47 24 4
gpt4 key购买 nike

我正在学习如何利用缓冲区溢出。下面是我正在玩的程序

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
char buffer[256];
printf("%p\n", buffer);
strcpy(buffer, argv[1]);
printf("%s\n", buffer);
return 0;
}

我编译这个程序:gcc -fno-stack-protector -z execstack program.c -o program我在 gdb 中加载了这个程序:gdb ./program如果我发出以下命令:run $(python -c 'print "A"* 3000') 它将根据需要覆盖寄存器:

rbp            0x4141414141414141   0x4141414141414141
rsp 0x7fffffffd938 0x7fffffffd938
r8 0x4141414141414141 0x4141414141414141
r9 0x4141414141414141 0x4141414141414141
r10 0x4141414141414141 0x4141414141414141

.....但是,如果我使用 IO 重定向寄存器为程序提供参数,则不会按需要覆盖。

模糊测试

#!/usr/bin/python
print 'A' * 3000

我使用 fuzz.py > f

将所有“A”输出到文件 f

我在 gdb gdb ./program 中运行程序现在,如果我使用 IO 重定向为程序提供参数,我会得到异常输出:

run < f

我收到以下错误:

Stopped reason: SIGSEGV __strcpy_sse2_unaligned () at ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:296 296 ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S: No such file or directory.

为什么我会收到此错误 __strcpy_sse2_unaligned 而如果我使用 run $(python -c 'print "A"* 3000') 传递参数,我只会收到 SIGSEGV我想要的错误。

信息寄存器:

rbp            0x7fffffffe4f0   0x7fffffffe4f0
rsp 0x7fffffffe3d8 0x7fffffffe3d8
r8 0x0 0x0
r9 0xf 0xf
r10 0x5d 0x5d

为什么寄存器没有被“A”覆盖?

Q1)为什么在 gdb 中传递参数使用:

run $(python -c 'print "A" * 3000')

run < f

不等于? f 是包含 3000 个“A”的文件。

Q2)这个错误是什么意思:__strcpy_sse2_unaligned ()

最佳答案

您正在从命令行参数而不是标准输入中获取输入:

strcpy(buffer, argv[1]);

所以你应该使用:

run $(python -c 'print "A" * 3000')

<如果您从标准输入读取,重定向将起作用,例如 scanf .

__strcpy_sse2_unaligned SIGSEGV 是由您尝试 strcpy 引起的来自未初始化的内存( argv[1] ,实际上是 NULL 因为它是 argv[argc] 在你的情况下)。 GDB 然后尝试查找该内部函数的源代码,但失败了。

关于c - GDB 调试 : Passing arguments using IO redirection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39160504/

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