軟體斷點:
斷點異常(int 3) 屬於陷阱類異常,當cpu 產生異常時候,其程式指標是指向導致異常的下一條指令,但是我們觀察到的是
卻指向當前的導致異常的這條指令(想計算機組成原理的實驗 ip)
原因:在中斷到偵錯程式的時候,會把所有斷點位置恢復成原先的指令,再交給使用者
也就是dec ebx
2.當我們設定斷點的時候,偵錯程式會把這裡的本來指令的第乙個位元組儲存起來 然後寫入int3指令,因為int3為0xcc(11001100)乙個
位元組,所以設定和取消斷點時候也只需要儲存和恢復乙個位元組。
vc6把斷點的設定資訊(斷點所在的檔案和行位置)儲存在和專案檔案相同位置且相同主名稱的乙個.opt檔案中,但是他不會儲存
每個斷點處應該被int3指令替換掉的那個位元組
原因:1.替換是在啟動除錯和時候和除錯過程中動態執行的
2.我們可以在非除錯狀態下去注釋行設定斷點,它僅僅是記住該斷點的位置資訊,當真正除錯時候(即被除錯程式run起來),vc6才會取出opt檔案中的斷點記錄(我叫做靜態罷了,雖然不貼切),射到目標**的記憶體映像中,也就是儲存此位置的原來的指令的第乙個位元組,再替換為0xcc,這叫做落實斷點
3.斷點命中(應用程式除錯)執行例程函式
儲存當前上下文,暫存器內容
斷點指令我們在使用者模式下的程式**中,所以我們從使用者模式要到核心模式,斷點也是異常麼,所以流程為:
有異常的程序正在被除錯-->核心例程會把這個異常以除錯事件的形式分發給使用者模式的偵錯程式。(核心的除錯子系統函式會等待偵錯程式的恢復,收到回覆後,除錯子系統的函式會層層返回,最後返回到異常處理例程,異常處理例程執行中斷指令,讓被除錯的程式繼續執行)
4.恢復執行
第一次除錯返回後恢復之前的指令,那下次除錯呢,偵錯程式是利用單步執行標誌,即執行完後又再一次的下斷點到這
就可以多次在這裡中斷除錯
5.int3的特別用途
0xcc在漢語中是燙燙中,cc又是int 3的指令的機器碼,今天我才知道這不是偶然是編譯器故意的,
1,為了輔助除錯原來是編譯器在除錯版本時候會
用0xcc來填充剛剛分配好的緩衝區,這樣堆疊溢位的時候。直接到int 3指令中斷到偵錯程式
2.記憶體對齊(填充函式或者**段末尾的空閒區域)c3->ret
6.侷限性
framebuffer 一些基本知識
horizontal回掃和vertical回掃是crt引入的概念,電子束從左向右畫水平線,回到下一行行首繼續下一行掃瞄,直到螢幕最下一行,然後回到螢幕上方繼續下一幀掃瞄。水平回掃 電子束從上一行尾移動到下一行起始點需要的時間 幀回掃 電子束從螢幕下方移動到螢幕上方所需的時間 crt的重新整理屏率是怎...
tableviewcell的一些基本知識點
cpp view plain copy 無色 cell.selectionstyle uitableviewcellselectionstylenone 藍色 cell.selectionstyle uitableviewcellselectionstyleblue 灰色 cell.selectio...
Xcode斷點的一些黑魔法
編碼不能沒除錯,除錯不能沒斷點 break point xcode的斷點功能也是越來越強大。基本斷點 如下圖,這種是最常用的斷點,也是最容易設定。左鍵點選一下就可以設定。編輯斷點 斷點是可以編輯的。斷點有下面幾個屬性可以設定 condition 這裡可以輸入條件表示式,滿足條件的時候斷點就會生效。例...