Altair 8800数据和说明

ped*_*tos 0 binary assembly intel-8080

最近我一直在玩Altair 8800仿真器以了解计算的基础知识,我想知道处理器如何"知道"字节是指令还是数据?

Jea*_*bre 6

处理器不知道字节是否是指令.它只执行程序计数器指向的任何代码.

如果程序计数器落在数据区中(由于编程错误,堆栈损坏或其他原因),CPU会尝试解释指令,直到它发现某些无效操作码为止,在这种情况下它会调用特殊的"非法指令"(或其他)处理程序和程序崩溃/操作系统重新启动/定义从错误中恢复的任何行为.

编辑:正如罗斯提到Altair没有真正的非法指令,"程序"会在混乱,随意的位置读写,直到有人拔掉插头时无休止地运行.

另一方面,您可以使用包含代码的区域加载地址寄存器,CPU将只能看到数据.

也就是说,反汇编/逆向工程的挑战之一就是找到原始程序员组装成代码的区域和仅仅定义数据的区域,如错误消息,图形...它们有时非常接近/缠绕,特别是在使用组装时.

跳转表,动态计算的入口点,动态解密,自修改代码可以使任务更难,即使对于像IDAPro这样的好的反汇编程序也是如此.基于数据看起来很像代码(可识别的操作码,例如:对于68k:0x4E75表示RTS,不太可能是数据),或者代码看起来很像数据这一事实,您经常需要帮助反汇编程序来决定因为它没有加起来(不连贯的,不相关的asm代码行)

  • 非常好,但仍然......"*实际上*代码和*实际上*数据......"让John von Neumann在他的坟墓中旋转,就像硬盘一样强大.([相关答案](http://stackoverflow.com/a/26826328/2564301)) (4认同)
  • Altair的Intel 8080不支持任何类型的非法指令处理程序.每个操作码都做了一些事情,但是没有记录的操作码大多与其他一些记录的操作码相同. (3认同)
  • 我明白你的意思了.我对68000指令集更熟悉,当我看到`NqNqNqNqNqNuNu`时,我知道这是一个'NOP`系列,后跟`RTS`.我想要概述的是,如果你对某些代码进行反向工程,错误地将数据声明为代码,并在优化器上重新组装它,它将破坏原始程序,因为数据可能会被更改.如果您成功识别所有"数据"和"代码"区域,那么您可以将新的可执行文件组装成更快的:) (2认同)