地址: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的調試工具就無法正常調試他們的程序了。
VC中嵌入斷點中斷的HelloWorld程序: #include <iostream> int main(INT argc,char*argv[]) { _asm INT 3; //調用斷點中斷 cout << "Hello world!" << endl; } <編譯後程序將停在INT3這個位置> 彙編中嵌入斷點中斷的HelloWorld程序 |