2011-05-25 139 views
3

只是出於興趣,我想寫一個機器碼的小程序。我會用什麼編譯器來編寫機器語言?

我目前正在學習寄存器,ALU,總線和內存,我略微着迷指令可以用二進制代替彙編語言編寫。

是否需要使用編譯器?

最好在OSX上運行。

+4

如果你正在寫的「機器代碼」,因爲沒有什麼編譯你並不需要一個編譯器。 – geoffspear 2011-05-25 17:55:04

+2

@雷斯,你應該報告你的問題meta.stackoverflow.com ... – bdonlan 2011-05-25 17:55:11

+0

謝謝bdonlan。我現在正在報告。 – 2011-05-25 18:01:10

回答

5

您不會使用編譯器來編寫原始機器碼。你會使用十六進制編輯器。不幸的是,我不使用OSX,所以我無法爲您提供特定的鏈接。

如果你編寫機器代碼,你需要學習如何編寫你的操作系統所需的二進制頭文件。我會建議這樣做,並首先用匯編器以原始輸出格式進行測試;一旦你理解了二進制佈局,這是一個純粹的機械任務,將其手動組裝到機器代碼中。

+3

我使用HexFiend(http://ridiculousfish.com/hexfiend/),它在MacBook上爲我完成這項工作。 – 2011-05-25 18:01:35

0

編譯器將您的非機代碼轉換成機器代碼......這樣你就不會需要一個編譯器...

+0

不,我的意思是機器碼。在0和1中編碼指令。 – 2011-05-25 17:59:37

+0

@雷斯霍爾德:是的,我讀了剩下的部分,並刪除了NASM的參考資料。不知道爲什麼你認爲如果你正在編寫機器代碼,你會需要一個編譯器... – 2011-05-25 18:00:35

+0

當我寫這個問題時,我確實有疑問。 – 2011-05-25 18:02:36

3

你會使用十六進制編輯器。我建議不要那樣做,首先要學習彙編程序。彙編程序基本上是一種在人類可讀的助記符和機器可讀的十六進制字節之間具有1:1對應關係的語言。爲此,您可能想要查看http://ref.x86asm.net/並找到適用於x86 Mac的彙編程序。我相信yasm應該工作。

十六進制寫什麼,直接是非常困難的,和你的時間可能會花在學習彙編和彙編生成

+0

我目前正在學習彙編。我也在閱讀「機器內部」。這讓我有點興趣。 – 2011-05-25 18:03:53

+0

@Riess好吧。我建議找到一個好的十六進制編輯器並查看生成的機器代碼,並使用反彙編程序來測試自己在機器代碼中的修改/創建。這可能是學習機器代碼最簡單的方法..我寫了一個8086仿真器,我記憶的唯一機器代碼是0xF4是hlt,0x90是nop – Earlz 2011-05-25 18:06:16

+0

這是個好主意。多年來,我聽說過十六進制編輯,我已經和他們玩過,但我從來沒有明白他們的真正目的。只是一個簡單的問題,爲什麼約定使用十六進制而不是二進制?內存是2字節還是1個十六進制數字? – 2011-05-25 18:09:40

1

你需要一個彙編底層機器代碼,你真的這麼做了,其他的海報說寫作二進制指令代碼是非常令人頭腦無聊的,並且必須如此正確,以至於只有一臺機器才能做到這一點。在一個非平凡的操作系統上,如OSX。 Linix,Windows,必須提供正確的頭信息來生成可執行文件。同樣,最好通過彙編程序包完成,該程序包可以鏈接正確的頭文件,以確保您的指令具有數據,堆棧和執行。然後,你的彙編程序會崩潰,並再次,並且再次,多年。

寫入二進制指令通常被歸類爲酷刑。這樣做違反了基本人權。如果你曾經被要求做,那麼將它外包給Gitmo。

獲得一個彙編程序。

RGDS, 馬丁

相關問題