ASM 板


LINE

看板 ASM  RSS
※ 引述《suhorng ( )》之銘言: : int $3 的 op code 是 0xCC : 但我用 0xCD 0x03 去跑的時候,在 OllyDbg 下正常,在 debug (16bit) 下就出問題了? : 這讓我很疑惑,到底是 debug 的bug,還是跟 32-bit, 16-bit 有關? : 附上 debug 的測試結果: : - : Microsoft Windows [???? 6.0.6000] : Copyright (c) 2006 Microsoft Corporation. All rights reserved. : C:\>debug : -e 100 : 179E:0100 00.cd 00.03 00.b8 00.00 00.4c 00.cd 00.21 : -u 100 105 : 179E:0100 CD03 INT 03 : 179E:0102 B8004C MOV AX,4C00 : 179E:0105 CD21 INT 21 : -r : AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 : DS=179E ES=179E SS=179E CS=179E IP=0100 NV UP EI PL NZ NA PO NC : 179E:0100 CD03 INT 03 : -p : AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 : DS=179E ES=179E SS=179E CS=179E IP=0101 NV UP EI PL NZ NA PO NC : 179E:0101 03B8004C ADD DI,[BX+SI+4C00] : DS:4C00=0000 : - : 但是我用 : int main() { : __asm(".byte 0xCD, 0x03"); : return 0; : } : 在 OllyDbg 下測試就正常… 這個不是bug,而是設計上的選擇. x86在interrupt發生時,會把下一個指令的地址與flag放進stack,並將IP改為ISR的位置. 一般ISR不需要知道是哪個指令或原因呼叫它,只需執行完呼叫IRET就回覆原指令流程. 而INT 3的ISR也是一樣, 當ISR執行起來時, 它也只能拿到呼叫它的那個指令的下一個指令 的位置. 而DEBUG需要知道呼叫它的那個指令位置, 而且要把從那裡開始的指令反組譯出來 . 而DEBUG的設計者假設, INT 3 只會由指令碼CC的指令所呼叫, 所以它就直接把stack上 的地址減1之後,開始反組譯. 當然遇到 CD 03 時就會從 03那個指令開始反組譯, 而03開 頭的指令是ADD, 這就是你例子裡ADD DI,[BX+SI+4C00]的由來了. 而OllyDbg是32Bit的程式, 它認為執行它的機器應該夠快, 記憶體應該夠多, 所以它的設 計者決定, 在遇到 INT 3時, ISR會檢查它到底是由CC觸發的還是由CD 03所觸發的, 所以 它能正確的處理CD 03觸發的interrupt. 這跟32bit還是16bit是沒有關係的,只是設計時的選擇,不過別抱怨,不是DEBUG.COM的作者 不好,而是他的設計選擇, 當年我還在PC XT上執行DEBUG.COM這個程式時, 我可是非常願 意犧牲這個少見的特例來加快它的執行速度並減少記憶體消耗量的. 也許DEBUG.COM的作者 的想法也跟我一樣. -- Do not depend on others without effort... 當我年輕時,請教別人問題時常聽到上面那句話. 當時心裏偶而會有些小小抱怨. 當時間過去,我偶而會想到上面那句話, 心中十分感謝當初告訴我那句話的人. 當發現問題時,最有價值的不是問題的答案, 而是找到解決的方向,並在努力的過程裡具備解決問題的能力. --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 221.169.217.133
1F:推 suhorng:感謝您的回答 <(_ _)> 07/16 14:03
2F:推 jeunder:我覺得你想太多了. 這就是 bug, 和 16/32 bits 或 CPU 07/21 23:34
3F:→ jeunder:速度快慢, 記憶體大小無關 ~ 07/21 23:35
4F:→ jeunder:還說到 "設計上的選擇", 就真的是 "想太多了" ~ 07/21 23:35







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP