在Section 上下break point
Alt+M 開Section map 在code section 上 按F2 可以Set-break-on-access (一次性中斷點)
另一個Set memory breakpoint on access 則是 永久性中斷點, 不能用在DOS 上
對windows message 下中斷點
開windows 視窗 (View/windows) 對想中斷的物件(按鈕) 右鍵下 message break point on ClassProc 之後選 202 WM_LButtonUp
*如果有時候windows 視窗是空的 按右鍵選actualize 刷新*
取消中斷點
Alt+B 刪掉該中斷
Register 條件中斷點
想要中斷的點上按 Shift+F2 輸入條件式 eax==0400000 (也可以打command: bp <位置> eax==0400000)
Memory條件中斷點(指定function 參數值才break)
先設要設的中斷點 run第一次, 看到參數 stack, 如
ESP ==> > 00401321 /CALL to CreateFileA from Conditio.0040131F
ESP+4 > 004060E8 |FileName = "c:\1212.txt"
ESP+8 > 80000000 |Access = GENERIC_READ
ESP+C > 00000001 |ShareMode = FILE_SHARE_READ
ESP+10 > 00000000 |pSecurity = NULL
ESP+14 > 00000003 |Mode = OPEN_EXISTING
ESP+18 > 00000080 |Attributes = NORMAL
ESP+1C > 00000000 \hTemplateFile = NULL
上面相對Esp 設法是 在Addr 上按右鍵 : addr/ Related to ESP
然後就可以直接在function 上 按 shift+F2 條件打法是 [STRING [esp+4]]= “c:\\1212.txt” (注意是二個反斜線, 看來olly沒有處理escape 的問題
command 的話則是打 bp CreateFileA, [STRING [esp+4]]= "c\\1212.txt" (未試, 它怎麼知道要找kernalbase 還是kernel32裡的?)
STRING 是指 0 結尾的ASCII字串