【发布时间】:2015-08-17 11:46:33
【问题描述】:
考虑以下代码:
void main()
{
int i = 0;
char j[22] = "This is a long string", k[3];
scanf("%2s", k);
sprintf(j, k);
for (; i < 21; printf("%c", j[i++]));
}
假设输出为:
U%ae'$ffq` ong 字符串
输入可能是什么?
所以我认为它应该类似于%d 或%x。所以它执行:sprintf(j, "%x");,但这种格式没有对应的变量。
- 在这种情况下,函数的作用是什么?好像是地址
- 输入可能是什么?是
%x还是别的什么?
【问题讨论】:
-
void main()-->int main(void) -
@SouravGhosh 你的评论不一定正确,see this。
-
如果您的
scanf()扫描任何sprintf()-conversion-specifiers,则行为未定义,因为sprintf()将没有相应的参数。 -
@Lundin 从技术上讲,是的,但是对于绝大多数情况,它将适用(正常,托管环境)。对于独立环境,完全没有限制。 :)
标签: c memory printf exploit format-specifiers