欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS Xcode匯編模式切換的方法介紹

 更新時(shí)間:2018年06月16日 09:21:13   作者:石虎132  
這篇文章主要給大家介紹了關(guān)于iOS Xcode匯編模式切換的相關(guān)資料,文中通過圖文介紹的非常非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、概念

 1.匯編指令 : 模擬器上運(yùn)行的是Intel指令,而真機(jī)上運(yùn)行的是arm指令,

 2.每條匯編指令的格式總是由: 操作碼, 操作數(shù)1,操作數(shù)2,操作數(shù)3組成。 操作數(shù)要么就是常數(shù),要么就是寄存儲器,要么就是內(nèi)存地址。你所看到的操作數(shù)中的RAX,RSI,RDI,R0,R1... 這些都是CPU中的寄存器(關(guān)于寄存器部分我將在下一篇文章中具體介紹)。而且在XCODE的左下角部分我們可以查看當(dāng)前CPU中的所有寄存器的值,你可以打印并修改他們。

  每個(gè)函數(shù)方法的第一個(gè)地址,就是這個(gè)函數(shù)的入口地址,也就是說我們進(jìn)行函數(shù)調(diào)用時(shí),實(shí)際上是讓CPU跳轉(zhuǎn)到這個(gè)地址并執(zhí)行,更加具體的就是將ip/pc寄存器的值設(shè)置為這個(gè)函數(shù)的入口地址。 對于OC類中的方法來說方法入口地址其實(shí)就是這個(gè)方法的IMP。

 3.斷點(diǎn) :也稱中斷

  一般情況下CPU總是按照順序依次執(zhí)行指令并完成任務(wù),當(dāng)正在執(zhí)行某個(gè)任務(wù)時(shí)如果遇到了特殊事件或者更高優(yōu)先級的任務(wù)時(shí)就需要打斷現(xiàn)有執(zhí)行的代碼并去執(zhí)行優(yōu)先級更高的代碼,這種機(jī)制就是中斷。

 3.1 中斷:分硬中斷和軟中斷

       中斷有因?yàn)橥獠坑布O(shè)備事件而產(chǎn)生的硬中斷, 同時(shí)CPU也提供一個(gè)軟中斷指令。當(dāng)在代碼里面執(zhí)行一條軟終端指令時(shí),程序就會暫停運(yùn)行,同時(shí)CPU把操作權(quán)限提交給操作系統(tǒng)來執(zhí)行中斷處理程序。

 4.斷點(diǎn)的實(shí)現(xiàn)原理

   當(dāng)我們在程序某處設(shè)置了斷點(diǎn)或者某個(gè)指令處設(shè)置斷點(diǎn)時(shí),系統(tǒng)會將斷點(diǎn)處的指令保存到一個(gè)臨時(shí)的斷點(diǎn)列表中,同時(shí)將斷點(diǎn)處的指令替換為軟中斷指令,這樣當(dāng)程序運(yùn)行到斷點(diǎn)處時(shí)因?yàn)閳?zhí)行的其實(shí)是軟中斷指令,而導(dǎo)致系統(tǒng)調(diào)用的發(fā)生,并執(zhí)行軟中斷處理程序,軟中斷處理程序等待用戶處理斷點(diǎn)處的操作,比如當(dāng)用戶按下的是鍵盤上的Ctrl + F7時(shí),軟中斷處理程序就會把保存在臨時(shí)斷點(diǎn)列表中真實(shí)斷點(diǎn)處的指令恢復(fù)到指定的內(nèi)存,同時(shí)把下次要執(zhí)行的指令改為真實(shí)的指令,然后再次執(zhí)行真實(shí)的指令,這樣就完成了斷點(diǎn)處指令的繼續(xù)執(zhí)行。

 5.斷點(diǎn)的理論

  調(diào)試寄存器(DRx)的用處:

  1.設(shè)置發(fā)生斷點(diǎn)的地址(線性地址)

  2.設(shè)置斷點(diǎn)的長度(1,2,4個(gè)字節(jié),但是執(zhí)行斷點(diǎn)只能是1)

  3.設(shè)置在調(diào)試異常產(chǎn)生的地址執(zhí)行的操作

  4.設(shè)置斷點(diǎn)是否可用

  5.在調(diào)試異常產(chǎn)生時(shí),調(diào)試條件是否是可用

Intel80386以上的CPU提供了調(diào)試寄存器以用于軟件調(diào)試。386和486包括6個(gè)調(diào)試寄存器:Dr0,Dr1,Dr2,Dr3,Dr6和Dr7。這些寄存器全是32位,

 如下圖所示:

 只要能使用Drx的斷點(diǎn)功能就可以配合SEH、調(diào)試API進(jìn)行一些反跟蹤等,具體怎么用,取決于你自己了。

M_LE                         EQU01SHL08局部斷點(diǎn)精確相符M_GE

EQU M_LE     SHL01全局?jǐn)帱c(diǎn)精確相符;DRX accessM_GD

EQU M_BD              drx保護(hù)位置一即使在ring0也產(chǎn)生int1

如圖:

總結(jié): 調(diào)試斷點(diǎn)是通過調(diào)試寄存器實(shí)現(xiàn)的。

二、匯編模式下命令

 1.你只需要在XCODE的菜單:Debug -> Breakpoints -> Create Symbolic Breakpoint 或者快捷鍵:option + command + \ 來建立符號斷點(diǎn):

圖1:

圖2:

 2.* 匯編模式下

  fn + control + F7 :  指令單步執(zhí)行,當(dāng)遇到函數(shù)調(diào)用時(shí)會跳入函數(shù)內(nèi)部。

  fn + control + F6:   指令單獨(dú)執(zhí)行,當(dāng)遇到函數(shù)調(diào)用時(shí)不會跳入函數(shù)內(nèi)部。

 3.* 多線程之間的切換:

  control + shift + F7:  切換到當(dāng)前線程,并執(zhí)行單步指令。

  control  + shift + F6:  切換到當(dāng)前線程,并跳轉(zhuǎn)到函數(shù)調(diào)用的者的下一條指令。 

 4.* lldb命令行

expr   變量|表達(dá)式//顯示變量或者表達(dá)式的值。

expr -f h --  變量|表達(dá)式 //以16進(jìn)制格式顯示變量或表達(dá)式的內(nèi)容

expr -f b --  變量|表達(dá)式//以二進(jìn)制格式顯示變量或者表達(dá)式的內(nèi)容。

expr -o --  oc對象 //等價(jià)于po  oc對象

   expr -P  3 -- oc對象//上面命令的加強(qiáng)版本,他還會顯示出對象內(nèi)數(shù)據(jù)成員的結(jié)構(gòu),具體的P后面的數(shù)字就是你要想顯示的層次。

expr my_struct->a = my_array[3]//給my_struct的a成員賦值。

expr (char*)_cmd//顯示某個(gè)oc方法的方法名。

expr (IMP)[self methodForSelector:_cmd]//執(zhí)行某個(gè)方法調(diào)用.

圖3:

三、查看內(nèi)存地址

 1.Debug -> Debug Workflow -> View Memory 或者通過快捷鍵:shift+command + m 來調(diào)用內(nèi)存查看界面:

圖4:

圖5:

注意一點(diǎn)的是: 因?yàn)閮?nèi)存地址是從低位按字節(jié)依次排列而來,所以對于比如int類型的值的讀取我們就要從高位到低位開始讀取。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • iOS通過block在兩個(gè)頁面間傳值的方法

    iOS通過block在兩個(gè)頁面間傳值的方法

    不知道大家有沒有發(fā)現(xiàn),在實(shí)際開發(fā)中使用block的地方特別多,block比delegate和notification有著更簡潔的優(yōu)勢,下面這篇文章我們來簡單了解一下block在兩個(gè)頁面之間的傳值。有需要的朋友們可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11
  • iOS統(tǒng)計(jì)工程里所有大于2000行代碼的文件方法

    iOS統(tǒng)計(jì)工程里所有大于2000行代碼的文件方法

    下面小編就為大家分享一篇iOS統(tǒng)計(jì)工程里所有大于2000行代碼的文件方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • IOS開發(fā)實(shí)現(xiàn)手機(jī)震動的提示實(shí)例代碼

    IOS開發(fā)實(shí)現(xiàn)手機(jī)震動的提示實(shí)例代碼

    這篇文章主要介紹了IOS開發(fā)實(shí)現(xiàn)手機(jī)震動的提示實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • iOS開發(fā)支付寶支付成功返回字符串的處理操作

    iOS開發(fā)支付寶支付成功返回字符串的處理操作

    很多朋友在做ios開發(fā)項(xiàng)目時(shí),遇到支付寶支付成功返回字符串的處理操作不知道該怎么辦,今天小編給大家分享實(shí)例代碼,需要的朋友參考下
    2017-02-02
  • iOS tableView實(shí)現(xiàn)頂部圖片拉伸效果

    iOS tableView實(shí)現(xiàn)頂部圖片拉伸效果

    這篇文章主要為大家詳細(xì)介紹了iOS tableView實(shí)現(xiàn)頂部圖片拉伸效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • iOS App中調(diào)用相冊中圖片及獲取最近的一張圖片的方法

    iOS App中調(diào)用相冊中圖片及獲取最近的一張圖片的方法

    這篇文章主要介紹了iOS App中調(diào)用相冊中圖片及獲取最近的一張圖片的方法,示例代碼為傳統(tǒng)的Objective-C語言,需要的朋友可以參考下
    2016-03-03
  • 簡單談?wù)刢/c++中#import、#include和@class的區(qū)別

    簡單談?wù)刢/c++中#import、#include和@class的區(qū)別

    對于#import,我想做過iOS開發(fā)的人應(yīng)該都不陌生。在開發(fā)過程中,當(dāng)我們需要聲明某一個(gè)類時(shí),都需要去引用。而#imclude的話,在我們學(xué)習(xí)C時(shí)就已經(jīng)知道了,他的作用也是引用聲明的意思。在表面上他們的作用似乎都是一樣的。但是在具體功能實(shí)現(xiàn)方式上,還是有著很大的區(qū)別。
    2018-01-01
  • ARM匯編逆向iOS 實(shí)戰(zhàn)

    ARM匯編逆向iOS 實(shí)戰(zhàn)

    本文給大家通過一些簡單的實(shí)戰(zhàn)來講解使用ARM匯編進(jìn)行IOS逆向工程的方法,十分的實(shí)用,有需要的小伙伴可以參考下
    2015-11-11
  • iOS捕捉截屏事件并展示截圖效果

    iOS捕捉截屏事件并展示截圖效果

    這篇文章主要為大家詳細(xì)介紹了iOS捕捉截屏事件并展示截圖效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • IOS開發(fā)自定義Button的外觀和交互行為示例詳解

    IOS開發(fā)自定義Button的外觀和交互行為示例詳解

    這篇文章主要為大家介紹了IOS開發(fā)自定義Button的外觀和交互行為示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02

最新評論