objdump
指令,隨便找一個執行檔反組譯看看,看一下該執行檔機械語言轉回組合語言的結果吧。以下是ls
指令反組譯的結果:ls
指令約含有2萬個以上的機械語言指令,反組譯就會變成大概有2萬行篇幅的怪物,上面只放了開頭的一部份。3d58
表示的是存放該機械語言的記憶體位址。也就是說,執行ls
指令的時候,該行指令會被放到記憶體的 0x3d58 號位置,等程式計數器跑到 0x3d58 時就會執行該行指令。緊接著的四個16進制數字是實際的機械語言的長相。CPU 把這些值讀進去,然後將其作為指令執行。sub rsp,0x8
則是對應該機械語言指令的組合語言。關於 CPU 的指令集我們會逐章解釋,上面這個指令是把 RSP 這個暫存器的數值減掉(sub 是 subtract,減去的英文的開頭)8的指令。