2017-10-18 331 views
0

我想獲得一個調用方法的參數值:如何簡化存儲器讀取,如果我知道註冊的名字

@selector(processEditingForTextStorage:edited:range:changeInLength:invalidatedRange:) 

我知道價值是如何存儲:

  • $ RDX - 第一個參數
  • $ RCX - 第二個參數
  • $ R8 - 第三個參數(NSRange.location 8個字節)
  • $ R9 - 第三個參數(NSR ange.length 8個字節)
  • $ RBP + 0×10 - 第四個參數(NSUInteger 8個字節)
  • $ RBP +爲0x18 - 第五個參數(NSRange.location 8個字節)
  • $ RBP + 0×20 - 第五個參數(NSRange.length 8個字節)

這是正確的嗎?

第二個問題是有更簡單的方法如何打印NSRange如果我知道整數存儲在哪裏?像 「PO *(NSUInteger *)($ RBP + 0×20)」

我得到錯誤的:需要

(lldb) po *(NSRange *)($rbp+0x18) 
error: incomplete type 'NSRange' (aka '_NSRange') where a complete type is required 
forward declaration of '_NSRange' 

(lldb) memory read --size 8 --format x --count 1 ($rbp+0x20) 
0x7fff5e348660: 0x0000000000000008 
(lldb) memory read --size 8 --format x --count 1 ($rbp+0x18) 
0x7fff5e348658: 0x000000000000000a 
(lldb) memory read --size 8 --format x --count 1 ($rsp+0x8) 
0x7fff5e348438: 0x000000000000000a 
(lldb) memory read --size 8 --format x --count 1 ($rsp+0x10) 
0x7fff5e348440: 0x0000000000000008 
+0

「PO *(NSRange *)($ RBP +爲0x18)」 - 工程XCode中8.3.3的罰款。 Xcode 9測試版不喜歡它。 –

回答

1

有許多命令模仿的縮寫GDB的命令。其中之一是x(用於「eXamine內存」),它是「內存讀取」的縮寫。您可以添加斜槓和格式說明符以使用特定的格式。例如x/xg格式化十六進制的8字節值。這個論點是一個表達地址來檢查。

所以:

x/xg $rsp+0x10 
+0

作品!謝謝.. –

+0

調用參數的任何輸入? –

+0

對不起,我不明白這個問題。你的意思是你對各種論點有正確的表達嗎?是的,我相信這是正確的。 –

相關問題