Linux深入探索11-二進(jìn)制文件查看(hexdump 與 od)

一、簡介

在計(jì)算機(jī)科學(xué)中,一個(gè) 0 或 1 存儲(chǔ)的數(shù)據(jù)稱為一個(gè)位(bit棍辕,代表 binary digit暮现,即二進(jìn)制數(shù));連續(xù) 8 位稱為一個(gè)字節(jié)痢毒。

odhexdump 可以以可讀的格式顯示任何類型的二進(jìn)制數(shù)據(jù)送矩。實(shí)際上,這兩個(gè)文件是兩個(gè)基于文本的查看二進(jìn)制文件內(nèi)部的主要工具哪替。

大多數(shù)有經(jīng)驗(yàn)的 Unix 人士傾向于選擇一個(gè)自己喜歡的程序使用,要么是 od 菇怀,要么是 hexdump

二凭舶、規(guī)范輸出

某種特定格式的二進(jìn)制文件輸出格式稱為規(guī)范輸出,如:

[nosee@instance-4 ~]$ hexdump -C day1
00000000  09 09 4a 61 6e 75 61 72  79 09 32 30 32 32 09 09  |..January.2022..|
00000010  0a 53 75 09 4d 6f 09 54  75 09 57 65 09 54 68 09  |.Su.Mo.Tu.We.Th.|
00000020  46 72 09 53 61 0a 09 09  09 09 09 09 20 31 0a 20  |Fr.Sa....... 1. |
00000030  32 09 20 33 09 20 34 09  20 35 09 20 36 09 20 37  |2. 3. 4. 5. 6. 7|
00000040  09 20 38 0a 20 39 09 31  30 09 31 31 09 31 32 09  |. 8. 9.10.11.12.|
00000050  31 33 09 31 34 09 31 35  0a 31 36 09 31 37 09 31  |13.14.15.16.17.1|
00000060  38 09 31 39 09 32 30 09  32 31 09 32 32 0a 32 33  |8.19.20.21.22.23|
00000070  09 32 34 09 32 35 09 32  36 09 32 37 09 32 38 09  |.24.25.26.27.28.|
00000080  32 39 0a 33 30 09 33 31  09 09 09 09 09 09 0a 68  |29.30.31.......h|
00000090  61 68 61 0a 68 61 68 61  0a e6 96 b0 e5 95 8a ef  |aha.haha........|
000000a0  bc 81 ef bc 81 ef bc 81  ef bc 81 ef bc 81 0a 0a  |................|
000000b0  68 61 68 68 61 0a                                 |hahha.|
000000b6
[nosee@instance-4 ~]$ 

其中爱沟,左邊是十六進(jìn)制的偏移帅霜,中間是十六進(jìn)制的數(shù)據(jù),右邊是數(shù)據(jù)的ASCII字符呼伸。

對(duì)于二進(jìn)制文件而言身冀,文件中沒有行,因此行號(hào)沒有意義括享。作為替代搂根,我們使用偏移(offset)標(biāo)記每個(gè)位置。偏移就是一個(gè)數(shù)字铃辖,告訴離文件開頭有多少字節(jié)剩愧。偏移不屬于數(shù)據(jù)的內(nèi)容,是 hexdump 程序加上去的娇斩,為了方便程序員閱讀仁卷。

其中,第一個(gè)字節(jié)的偏移是 0犬第;第二個(gè)字節(jié)偏移是 1锦积;以此類推。(記住歉嗓,1字節(jié)=8位=2個(gè)十六進(jìn)制數(shù)字)

在大多數(shù)二進(jìn)制文件中丰介,有些字節(jié)包含的是實(shí)際 ASCII 字符。通過查看最右邊的一欄可以方便地識(shí)別這些字節(jié)遥椿。根據(jù)約定基矮,沒有對(duì)應(yīng)可顯示 ASCII 字符的字節(jié)一律通過用一個(gè).(點(diǎn)號(hào))字符表示。(如上面的例子冠场,最前面的4a家浇,二進(jìn)制是01001010,十進(jìn)制是74碴裙,在ASCII碼中就是字符J )

二進(jìn)制文件中的大多數(shù)字節(jié)都不是字符(有一些只是碰巧會(huì)對(duì)應(yīng)于某個(gè)字符)钢悲,而是機(jī)器指令点额、數(shù)值數(shù)據(jù)等。

三莺琳、hexdump

hexdump — ASCII, decimal, hexadecimal, octal dump.

語法:
hexdump [-bcCdovx] [-e format_string] [-f format_file] [-n length] [-s offset] file ...
hd [-bcdovx] [-e format_string] [-f format_file] [-n length] [-s offset] file ...

其中还棱,hd 可以相當(dāng)于是 hexdump -C

常用選項(xiàng):

  • -C惭等,(大寫C) 以規(guī)范格式顯示一個(gè)二進(jìn)制文件
  • -s offset珍手,(skip over 略過) 設(shè)置初始偏移量指定在文件開頭略過多少字節(jié), offset 可以使用任何進(jìn)制表示的數(shù)字。(如辞做,-s 0x120 表示從偏移0x120處開始顯示數(shù)據(jù))
  • n length琳要,(number of bytes 字節(jié)數(shù)量) 設(shè)置顯示字節(jié)數(shù), length 為十進(jìn)制數(shù)。 (如秤茅,-n 100表示只顯示100個(gè)字節(jié)的數(shù)據(jù))

常用組合語法:hexdump -C [-s offset] [-n length] [file...]

例:

[nosee@instance-4 ~]$ hexdump -C -s 0x120 -n 100 /usr/bin/ls 
00000120  01 00 00 00 04 00 00 00  00 70 01 00 00 00 00 00  |.........p......|
00000130  00 70 01 00 00 00 00 00  00 70 01 00 00 00 00 00  |.p.......p......|
00000140  10 89 00 00 00 00 00 00  10 89 00 00 00 00 00 00  |................|
00000150  00 10 00 00 00 00 00 00  01 00 00 00 06 00 00 00  |................|
00000160  90 03 02 00 00 00 00 00  90 13 02 00 00 00 00 00  |................|
00000170  90 13 02 00 00 00 00 00  58 12 00 00 00 00 00 00  |........X.......|
00000180  48 25 00 00                                       |H%..|
00000184
[nosee@instance-4 ~]$ hd -s 0x120 -n 100 /usr/bin/ls 
00000120  01 00 00 00 04 00 00 00  00 70 01 00 00 00 00 00  |.........p......|
00000130  00 70 01 00 00 00 00 00  00 70 01 00 00 00 00 00  |.p.......p......|
00000140  10 89 00 00 00 00 00 00  10 89 00 00 00 00 00 00  |................|
00000150  00 10 00 00 00 00 00 00  01 00 00 00 06 00 00 00  |................|
00000160  90 03 02 00 00 00 00 00  90 13 02 00 00 00 00 00  |................|
00000170  90 13 02 00 00 00 00 00  58 12 00 00 00 00 00 00  |........X.......|
00000180  48 25 00 00                                       |H%..|
00000184

四稚补、od

od - dump files in octal and other formats.

語法:
od [OPTION]... [FILE]...
od [-abcdfilosx]... [FILE] [[+]OFFSET[.][b]]
od --traditional [OPTION]... [FILE] [[+]OFFSET[.][b] [+][LABEL][.][b]]

常用選項(xiàng):

  • A,(address 地址) 指定使用哪一種計(jì)數(shù)系統(tǒng)表示偏移值框喳。對(duì)于規(guī)范輸出來說课幕,需要將它指定為x,即-Ax五垮,這將以十六進(jìn)制顯示偏移乍惊。
  • -t,(type of format 格式類型) 控制數(shù)據(jù)顯示的方式拼余。對(duì)于規(guī)范輸出來說污桦,需要將它指定為x1(以十六進(jìn)制顯示數(shù)據(jù),每次一個(gè)字節(jié))匙监,和 z(在每行末尾加上相應(yīng)的ASCII值)凡橱,即-tx1z。(注意亭姥,這里的1稼钩,是數(shù)字1)
  • -j,(jump over 跳過) 指定從文件開頭跳過多少字節(jié)达罗。(如-j 0x120坝撑,表示從偏移0x120處開始顯示數(shù)據(jù))
  • -N,(number of bytes 字節(jié)數(shù)量) 設(shè)置顯示字節(jié)數(shù)粮揉。 (如巡李,-N 96表示只顯示96個(gè)字節(jié)的數(shù)據(jù))

常用組合語法:od -Ax -tx1z [-j offset] [-N length] [file...]
經(jīng)常使用可以考慮創(chuàng)建別名:alias od='od -Ax -tx1z'

例:

[nosee@instance-4 ~]$ od -Ax -tx1z day1
000000 09 09 4a 61 6e 75 61 72 79 09 32 30 32 32 09 09  >..January.2022..<
000010 0a 53 75 09 4d 6f 09 54 75 09 57 65 09 54 68 09  >.Su.Mo.Tu.We.Th.<
000020 46 72 09 53 61 0a 09 09 09 09 09 09 20 31 0a 20  >Fr.Sa....... 1. <
000030 32 09 20 33 09 20 34 09 20 35 09 20 36 09 20 37  >2. 3. 4. 5. 6. 7<
000040 09 20 38 0a 20 39 09 31 30 09 31 31 09 31 32 09  >. 8. 9.10.11.12.<
000050 31 33 09 31 34 09 31 35 0a 31 36 09 31 37 09 31  >13.14.15.16.17.1<
000060 38 09 31 39 09 32 30 09 32 31 09 32 32 0a 32 33  >8.19.20.21.22.23<
000070 09 32 34 09 32 35 09 32 36 09 32 37 09 32 38 09  >.24.25.26.27.28.<
000080 32 39 0a 33 30 09 33 31 09 09 09 09 09 09 0a 68  >29.30.31.......h<
000090 61 68 61 0a 68 61 68 61 0a e6 96 b0 e5 95 8a ef  >aha.haha........<
0000a0 bc 81 ef bc 81 ef bc 81 ef bc 81 ef bc 81 0a 0a  >................<
0000b0 68 61 68 68 61 0a                                >hahha.<
0000b6
[nosee@instance-4 ~]$ od -Ax -tx1z -j 0x120 -N 96 /usr/bin/ls 
000120 01 00 00 00 04 00 00 00 00 70 01 00 00 00 00 00  >.........p......<
000130 00 70 01 00 00 00 00 00 00 70 01 00 00 00 00 00  >.p.......p......<
000140 10 89 00 00 00 00 00 00 10 89 00 00 00 00 00 00  >................<
000150 00 10 00 00 00 00 00 00 01 00 00 00 06 00 00 00  >................<
000160 90 03 02 00 00 00 00 00 90 13 02 00 00 00 00 00  >................<
000170 90 13 02 00 00 00 00 00 58 12 00 00 00 00 00 00  >........X.......<
000180

五、參考

書箱:《Unix & Linux 大學(xué)教程》第二十一章 (美)Harley Hahn 著 張杰良 譯

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扶认,一起剝皮案震驚了整個(gè)濱河市侨拦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辐宾,老刑警劉巖狱从,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件膨蛮,死亡現(xiàn)場離奇詭異,居然都是意外死亡季研,警方通過查閱死者的電腦和手機(jī)敞葛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來与涡,“玉大人惹谐,你說我怎么就攤上這事〉莼Γ” “怎么了豺鼻?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長款慨。 經(jīng)常有香客問我,道長谬莹,這世上最難降的妖魔是什么檩奠? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮附帽,結(jié)果婚禮上埠戳,老公的妹妹穿的比我還像新娘。我一直安慰自己蕉扮,他們只是感情好整胃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著喳钟,像睡著了一般屁使。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奔则,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天蛮寂,我揣著相機(jī)與錄音,去河邊找鬼易茬。 笑死酬蹋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的抽莱。 我是一名探鬼主播范抓,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼食铐!你這毒婦竟也來了匕垫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤璃岳,失蹤者是張志新(化名)和其女友劉穎年缎,沒想到半個(gè)月后悔捶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡单芜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年蜕该,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洲鸠。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡堂淡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扒腕,到底是詐尸還是另有隱情绢淀,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布瘾腰,位于F島的核電站皆的,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蹋盆。R本人自食惡果不足惜费薄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望栖雾。 院中可真熱鬧楞抡,春花似錦、人聲如沸析藕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽账胧。三九已至竞慢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間找爱,已是汗流浹背梗顺。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留车摄,地道東北人寺谤。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像吮播,于是被迫代替她去往敵國和親变屁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容