比较来自Strace的字符串值

时间:2019-05-07 18:13:07

标签: linux strace

使用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,但是这些编码使用的是什么?这些应该是十进制值,但我不知道如何转换它们以进行比较。

1 个答案:

答案 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

     

以十六进制字符串格式打印所有字符串。