gpt4 book ai didi

objective-c - otool for armv7 的错误方法实现地址?

转载 作者:搜寻专家 更新时间:2023-10-30 20:03:01 25 4
gpt4 key购买 nike

“otool”显示的方法的实现地址不断得到 1 个字节的偏移量。

例如 'otool -o' 给出 0xe99d5 但 'otool -tvV' 给出:

+[NSError(SomeCategory) someMethod]:
000e99d4 b590 push {r4, r7, lr}
000e99d6 f6441184 movw r1, 0x4984
000e99da af01 add r7, sp, #4
000e99dc f2c0010a movt r1, 0xa

所以方法从 0xe99d4 开始。 0xe99d5 看起来不对,没有对齐。我相信“otool”工作正常,但我不了解实现的某些方面。如何解释输出?

最佳答案

现代 ARM 内核有两种类型的指令集。原始的一种称为 arm 模式,其中每条指令为四个字节长,较新的一种称为 thumb2 (您可以猜到它已经通过了一些迭代),其中指令可以是两个或四个字节长(引入的原因是代码密度)。

CPU 在进行分支时可以改变模式,通知 CPU 使用的指令集的方式是设置要跳转的指令地址的最低有效位。如果它是 0 指令将被解释为 arm 模式,如果它是 1 它们将被解释为 thumb 模式。

所以您看到的是您的函数处于 thumb2 模式,我们可以通过查看它由两个和四个字节长的指令组成来验证。

关于objective-c - otool for armv7 的错误方法实现地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15045144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com