gpt4 book ai didi

unix - unix 的字符串命令如何工作?

转载 作者:行者123 更新时间:2023-12-02 01:46:22 25 4
gpt4 key购买 nike

strings 命令在二进制文件中打印可打印字符的字符串。

我很想知道它在高层次上是如何工作的。

这不应该是直截了当的,因为每个二进制文件都有不同的格式,从可执行文件到 PDF 等等。因此,从 ASCII/Unicode 字符到其他元数据,每个字节都可以表示不同的含义。

那么它知道所有这些二进制文件格式吗?然后,在这种情况下,它将无法处理某些新类型或 cutsom 二进制文件。

更新:我知道 strings 命令的作用。我只想知道它是如何做的。

最佳答案

strings 不会尝试解析所有类型的文件。它会扫描任何文件以查找足够长的“可打印字符”序列,并在找到后显示出来。看?不涉及“解析”。 (有一个异常(exception)。)

.. So each byte can mean different things from an ASCII/Unicode character to other metadata.

只到一定程度。 strings 非常简单,因为它尝试“解析”含义。也就是说,它看不出文本字符串“Hello world”和任何随机二进制序列之间的区别,后者恰好包含字节 0x48、0x65、0x6C、0x6C、 0x6F(等)在那个特定的顺序。

它唯一允许的是你可以告诉它(尝试)将原始字节解释为不同的字符集:

-e encoding
--encoding=encoding
Select the character encoding of the strings that are to be found. Possible values for encoding are: s = single-7-bit-byte characters (ASCII, ISO 8859, etc., default), S = single-8-bit-byte characters, b = 16-bit bigendian, l = 16-bit littleendian, B = 32-bit bigen- dian, L = 32-bit littleendian. Useful for finding wide character strings.

( http://unixhelp.ed.ac.uk/CGI/man-cgi?strings )

再一次,然后它只是按照你告诉它的去做:当被告知只寻找 7 位 ASCII 时,它会跳过高位 ASCII 字符(即使这些字符可能出现在二进制文件中的“有效文本”中)以及何时告诉 8 位也可以,它显示重音字符以及随机内容,例如 ¿¼¢ ².


至于解析,你可以从man页面推断出有一个异常(exception):

Do not scan only the initialized and loaded sections of object files; scan the whole files..

这个“目标文件”是您的系统支持的可执行文件类型。这可能是纯实用的:可执行二进制头很容易识别和解析(an example for "ELF" on SO itself),大多数人们对存储在二进制文件的可执行/数据部分中的文本感兴趣,而不是在其 header 和重定位表中有更多随机字节。

关于unix - unix 的字符串命令如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25501842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com