堆栈的保护机制GS

堆栈溢出是安全漏洞常见来源。本文探讨了如何通过启用/GS编译选项来增强堆栈保护,该选项会在返回地址下放置stack cookie,并在函数返回时进行验证,以防止缓冲区溢出攻击。此外,还会检查ESP和EBP是否相等以及字符串和数组是否越界。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

缓冲区溢出是漏洞利用中的重要一步。
通过设置编译选项/gs会给可执行文件中添加一些特殊的代码,来防止缓存区的溢出。

比如

#include <stdio.h>
#include <string.h>
#define BUF_LEN 16
unsigned char str[16+4+4];
void fun(unsigned char *data)
{
    unsigned char buffer[BUF_LEN];
    strcpy((char*)buffer, (char*)data);//溢出点
}

int main()
{
    memset(str, 0xCC, sizeof(str));
    fun(str);
}

未设置安全检查(/Gs)时候的汇编代码

fun:
013E1082 E9 49 03 00 00       jmp         fun (013E13D0h)
...
     1: #include <stdio.h>
     2: #include <string.h>
     3: #define BUF_LEN 16
     4: unsigned char str[16+4+4];
     5: void fun(unsigned char *data)
     6: {
013E13D0 55                   push        ebp  
013E13D1 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值