ped*_*tos 0 binary assembly intel-8080
最近我一直在玩Altair 8800仿真器以了解计算的基础知识,我想知道处理器如何"知道"字节是指令还是数据?
处理器不知道字节是否是指令.它只执行程序计数器指向的任何代码.
如果程序计数器落在数据区中(由于编程错误,堆栈损坏或其他原因),CPU会尝试解释指令,直到它发现某些无效操作码为止,在这种情况下它会调用特殊的"非法指令"(或其他)处理程序和程序崩溃/操作系统重新启动/定义从错误中恢复的任何行为.
编辑:正如罗斯提到Altair没有真正的非法指令,"程序"会在混乱,随意的位置读写,直到有人拔掉插头时无休止地运行.
另一方面,您可以使用包含代码的区域加载地址寄存器,CPU将只能看到数据.
也就是说,反汇编/逆向工程的挑战之一就是找到原始程序员组装成代码的区域和仅仅定义数据的区域,如错误消息,图形...它们有时非常接近/缠绕,特别是在使用组装时.
跳转表,动态计算的入口点,动态解密,自修改代码可以使任务更难,即使对于像IDAPro这样的好的反汇编程序也是如此.基于数据看起来很像代码(可识别的操作码,例如:对于68k:0x4E75表示RTS,不太可能是数据),或者代码看起来很像数据这一事实,您经常需要帮助反汇编程序来决定因为它没有加起来(不连贯的,不相关的asm代码行)