assembly - 如果 x86 jmp 跳转到其他两个连续有效地址之间的地址会发生什么?

在 x86 程序集的例程中,如果代码包含指向两个有效地址之间的有效地址的跳转,会发生什么情况?这是一个人工示例:

0x0001: mov ...
0x0005: add ... 
0x0009: jmp 0x0003

此外,我如何在本地机器或在线上试验这样的东西?我检查了像 https://defuse.ca/online-x86-assembler.htm#disassembly 这样的在线 x86 编辑器, 但它不允许我放置像“0x0001”这样的指令地址。

最佳答案

没有“有效”或“无效”地址之分。每一个地址都可以跳转,如果对应的页面被映射,则执行。

那么当你在指令“之间”跳转时会发生什么?好吧,处理器不知道你打算从哪里开始和结束指令。它只是执行它看到的字节。此代码将与您预期的不同,因为 CPU 会尝试将其他一些指令的中间部分解析为操作码。

您的具体示例不够具体,我无法说明指令的结果。也许您可以提供一个完整的示例(包括机器代码),以便我给出更好的解释。

https://stackoverflow.com/questions/69735867/

相关文章:

c++ - 创建一个线程安全的原子计数器

python - python解释器是否隐含地使用了中国余数定理?

c++ - 嵌套 std::map 的单行查找

azure-devops - Azure DevOps Pipeline NPM 安装任务因 nod

android - 如何在 Room MVVM 架构中实现 Koin 依赖注入(inject)

r - 从 R 中的数据帧列表中进行子集化

javascript - 如何在 sveltekit 应用程序中将菜单项设置为事件状态

java - 如何在实体中正确创建关系

angular - AWS Lambda@Edge Viewer 请求失败,返回 'The body

javascript - MongooseServerSelectionError:连接 ECONN