在 x86 程序集的例程中,如果代码包含指向两个有效地址之间的有效地址的跳转,会发生什么情况?这是一个人工示例:
0x0001: mov ...
0x0005: add ...
0x0009: jmp 0x0003
此外,我如何在本地机器或在线上试验这样的东西?我检查了像 https://defuse.ca/online-x86-assembler.htm#disassembly 这样的在线 x86 编辑器, 但它不允许我放置像“0x0001”这样的指令地址。
最佳答案
没有“有效”或“无效”地址之分。每一个地址都可以跳转,如果对应的页面被映射,则执行。
那么当你在指令“之间”跳转时会发生什么?好吧,处理器不知道你打算从哪里开始和结束指令。它只是执行它看到的字节。此代码将与您预期的不同,因为 CPU 会尝试将其他一些指令的中间部分解析为操作码。
您的具体示例不够具体,我无法说明指令的结果。也许您可以提供一个完整的示例(包括机器代码),以便我给出更好的解释。
https://stackoverflow.com/questions/69735867/