将0x20,0x00,0x0d,0x0a字节传递给strcmp()

时间:2015-05-20 09:36:51

标签: python string null strcmp

我正试图在有一个奇怪的strcmp的地方进行挑战。 它是以下内容:

if(strcmp(argv[1],"\x00")) return 0;
if(strcmp(argv[2],"\x20\x0a\x0d")) return 0;

我试图通过Python传递参数但是没有以正确的方式读取字节。 这就是我试过的:

./program $(python -c 'import sys;sys.stdout.write("\x00 \x20\x0a\x0d")')

我也尝试使用他们的repr,但这也不起作用。他们目前正在评估每个字节实际代表的内容:我如何“正确地传递它们”?

1 个答案:

答案 0 :(得分:0)

如果您不想要评估反斜杠转义,则需要转义它们。

此:

if(strcmp(argv[1], "\\x20\\x0a\\x0d")) return 0;

与文字字符串"\x20\x0a\x0d"进行比较,后者有12个字符。

从命令行的角度来看,第一个参数应该是一个空字符串(通常在大多数shell中写为""),第二个参数应该是Python表示法中的树字符串" \n\r"

不确定Python与此处的内容有什么关系,例如: bash你应该能够做到:

$ ./program "" $'\n\r'