簡體   English   中英

解讀簡單的ARM指令?

[英]Dissasembling simple ARM instructions?

我一直在搞亂IDA Pro並試圖為了它而拆卸我自己的產品。

我注意到了一些我不理解的事情,因為我的匯編語言知識很糟糕。 這里有一小段代碼調用CGContextSetRGBStrokeColor

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

在IDA中它看起來像這樣:

IDA輸出

我不明白很多事情:

  1. 0x3F800000如何與數字1相關? 我認為它是一個參考,但我沒有得到它所指的。
  2. 為什么MOVS被調用三次而不是四次(因為有四個參數)?
  3. 是R0,R1,R2等CPU寄存器嗎?
  4. 有人可以解釋這些:

一些文字行http://a.imageshack.us/img836/4018/gah.png

該文件是一個框架 (因此是一個Mach-O文件)。 該功能來自CoreGraphics。

0x3F800000如何與數字1相關? 我認為它是一個參考,但我沒有得到它所指的。

在IEEE單精度表示中,0x3F800000是1.0。 您可以右鍵單擊該0x3F800000並選擇浮點表示將其轉換為1.0。

為什么MOVS被調用三次而不是四次(因為有四個參數)?

在標准的ARM調用約定中,前4個參數分別存儲在R0到R3中。 ldr r1, =0x3f800000指令已存儲第二個參數。

是R0,R1,R2等CPU寄存器嗎?

是。

有人可以解釋這些:

請不要拆分非連續指令,因為第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

將1.0放在第5個參數上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM