我在互联网上搜索了二进制编程,人们似乎愿意给出的唯一答案是:“为什么要在二进制中编程?” “这很愚蠢,使用组装。” “没有什么可以摆脱的,学习没有意义。”二进制编程的资源
如果你是这些人之一,我感谢你的意见,但它不回答我的问题。
虽然我不上实际上是试图以二进制的计划我的理由知道打算是:
我在明知装配命令后面的二进制指令的兴趣。
我正在设计一个随机二进制指令生成的实验。我希望它们是有效的二进制命令,我希望能够解释这些命令在运行时会做什么。
这样说,有没有人知道任何资源可以学习二进制编程?
我在互联网上搜索了二进制编程,人们似乎愿意给出的唯一答案是:“为什么要在二进制中编程?” “这很愚蠢,使用组装。” “没有什么可以摆脱的,学习没有意义。”二进制编程的资源
如果你是这些人之一,我感谢你的意见,但它不回答我的问题。
虽然我不上实际上是试图以二进制的计划我的理由知道打算是:
我在明知装配命令后面的二进制指令的兴趣。
我正在设计一个随机二进制指令生成的实验。我希望它们是有效的二进制命令,我希望能够解释这些命令在运行时会做什么。
这样说,有没有人知道任何资源可以学习二进制编程?
通常情况下,汇编指令和机器代码(你称之为二进制)之间有一对一的映射关系。您可以在指令集体系结构文档中找到这些映射,了解您所关心的任何机器。流行的例子:
你就可以找到任何一个建筑,你要使用一个类似的文件。您可以使用这些手册中的信息来解码给定程序的机器指令,并确定它们是如何从汇编源生成的,或者可以根据需要手动组装自己的程序。
指令集手册是非常有用的,并假定计算机硬件体系结构的一定程度的知识。下面是一些例子文件:
谢谢你的帮助。这也很有价值。 – 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,祝你好运! –