我在互聯網上搜索了二進制編程,人們似乎願意給出的唯一答案是:「爲什麼要在二進制中編程?」 「這很愚蠢,使用組裝。」 「沒有什麼可以擺脫的,學習沒有意義。」二進制編程的資源
如果你是這些人之一,我感謝你的意見,但它不回答我的問題。
雖然我不上實際上是試圖以二進制的計劃我的理由知道打算是:
我在明知裝配命令後面的二進制指令的興趣。
我正在設計一個隨機二進制指令生成的實驗。我希望它們是有效的二進制命令,我希望能夠解釋這些命令在運行時會做什麼。
這樣說,有沒有人知道任何資源可以學習二進制編程?
我在互聯網上搜索了二進制編程,人們似乎願意給出的唯一答案是:「爲什麼要在二進制中編程?」 「這很愚蠢,使用組裝。」 「沒有什麼可以擺脫的,學習沒有意義。」二進制編程的資源
如果你是這些人之一,我感謝你的意見,但它不回答我的問題。
雖然我不上實際上是試圖以二進制的計劃我的理由知道打算是:
我在明知裝配命令後面的二進制指令的興趣。
我正在設計一個隨機二進制指令生成的實驗。我希望它們是有效的二進制命令,我希望能夠解釋這些命令在運行時會做什麼。
這樣說,有沒有人知道任何資源可以學習二進制編程?
通常情況下,彙編指令和機器代碼(你稱之爲二進制)之間有一對一的映射關係。您可以在指令集體系結構文檔中找到這些映射,瞭解您所關心的任何機器。流行的例子:
你就可以找到任何一個建築,你要使用一個類似的文件。您可以使用這些手冊中的信息來解碼給定程序的機器指令,並確定它們是如何從彙編源生成的,或者可以根據需要手動組裝自己的程序。
指令集手冊是非常有用的,並假定計算機硬件體系結構的一定程度的知識。下面是一些例子文件:
謝謝你的幫助。這也很有價值。 – Thallios
這裏就是我所做的學習二進制: 1.打開命令提示符,輸入「調試「作爲命令。
請注意,要編程實際的二進制文件,你需要一個十六進制編輯器。下面是我使用的一個:
http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm
另一個想法,我做學習更復雜的語言(如C++)是一樣做組裝,但在十六進制編輯器打開它。
好吧,作爲一個老黑客,因爲二進制:-)的日子誰一直在做這個
讓我儘量讓這個有點更具可讀性。
您描述的二進制文件就是所謂的機器碼。
藉此更進一步,CPU的是硬編碼到特定的指令作出反應,作爲一個例子(一個請注意我沒有任何引用此刻手)
值A9在6502機代碼意味着LDA(在其他體系結構上,這可能意味着不同)
因此,如果您在6502 CPU上工作,那麼序列A920將意味着以十六進制值0f 0x20加載累加器。
根據所討論的CPU以及指令集是如何編碼的,數字中的不同位將導致CPU(它是純粹的邏輯核心)執行不同的操作。
而且,根據製造商的規格,不同的位位置指定每個操作是什麼。
例如,在arm處理器中,位分支說明符,其中在6502中它們是零頁存儲器指示符。
實質上,二進制指令是特定於所討論的CPU,並且通常不能移植到另一個CPU(或者任何其他智能硅器件),因此移植和編寫軟件通常是非常困難的任務,除非您有對你的編程芯片非常深入的瞭解。
除非你在像intel這樣的公司工作,或者芯片生產商那麼現在真的不需要知道這些東西。然而,如果你喜歡打擊金屬並擠壓每一次性能的速度迷,那麼你仍然可以使用這些工具來做這種編程。
重要的答案。我只是想爲使用linux的人添加一個簡單的腳本,它顯示任何指令的二進制表示。你需要NASM的副本(但是,以便它使用煤氣或任何其他彙編,你可以很容易地編輯)和objdump的:
echo "$1" > testProgram.asm
nasm testProgram.asm -o testProgram.out -f elf -g
chmod 744 testProgram.out
objdump ./testProgram.out -d -M intel | grep ' 0:'
rm testProgram.out testProgram.asm
下面是一些例子:
[email protected]:~$ ./viewOpcode.sh "add ecx, 5"
0: 81 c1 05 00 00 00 add ecx,0x5
[email protected]:~$ ./viewOpcode.sh "int 0x80"
0: cd 80 int 0x80
[email protected]:~$ ./viewOpcode.sh "fmul st0, st1"
0: d8 c9 fmul st,st(1)
[email protected]:~$ ./viewOpcode.sh "andps xmm0, xmm1"
0: 0f 54 c1 andps xmm0,xmm1
[email protected]:~$ ./viewOpcode.sh "movntq [edi], mm0"
0: 0f e7 07 movntq QWORD PTR [edi],mm0
[email protected]:~$
謝謝你的信息,這絕對有價值! – Thallios
@Thallios,祝你好運! –