在进行代码搜寻时,有时需要使用十六进制转储代码,通常是因为您使用了无法打印的字符。那么,为什么不编写一个十六进制转储本身的程序呢?
挑战
面临的挑战是,在没有任何输入的情况下,以以下格式输出源代码的十六进制转储:
0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
或者,例如,如果您的程序是 print("SomeString"):rep(123)
0000: 70 72 69 6e 74 28 5c 22 53 6f 6d 65 53 74 72 69 print("SomeStrin
0010: 6e 67 5c 22 29 3a 72 65 70 28 31 32 33 29 g"):rep(123)
细节
十六进制转储分为三部分,每行代表源代码的16个字节。
第一部分是内存地址。它指定当前行在代码中的开始位置。写为2字节的十六进制数字,后跟一个:
,然后是一个空格。
第二,是十六进制转储本身。这是您的源代码的16个字节,以十六进制形式写,用空格分隔。这应该是使用代码编码的准确字节表示形式。
最后,在两个空格之后,是代码本身。这只是您代码的16个字符,不可打印字符写为.
笔记
xxd
吗?