【问题标题】:Comparing String Values from Strace比较来自 Strace 的字符串值
【发布时间】:2019-05-07 18:13:07
【问题描述】:

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

【问题讨论】:

  • 你为什么不试试 strace 的作用呢?也就是说,它可能类似于 C 代码,我相信它是八进制的。
  • 这是octal 符号,\377 等于十六进制的 0xff 或二进制的 11111111。而unix.stackexchange.com 将是这个问题的更好论坛。 StackOverflow 用于编程问题,而 UNIX 和 Linux StackExchange 涵盖一般问题。
  • 谢谢@tk421。我应该认为它是八进制的,因为字符是字节。

标签: linux strace


【解决方案1】:

Strace write() handler 使用 printstrn 函数,从 util.c 调用 printstr_ex 函数,该函数调用 string_quote(也在 util.c 中)进行打印。

The function(默认情况下)使用 ASCII 字符打印数据,然后使用标准 C 表示法 \r \n\b 等,然后将八进制值用于其他不可打印的字节。该字符串应该可以由 C 编译器解析,因此您可以编写一个简单的 C 程序来比较它们,例如。 strcmp("g\377\377\377", "g\377\7\0") 将按预期工作。

如果你想比较这些值,还有来自man strace的这些开关:

-x

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

-xx

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

【讨论】:

    猜你喜欢
    • 2019-10-08
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2016-04-27
    • 2015-03-03
    相关资源
    最近更新 更多