C++ 我不能使缓冲区溢出
我看到了一个缓冲区溢出代码,但我不能让它溢出。有任何gcc选项来编译它吗?或者那个密码有什么问题 代码是:C++ 我不能使缓冲区溢出,c++,buffer-overflow,C++,Buffer Overflow,我看到了一个缓冲区溢出代码,但我不能让它溢出。有任何gcc选项来编译它吗?或者那个密码有什么问题 代码是: #include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <string.h> int main(int argc, char **argv) { volatile int modified; char buffer[64]; if
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
volatile int modified;
char buffer[64];
if(argc == 1) {
errx(1, "please specify an argument\n");
}
modified = 0;
strcpy(buffer, argv[1]);
if(modified == 0x61626364) {
printf("you have correctly got the variable to the right value\n");
} else {
printf("Try again, you got 0x%08x\n", modified);
}
}
#包括
#包括
#包括
#包括
int main(int argc,字符**argv)
{
挥发性int修饰;
字符缓冲区[64];
如果(argc==1){
errx(1,“请指定一个参数\n”);
}
修改=0;
strcpy(缓冲区,argv[1]);
如果(修改==0x61626364){
printf(“您已将变量正确设置为正确的值\n”);
}否则{
printf(“重试,您得到0x%08x\n”,已修改);
}
}
我试着这样运行:perl-e'print“A”x64。“dcba”| xargs./main
您需要知道
modified
和buffer
您可以通过将“修改”和“缓冲区”之间的偏移量作为(char*)和“修改的-(char*)缓冲区”
链接演示了如何运行修改后的代码,该代码用于确定正确的参数以及堆栈破坏。第一个为您提供了一个参数,您可以将该参数提供给第二个这是出了名的棘手问题,不需要查看生成的代码就可以获得正确的结果。你得到了什么?进程是否崩溃?溢出的
缓冲区将写入它后面的内存,但修改的可能在它前面的内存中(取决于编译器)。这是一个ctf挑战,问题是@interjay:你知道有编译器可以编译它吗?或者gcc选项?可能在将其放入结构时尝试溢出它。据我所知,所有编译器都将保持结构顺序,因为您在编码时可能会依赖它。