gpt4 book ai didi

objective-c - 反汇编简单的 ARM 指令?

转载 作者:行者123 更新时间:2023-12-04 03:27:17 24 4
gpt4 key购买 nike

我一直在摆弄 IDA Pro,并为此尝试拆解我自己的产品。

我注意到一些我不理解的事情,因为我的汇编语言知识很糟糕。下面是一小段调用 CGContextSetRGBStrokeColor 的代码。

CGContextSetRGBStrokeColor(ctx, 1, 1, 1, 1);

在 IDA 中它看起来像这样:

IDA Output

我不明白很多事情:

  1. 0x3F800000 与数字 1 有什么关系?我假设它是一个引用,但我没有得到它指的是什么。
  2. 为什么 MOVS 被调用了三次而不是四次(因为有四个参数)?
  3. R0、R1、R2 等是 CPU 寄存器吗?
  4. 有人可以解释这些吗:

Some text lines http://a.imageshack.us/img836/4018/gah.png

这个文件是一个框架(因此是一个Mach-O文件)。该函数来自 CoreGraphics。

最佳答案

How does 0x3F800000 relate to the number 1? I assume it is a reference, however I did not get what it refers to.

0x3F800000 在 IEEE 单精度表示中是 1.0。您可以右键单击该 0x3F800000 并选择浮点表示法将其转换为 1.0。

Why is MOVS being called three times instead of four (because there are four arguments)?

在标准的 ARM 调用约定中,前 4 个参数分别存储在 R0 到 R3 中。 ldr r1, =0x3f800000 指令已经存储了第二个参数。

Are R0,R1,R2 etc. CPU registers?

是的。

Could someone explaing these:

请不要拆分非连续指令,因为第 2 条指令的 r3 和第 3 条指令的 r3 不同。

如果检查整个函数,您应该看到“var_4C”是堆栈上变量 ctx 的地址。因此,

add r3, sp, #0x50+var_4c
ldr r2, [r3]

只是表示 r2 = ctx。指令 movs r0, r2 稍后将上下文作为第一个参数。

此外,在 ARM 中,var_??相当于值-0x??。在 ARM 中,第 5 个及以上参数存储在堆栈中的 [sp, #0]、[sp, #4] 等处。因此,指令

ldr r3, =0x3f800000
str r3, [sp, #0] ;// #0x50+var_50 = 0x50 - 0x50 = 0

在第 5 个参数处设置 1.0。

关于objective-c - 反汇编简单的 ARM 指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3470125/

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