一、概念
1.匯編指令 : 模擬器上運行的是Intel指令,而真機上運行的是arm指令,
2.每條匯編指令的格式總是由: 操作碼, 操作數1,操作數2,操作數3組成。 操作數要么就是常數,要么就是寄存儲器,要么就是內存地址。你所看到的操作數中的RAX,RSI,RDI,R0,R1... 這些都是CPU中的寄存器(關于寄存器部分我將在下一篇文章中具體介紹)。而且在XCODE的左下角部分我們可以查看當前CPU中的所有寄存器的值,你可以打印并修改他們。
每個函數方法的第一個地址,就是這個函數的入口地址,也就是說我們進行函數調用時,實際上是讓CPU跳轉到這個地址并執行,更加具體的就是將ip/pc寄存器的值設置為這個函數的入口地址。 對于OC類中的方法來說方法入口地址其實就是這個方法的IMP。
3.斷點 :也稱中斷
一般情況下CPU總是按照順序依次執行指令并完成任務,當正在執行某個任務時如果遇到了特殊事件或者更高優先級的任務時就需要打斷現有執行的代碼并去執行優先級更高的代碼,這種機制就是中斷。
3.1 中斷:分硬中斷和軟中斷
中斷有因為外部硬件設備事件而產生的硬中斷, 同時CPU也提供一個軟中斷指令。當在代碼里面執行一條軟終端指令時,程序就會暫停運行,同時CPU把操作權限提交給操作系統來執行中斷處理程序。
4.斷點的實現原理
當我們在程序某處設置了斷點或者某個指令處設置斷點時,系統會將斷點處的指令保存到一個臨時的斷點列表中,同時將斷點處的指令替換為軟中斷指令,這樣當程序運行到斷點處時因為執行的其實是軟中斷指令,而導致系統調用的發生,并執行軟中斷處理程序,軟中斷處理程序等待用戶處理斷點處的操作,比如當用戶按下的是鍵盤上的Ctrl + F7時,軟中斷處理程序就會把保存在臨時斷點列表中真實斷點處的指令恢復到指定的內存,同時把下次要執行的指令改為真實的指令,然后再次執行真實的指令,這樣就完成了斷點處指令的繼續執行。
5.斷點的理論
調試寄存器(DRx)的用處:
1.設置發生斷點的地址(線性地址)
2.設置斷點的長度(1,2,4個字節,但是執行斷點只能是1)
3.設置在調試異常產生的地址執行的操作
4.設置斷點是否可用
5.在調試異常產生時,調試條件是否是可用
Intel80386以上的CPU提供了調試寄存器以用于軟件調試。386和486包括6個調試寄存器:Dr0,Dr1,Dr2,Dr3,Dr6和Dr7。這些寄存器全是32位,
如下圖所示:
只要能使用Drx的斷點功能就可以配合SEH、調試API進行一些反跟蹤等,具體怎么用,取決于你自己了。
M_LE EQU01SHL08局部斷點精確相符M_GE
EQU M_LE SHL01全局斷點精確相符;DRX accessM_GD
EQU M_BD drx保護位置一即使在ring0也產生int1
如圖:
總結: 調試斷點是通過調試寄存器實現的。
二、匯編模式下命令
1.你只需要在XCODE的菜單:Debug -> Breakpoints -> Create Symbolic Breakpoint 或者快捷鍵:option + command + / 來建立符號斷點:
圖1:
圖2:
2.* 匯編模式下
fn + control + F7 : 指令單步執行,當遇到函數調用時會跳入函數內部。
fn + control + F6: 指令單獨執行,當遇到函數調用時不會跳入函數內部。
3.* 多線程之間的切換:
control + shift + F7: 切換到當前線程,并執行單步指令。
control + shift + F6: 切換到當前線程,并跳轉到函數調用的者的下一條指令。
4.* lldb命令行
expr 變量|表達式//顯示變量或者表達式的值。
expr -f h -- 變量|表達式 //以16進制格式顯示變量或表達式的內容
expr -f b -- 變量|表達式//以二進制格式顯示變量或者表達式的內容。
expr -o -- oc對象 //等價于po oc對象
expr -P 3 -- oc對象//上面命令的加強版本,他還會顯示出對象內數據成員的結構,具體的P后面的數字就是你要想顯示的層次。
expr my_struct->a = my_array[3]//給my_struct的a成員賦值。
expr (char*)_cmd//顯示某個oc方法的方法名。
expr (IMP)[self methodForSelector:_cmd]//執行某個方法調用.
圖3:
三、查看內存地址
1.Debug -> Debug Workflow -> View Memory 或者通過快捷鍵:shift+command + m 來調用內存查看界面:
圖4:
圖5:
注意一點的是: 因為內存地址是從低位按字節依次排列而來,所以對于比如int類型的值的讀取我們就要從高位到低位開始讀取。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。
新聞熱點
疑難解答