我正在尝试编写反汇编程序,我想知道处理器如何区分OpCode和Data-Bytes。
例如,这是“ Hello World”的字节表示形式:
0x48 0x65 0x6c 0x6c 0x6f 0x20 0x57 0x6f 0x72 0x6c 0x64 0x00
但是处理器如何“知道”它是在说“ Hello World”,而不是这样:_ _ INS INS OUTS AND _ OUTS JB INS _ ADD
非常欢迎爆炸。
答案 0 :(得分:4)
不能。 在Harward架构中,数据和代码的显式分离将防止此问题,在Von Neumann架构中,代码即数据。
由程序员决定不使CPU执行不需要的代码/数据。
答案 1 :(得分:2)
处理器知道,因为入口点是已知的。处理器按照执行顺序进行解码,这对于可变长度的指令集也是应该拆卸的方式。固定长度只能从入口点线性地通过内存,但是可变长度则需要按执行顺序进行。当然,这并非万无一失,使用拆卸器非常容易,因此请注意有可能,我建议您保持跟踪。我通常会制作一张指令入口点(某些ISA中的操作码)和非入口字节的表格,这样,如果我跳转到一条指令的中间,就可以在那里停止反汇编程序的路径(自然地,覆盖所有可能的路径。
关于操作码与数据,只要工具链和程序员完成了正确的工作,那么一条指令将根据需要移交给另一条跳过数据区域的指令。
处理器非常笨拙,它们没有很多实际功能,一些铝质材料,从地址读取和写入,将数据移入和移出寄存器的功能。一半的工作是向他们提供遵循规则的程序。