有没有办法可以向使用%s
的scanf发出非ascii十六进制字符?我正在尝试插入像\x08\xDE\xAD
这样的十六进制字符,以此类推(以演示缓冲区溢出)。
输入不是命令行参数,而是程序内的scanf。
答案 0 :(得分:2)
我假设您想在stdin上提供任意数据(因为您使用scanf
阅读)。
您可以使用shell创建数据并将其传输到您的程序中,例如
printf '\x08\xDE\xAD' | yourprogram
请注意,只有在没有空白字符输入的情况下才能使用此功能(因为scanf
格式的%s
会停在白色空间处。)
答案 1 :(得分:1)
当您说'到scanf()
'时,可能会提供除此之外的其他数据。是否可以使用程序(可能是Perl或Python脚本)生成数据并将非ASCII字符写入程序的标准输入?如果您需要标准输入看起来像终端,那么您应该调查expect
来处理这个问题。这是解决问题的常用方法。