INT 3 中斷


地址:http://blog.sina.com.cn/s/blog_495c65790100dpgv.html

int 3機器碼0cch,是無數人的最愛,你不見VC++不管是鏈接還是初始化,都用這個 0CCh來填,你不見所有運行在ring3的debug都使用這個0cc來插入你想中斷調試的位置,以至在不去掉斷點的情況下寫盤,在你的代碼中會發現這個莫名其妙的0CCh。
int 3不過是一個軟件斷點中斷,你自己就可以任意修改這個中斷,在anti-debug中,你可以通過修改這個中斷給調試者帶來巨大的驚喜,如果你能更深入一步的瞭解int 3的機制,你甚至可以指揮deubg運行,即別人調試你的程序,單步往前走,你可以讓他按一個單步執行鍵後倒退幾步,哈哈(這些都是善意的,千萬不要學將那個倒退的指令改成將別人硬盤的啓動分區給刪除了,將別人的文件分配表給刪除了,或將人家硬盤給硬格式化了)。
int 3只不過是一個軟件調試中斷,通過他,你可以進入ring0,那個許多人都想進入的神祕世界。
int 3只不過是一個簡單的中斷,利用他,你可以完成你許多過去不敢想象的事,只要你敢去嘗試。

 

 

int3是留給調試工具使用的中斷調試工具運行後會替換int3的向量,使得中斷方式後執行自己的代碼。在單步(例如Debug中的命令p)調試程序時,調試工具會將要執行代碼的下一條指令改成int 3,這樣執行完當前這行代碼後就會執行調試工具的代碼,而不會繼續執行,從而實現單步調試。一些軟件爲了阻礙被人破解其程序,會估計使用int3,這樣一來,利用int3的調試工具就無法正常調試他們的程序了。

 

嵌入斷點中斷INT3

VC中嵌入斷點中斷的HelloWorld程序:

#include <iostream>

int main(INT argc,char*argv[])

{

     _asm INT 3; //調用斷點中斷

   cout << "Hello world!" << endl;

}

<編譯後程序將停在INT3這個位置>

彙編中嵌入斷點中斷的HelloWorld程序



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章