#include <stdio.h>
int myprint(char* argv1) {
printf("%s", argv1);
}
void foo(char* argv1, char* argv2) {
int (*fptr)(char*) = myprint;
char buf[12];
strcpy(buf, argv1);
fptr(argv2); }
int main(int argc, char **argv) {
if (argc < 3)
{
printf("error\n");
return;
}
foo(argv[1], argv[2]); }
这是我要溢出的c代码。我已经禁用了aslr。我接下来该怎么办?
答案 0 :(得分:1)
1 ======= =======
在函数foo
中,下一个代码将导致缓冲区溢出
strcpy(buf, argv1);
因为buf
的长度只有12(char buf[12]
)
strcpy
会将源地址arg1
中的值复制到buf
,直到遇到arg1
中的'\ 0'。
因此,如果你给一个长度大于12的arg1
,你将得到一个缓冲区溢出。
======= 2 =======
int main(int argc, char **argv)
参数int argc
是命令行参数的数量,下一个参数char **argv
是指向这些参数的指针,argv [0]是程序的名称。
所以,像这样编译你的代码(比如源文件是test.c
):
gcc test.c -o test
然后像这样运行:
./test this_is_argv1_its_length_larget_han_12 this_is_argv2