在 ARM/Thumb (IOS) 上解码 BLX 指令

2024-02-21

我已经阅读了大部分 ARM 文档,但在解码 BLX 指令时仍然遇到问题。下面是两个例子:

__text:0000347C 02 F0 B2 ED                 BLX             _objc_msgSend

__text:0000469C 01 F0 A2 EC                 BLX             _objc_msgSend

这两个应该去同一个地方,虚拟地址 0x5FE4,如下所示:

__symbolstub1:00005FE4 38 F0 9F E5                 LDR             PC, =__imp__objc_msgSend

但是,我无法弄清楚使用指令字节从上述两个地址(0x347C 和 0x469C)获取的计算结果。根据 ARM 文档,它应该是相对跳跃,使用右移 2,但数字不起作用。

有人可以帮忙吗?


首先,指令被打印为两个小端 16 位字段。为了匹配 ARM 参考手册中的字节顺序,您需要对每个字段进行字节交换。对于第一条指令,给出:

F0 02 ED B2

or

11110000000000101110110110110010.

这是 BLX 指令的编码 T2。将其分解为 ARM 中标识的字段:

11110  0  0000000010  11  1  0  1  1011011001  0  
       S    imm10H        J1    J2   imm10L

然后按照字段解释的说明进行操作:

I1 = NOT(J1 EOR S) = 0
I2 = NOT(J2 EOR S) = 0

imm32 = SignExtend(S:I1:I2:imm10H:imm10L:00)
      = SignExtend(0000000000010101101100100)
      = 0x00002b64

这正是0x5FE4 - 0x3480(记住,PC在 Thumb/Thumb 2) 中超前 4 个字节。

我相信您可以自己完成第二个示例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ARM/Thumb (IOS) 上解码 BLX 指令 的相关文章

随机推荐

  • Vue Router 推送错误:避免了到当前位置的冗余导航

    有没有办法避免错误 避免冗余导航到当前位置 我需要进行分页 方法如下 handlePageChange page number void const query this route query page page toString thi
  • ActiveJob GlobalID 和内存中 ActiveRecord 对象

    我正在使用排队系统 Sidekiq 并且希望迁移到 ActiveJob 以获得性能优势 因为不必每次将 ActiveRecord 对象传递给工作人员时都查询数据库 我想询问并确认 因为我不是 100 确定 但我的理解是 当 ActiveJo
  • 使用依赖属性和样式触发器时,“...不是 DependencyProperty”

    在我的用户控件中 public ODIF DeviceChannel Channel get return ODIF DeviceChannel GetValue ChannelDP set SetValue ChannelDP value
  • TableDnD onDrop 事件未触发

    我确信这是非常简单的事情 通常都是如此 sort table tableDnD onDragClass dnd drag onDragStart function table row console log start drag onDro
  • 如何从标准输入中读取一行,并将其余行传递给子进程?

    If you readline from sys stdin 将其余部分传递给子进程似乎不起作用 import subprocess import sys header sys stdin buffer readline print hea
  • 如何在servlet中获取客户端的远程地址?

    有什么办法可以获取到服务器的客户端的原始IP地址吗 我可以用request getRemoteAddr 但我似乎总是获得代理或网络服务器的IP 我想知道客户端用于连接到我的 IP 地址 无论如何 我能得到它吗 尝试这个 public sta
  • Visual Studio 2012 是否利用所有可用的 CPU 内核?

    我计划在 Visual Studio 2012 和 Windows 7 64 位下构建一台新的非常快的开发计算机 我正在购买所有快速组件 例如 SSD 和 16G RAM 我想知道是否视觉工作室2012旨在利用所有可用的 CPU 内核 我正
  • 每次出现错误时使用 prometheus 创建警报

    我是普罗米修斯和警报系统的新手 我开发了一个微服务并添加了指标代码 以便在出现错误时获取增量总数 现在我正在尝试创建一个警报 以便每当错误增加时 它应该标记出来并发送邮件 但我无法针对这种情况形成正确的查询 我使用了诸如 error tot
  • CoreMotion 陀螺仪苹果手表

    我正在尝试访问苹果手表的陀螺仪 据我所知 它可以在 watchos 3 中使用 不幸的是我无法让它工作 它不断返回 陀螺仪不可用 因此 MotionManager isGyroAvailable 始终为 false 这是我的代码 任何帮助
  • Kotlin 本地函数必须在使用前声明

    在这个简单的代码示例中 fun testLocalFunctions aLocalFun compiler error unresolved reference at aLocalFun fun aLocalFun aLocalFun no
  • 如何保持领域数据与输入的顺序相同

    我有一个应用程序 需要将数据按照输入的顺序保存 数据被输入到 List 属性中 一切都很顺利 直到我必须删除一个项目 当删除发生时 列表中的最后一项将取代被删除的一项 UITableView 显示正确的项目数 但与领域列表不同步 一个例子是
  • R中的顺序混淆矩阵

    我根据 3 个类别的观察结果及其预测创建了一个混淆矩阵 classes c Underweight Normal Overweight 当我计算混淆矩阵时 它会按字母顺序组织表中的类 这是我的代码 Confusion matrix Obse
  • 为什么此解释中没有使用密钥?

    我期望这个查询使用密钥 mysql gt DESCRIBE TABLE Foo Field Type Null Key Default Extra id bigint 20 NO PRI NULL auto increment name v
  • 如何正确编写 Swift UI Toggle 的 UI 测试

    有谁知道如何正确编写 Toggle 的 UI 测试 即使在一个全新的项目中 整个 UI 中只有一个切换而没有其他内容 我仍然会收到此类错误 Failed to get matching snapshot Multiple matching
  • OpenCV detectorMultiScale() 参数的推荐值

    推荐的参数是什么CascadeClassifier detectMultiScale http docs opencv org modules objdetect doc cascade classification html cascad
  • 如何在 Node.js 中将 JPG 图像转换为 WEBP 格式?

    我正在尝试使用react Js上传图像并使用multer中间件将该图像保存在node Js中 这是完美的 但现在我想使用 webp converter 将该图像转换为 WEBP 格式 反之亦然 但我收到此错误 Error Command f
  • JavaScript 数字到单词

    例如 我正在尝试将数字转换为英语单词1234会成为 一千二百三十四 我的策略是这样的 将数字分成三位并将它们放入数组 finlOutPut 从右到左 转换每个组 每个单元格中finlOutPut数组 的三个数字到一个单词 这就是triCon
  • 使用 PHP、活动目录以及 IE/Firefox 对 ldap 进行身份验证

    下面的代码根据 ldap 检查用户的凭据
  • Tensorflow 不会在 CUDA 支持下构建

    我已经尝试从源代码构建张量流 如安装指南 https www tensorflow org install install sources 我已经成功地使用仅 cpu 支持和 SIMD 指令集构建了它 但在尝试使用 CUDA 支持构建时遇到
  • 在 ARM/Thumb (IOS) 上解码 BLX 指令

    我已经阅读了大部分 ARM 文档 但在解码 BLX 指令时仍然遇到问题 下面是两个例子 text 0000347C 02 F0 B2 ED BLX objc msgSend text 0000469C 01 F0 A2 EC BLX obj