1
2
处理器知道,因为入口点是已知的。处理器按执行顺序解码,这也是您应该如何对可变长度指令集进行反汇编的方式。固定长度您可以直接从入口点线性地通过内存,但可变长度您需要按照执行顺序进行。这当然不是万无一失的,很容易让拆卸器出故障,所以要知道这是可能的,我建议你保持跟踪。我通常会将指令的入口点(在某些isa中是操作码)和非入口字节列成一个表,这样,如果我分支到指令的中间,我就可以在那里停止反汇编程序的路径(当然,您必须覆盖所有可能的路径)。 关于操作码和数据,只要工具链和程序员做了正确的工作,那么一条指令将根据需要传递给另一条跳过数据区域的指令。 处理器是非常愚蠢的,他们没有很多真正的功能,一些算术逻辑单元的东西,读写地址,移动数据进出寄存器。一半的工作是给他们提供遵循规则的程序。 |
2
4
在Harward架构中,数据和代码的显式分离将防止这个问题,在Von Neumann架构中,代码就是数据。 由程序员决定 不 |