输入非ASCII字符到scanf(“%s”)

时间:2013-02-27 22:42:23

标签: c format scanf buffer-overflow

有没有办法可以向使用%s的scanf发出非ascii十六进制字符?我正在尝试插入像\x08\xDE\xAD这样的十六进制字符,以此类推(以演示缓冲区溢出)。

输入不是命令行参数,而是程序内的scanf。

2 个答案:

答案 0 :(得分:2)

我假设您想在stdin上提供任意数据(因为您使用scanf阅读)。

您可以使用shell创建数据并将其传输到您的程序中,例如

printf '\x08\xDE\xAD' | yourprogram

请注意,只有在没有空白字符输入的情况下才能使用此功能(因为scanf格式的%s会停在白色空间处。)

答案 1 :(得分:1)

当您说'到scanf()'时,可能会提供除此之外的其他数据。是否可以使用程序(可能是Perl或Python脚本)生成数据并将非ASCII字符写入程序的标准输入?如果您需要标准输入看起来像终端,那么您应该调查expect来处理这个问题。这是解决问题的常用方法。