缓冲区溢出是漏洞利用中的重要一步。
通过设置编译选项/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