使用strace比较两个不同二进制文件的输出时,我很难确定实际写入的值是什么。
write(3, "g\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
write(4, "g\377\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
从第一到第二的区别似乎是\ 377 \ 377到\ 7 \ 0,但是这些编码使用的是什么?这些应该是十进制值,但我不知道如何转换它们以进行比较。
答案 0 :(得分:1)
Strace write()
handler使用printstrn
函数,该函数从util.c调用printstr_ex
函数,该函数调用string_quote
(也在util.c中),打印。
The function(默认情况下)使用ASCII字符打印数据,然后使用\r
\n
和\b
等的标准C表示法,然后将八进制值用于其他不可打印的字节。该字符串应可由C编译器解析,因此您可以编写一个简单的C程序进行比较,例如。 strcmp("g\377\377\377", "g\377\7\0")
将按预期工作。
如果您想比较这些值,则还有man strace的这些开关:
-x
以十六进制字符串格式打印所有非ASCII字符串。
-xx
以十六进制字符串格式打印所有字符串。