代码之家  ›  专栏  ›  技术社区  ›  Kristina

分解简单的手臂指令?

  •  2
  • Kristina  · 技术社区  · 16 年前

    我一直在和艾达专业捣乱,并试图拆解我自己的产品只是为了它。

    CGContextSetRGBStrokeColor颜色 .

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

    在艾达看来是这样的:

    IDA Output

    我不明白很多事情:

    1. 你怎么知道的 0x3F800000 与数字1有关?我假设这是一个参考,但我没有得到它所指的。
    2. 移动
    3. 有人能解释一下吗:

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

    框架 (因此a) 马赫数

    1 回复  |  直到 16 年前
        1
  •  10
  •   kennytm    16 年前

    0x3f80000与数字1有什么关系?我假设这是一个参考,但我没有得到它所指的。

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

    为什么mov被调用三次而不是四次(因为有四个参数)?

    ldr r1, =0x3f800000 指令已存储第二个参数。

    对。

    有人能解释一下吗:

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

    如果你检查整个函数,你应该看到“var c”是变量的地址 ctx

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

    只是指 r2 = ctx movs r0, r2 后来把上下文作为第一个参数。

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

    把1.0放在第五个参数上。