【发布时间】:2018-05-07 08:50:57
【问题描述】:
我已经用谷歌搜索并阅读了不同的论文,但找不到解决方案。
我编写了一个小 c 程序,我想在其中覆盖函数的参数。
void test(int test) {
printf("%x %x %x %x %x %x %x %x\n");
printf("%x %x %x %x %x %x %x %n\n");
printf("%x %x %x %x %x %x %x %x\n");
if (test == 1) {
printf("BOO\n");
} else {
printf("YEE\n");
}
}
int main() {
int a = 1;
test(a);
return 0;
}
如果我使用此设置运行程序,程序的输出如下:
fff6c602 f7d61138 5658b559 0 0 fff6b698 5658b5f4 1
Segmentation fault
1 是函数的参数,我想覆盖它。但是正如你所看到的,如果我使用 %n 覆盖它,程序就会崩溃,尽管我正确设置了 printf 指针。
有人知道,为什么会这样吗?
【问题讨论】:
-
未定义的行为。对于任何进一步的解释,您必须查看具体的实现,包括编译器和 C 库、处理器架构和可能的操作系统。
-
请注意,
%n需要有一个参数是指向 int 的指针。1不是int *类型的正确值,它是int。最简单的解决方法是传入int *test。 -
@AnttiHaapala 感谢您提供这些信息!我按照您的建议更改了功能,但没有改变任何结果:(
-
请edit您的问题添加新代码
标签: c string security printf format-string