Try   HackMD

od 基本用法

有時候我們會需要查看一個檔案(尤其是binary檔案的時候)的各個byte到底寫了什麼,這時後就可以用od這個指令來把檔案一個一個byte地顯示出來

最常用的指令(今天就只記錄這招XD)

od -c filename.bmp >> od.txt

上面是將一個bmp檔案經過od的解析後,將結果寫進od.txt中。寫進txt檔是因為通常這個output會很大,如果terminal不允許顯示這麼長的output的話,會無法一次看完全部。

參數c在man page的解釋是"select printable characters or backslash escapes",已經講解得很清楚了,如果是ASCII的話會顯示字元或是帶有反斜線的跳脫字元,但一個byte換成十進位的話可以代表0到255,而ASCII只用了0到127而已,所以剩下的無法部分,od會將它轉換成八進位的三位數,例如212代表的就是2x8^2+1x8+2=138,也就是十進位的138,又例如012代表的就是十進位的10。所以我們可以知道這邊這個三位數最多只到377,也就是十進位的255

而od.txt每一行的左邊會有該行的行數,更正確的說是該行的offset,也就是該行在這份檔案中,它的前面有幾個byte的意思。而他的單位是八進位的數字,例如0000040代表的就是這一行的前面有4x8=32個byte。

最後,od.txt的內容中會出現 * 符號,它代表的是與前面那行的內容相同,所以若有相同的很多行的話,可以用一個 * 來代表,就可以省略很多冗余的output。

輸出內容範例

0000000    B   M   J   3 003  \0  \0  \0  \0  \0 212  \0  \0  \0   |  \0
0000020   \0  \0  \f 002  \0  \0   d  \0  \0  \0 001  \0      \0 003  \0
0000040   \0  \0 300   2 003  \0   % 026  \0  \0   % 026  \0  \0  \0  \0
0000060   \0  \0  \0  \0  \0  \0  \0  \0 377  \0  \0 377  \0  \0 377  \0
0000100   \0  \0  \0  \0  \0 377   B   G   R   s 200 302 365   (   ` 270
0000120  036 025     205 353 001   @   3   3 023 200   f   f   &   @   f
0000140    f 006 240 231 231  \t   <  \n 327 003   $   \ 217   2  \0  \0
0000160   \0  \0  \0  \0  \0  \0  \0  \0  \0  \0 004  \0  \0  \0  \0  \0
0000200   \0  \0  \0  \0  \0  \0  \0  \0  \0  \0 365 365 365 377 365 365
0000220  365 377 365 365 365 377 365 365 365 377 365 365 365 377 365 365
*
0035300  365 377 365 365 365 377 365 365 365 377 365 365 365 377 370 370
0035320  370 377 373 373 373 377 373 373 373 377 370 370 370 377 365 365
0035340  365 377 365 365 365 377 365 365 365 377 373 373 373 377 354 354
0035360  354 377 370 370 370 377 376 377 377 377 362 362 362 377 365 365
0035400  365 377 377 377 377 377 362 362 362 377 365 365 365 377 365 365
0035420  365 377 365 365 365 377 365 365 365 377 365 365 365 377 365 365
*
0035760  365 377 362 362 362 377 357 357 357 377 357 357 357 377 357 357
0036000  357 377 362 362 362 377 362 362 362 377 365 365 365 377 365 365
0036020  365 377 365 365 365 377 365 365 365 377 365 365 365 377 365 365