【发布时间】:2019-04-06 22:43:06
【问题描述】:
首先,这是一道作业题。我不确定它是否可以,但不要发布任何关于如何更改 int 值的内容。
我的问题是我是否有订单
int set_me = 0;
char buf[15];
切换到
char buf[15];
int set_me = 0;
它仍然会通过溢出字符数组来改变整数。我使用gcc -m32 -o buffer -O0 -fno-stack-protector buffer.c 编译文件。我猜-O0 让 gcc 不要优化堆栈,所以 int 和 char[] 应该像它们在 c 代码中一样有序。原始代码在 if 条件下没有显示在那里做了一些事情。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
if(argc != 2)
{
printf("usage:\n%s string\n", argv[0]);
return EXIT_FAILURE;
}
int set_me = 0;
char buf[15];
if(set_me == 1111222){}
return EXIT_SUCCESS;
}
【问题讨论】:
-
编译器可以随意分配变量。不保证代码中顺序的变化会对生成的二进制文件产生任何影响。
-
缓冲区没有被任何东西触及。它应该如何被攻击?
-
我不明白问题出在哪里。 (或者这段代码sn-p的目的是什么。)
-
部分原始代码未在此处显示。 char buf[15] 将更改为 argv[]。并且在 if 条件中调用了启动 shell。
标签: c gcc stack buffer-overflow