iOS Xcode 的匯編模式切換

//聯(lián)系人:石虎 QQ:1224614774 昵稱:嗡嘛呢叭咪哄

????????? QQ群:807236138 ?群稱:iOS 技術(shù)交流學(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中的所有寄存器的值,你可以打印并修改他們跋炕。

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

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

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

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

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

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

? ?當(dāng)我們在程序某處設(shè)置了斷點(diǎn)或者某個指令處設(shè)置斷點(diǎn)時,系統(tǒng)會將斷點(diǎn)處的指令保存到一個臨時的斷點(diǎn)列表中上岗,同時將斷點(diǎn)處的指令替換為軟中斷指令福荸,這樣當(dāng)程序運(yùn)行到斷點(diǎn)處時因?yàn)閳?zhí)行的其實(shí)是軟中斷指令,而導(dǎo)致系統(tǒng)調(diào)用的發(fā)生肴掷,并執(zhí)行軟中斷處理程序敬锐,軟中斷處理程序等待用戶處理斷點(diǎn)處的操作,比如當(dāng)用戶按下的是鍵盤上的Ctrl + F7時呆瞻,軟中斷處理程序就會把保存在臨時斷點(diǎn)列表中真實(shí)斷點(diǎn)處的指令恢復(fù)到指定的內(nèi)存台夺,同時把下次要執(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個字節(jié)滚朵,但是執(zhí)行斷點(diǎn)只能是1)

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

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

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

Intel80386以上的CPU提供了調(diào)試寄存器以用于軟件調(diào)試。386和486包括6個調(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ù)內(nèi)部滴劲。

? fn +?control + F6: ? 指令單獨(dú)執(zhí)行,當(dāng)遇到函數(shù)調(diào)用時不會跳入函數(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對象?//等價于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//顯示某個oc方法的方法名。

expr (IMP)[self methodForSelector:_cmd]//執(zhí)行某個方法調(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類型的值的讀取我們就要從高位到低位開始讀取。

謝謝!!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谋梭,一起剝皮案震驚了整個濱河市信峻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瓮床,老刑警劉巖盹舞,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姨夹,死亡現(xiàn)場離奇詭異,居然都是意外死亡矾策,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門峭沦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贾虽,“玉大人,你說我怎么就攤上這事吼鱼∨罨恚” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵菇肃,是天一觀的道長地粪。 經(jīng)常有香客問我,道長琐谤,這世上最難降的妖魔是什么蟆技? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮斗忌,結(jié)果婚禮上质礼,老公的妹妹穿的比我還像新娘。我一直安慰自己织阳,他們只是感情好眶蕉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著唧躲,像睡著了一般造挽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弄痹,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天饭入,我揣著相機(jī)與錄音,去河邊找鬼肛真。 笑死圣拄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的毁欣。 我是一名探鬼主播庇谆,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼凭疮!你這毒婦竟也來了饭耳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤执解,失蹤者是張志新(化名)和其女友劉穎寞肖,沒想到半個月后纲酗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡新蟆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年觅赊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琼稻。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡吮螺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出帕翻,到底是詐尸還是另有隱情鸠补,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布嘀掸,位于F島的核電站紫岩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏睬塌。R本人自食惡果不足惜泉蝌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望揩晴。 院中可真熱鬧梨与,春花似錦、人聲如沸文狱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞄崇。三九已至荡灾,卻和暖如春师崎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工嗦锐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留济赎,地道東北人惊畏。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓扰法,卻偏偏與公主長得像,于是被迫代替她去往敵國和親衅鹿。 傳聞我的和親對象是個殘疾皇子撒踪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容