⑴ od是補丁嗎
od是補丁。od是內嵌補丁的核心是,在沒有代碼處程序只是為了填滿內存寫上代碼一般是賦值,利用程序跳出再跳回去實現,寫的時候與源程序保持一點距離,優勢解決在程序上直接寫代碼後面代碼被覆蓋的情況,OD調試技巧經驗。
內嵌補丁的特點
判斷跳轉,不等於跳轉,有時間限制在killTimer下斷點,程序用switch語句判斷輸入是否正確,跳出switch語句,ResettoolbarsSetting意味著重新建立窗口,跳出循環,vc程序初始是pushebp,利用堆棧搜索破解,記錄一個調試,利用堆棧找到dialog彈窗。
內嵌補丁,將循環次數寫在PE文件的數據區,利用nonawrite插件寫匯編指令跳出來再跳回去,dialogbo模態函數createdialo非模態函數,這兩個函數都是從後往前執行,所以執行句柄是最後一步操作,這就可以從後往前找到彈窗函數。
⑵ 怎麼用od調試一個多線程的程序
在 OD 里調試則不行,只要被斷,只能有一個線程活動,其他的會被掛起,這本來是 OD 的弱點,對付不了多線程 。
od 可以單獨掛起線程的, 可以單獨讓一個run 一下, 然後停下, 調試另外一個, 其實也不錯, 單cpu 也就是這么工作的. 要求不高的時序模擬可以了.
⑶ 如何用OD調試windows服務程序
第一方法:
這種方法其實說起來不叫調試,也是一種笨辦法,就是用MessageBox把一些程序的中間信息輸出來,方便你找出程序是在哪個地方出問題了,你也可以在try catch中使用,用MessageBox把異常彈出來,這種方法也比較直觀。可惜,實現起來也有問題。我們首先要添加using System.Windows.Forms;的引用,然後加上一行代碼MessageBox.Show(ex.ToString(), "Error");本以為這樣說行了,可是把服務重新編譯生成,並安裝啟動後,它並沒有彈出框來。百思不得其解。幸好,在服務的程序裡面,啟用了系統的日誌,它會把相關的異常記錄到系統日誌中去,在「計算機管理」的「事件查看器」裡面可以找到。果然發現了一個,
顯示的信息是
「當應用程序不是以 UserInteractive 模式運行時顯示模式對話框或窗體是無效操作。請指定 ServiceNotification 或 DefaultDesktopOnly 樣式,以顯示服務應用程序發出的通知。」
直接網路,找到了一個答案,原來是調用MessageBox時,還需要設置它的MessageBoxOptions屬性為DefaultDesktopOnly。修改如下:
MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);
然後再次重新編譯,安裝並啟動,OK,順利的彈出了錯誤的信息。
第二種方法:
第二種方法就是真正的調試,其實Windows服務還是可以調試的,應該說任何一種類型的程序都應該能調試,別人在開發編譯器的時候就人考慮到的。下面來看具體的方法。
我們知道,任何一個程序都有一個對應的進程,如果你的Windows服務啟動後,也會有一個對應的進程。通過任務管理器,就能看到。
我們可以通過VS編譯器裡面,提供的「附加到進程」這個功能來進行調試。首先你打開你的Windows服務源程序,在裡面設置一個斷點,例如在OnStart方法中protected override void OnStart(string[] args){}中,然後把你的服務啟動,啟動過後,在VS的「調試」一欄中找到「附加到進程」
在進程列表裡面找到你的進程,
如果沒有的話,就把左下角的「顯示所有用戶的進程」前面的勾選中,然後你就可以找到你的Windows服務的進程了,然後點擊確定即可。
點擊確定後,可能你等了半天,也沒看見它命中斷點。哈哈,不要急,前面說漏了一點,我們是先啟動的服務,然後再附加的進程,因為服務一啟動,就會執行OnStart方法,這時,我們還沒有把這個服務的進程附加到VS中去呢?所以在OnStart方法中設置的這個斷點肯定不會命中。所以我們需要想個辦法,也就是加一個定時器,我們在OnStart方法中啟動這個定時器,然後設置這個定時器的時間間隔為1分鍾,然後在這個定時器的事件中去設置一個斷點。這樣把服務重新生成,安裝並啟動後,把這個進程附加到VS中去,1分鍾過後,你就會看到,它命中了斷點。不過有一個前提就是,你必須在1分鍾內把這個進程附加到VS中去,否則的話,它還是命中不了。
如果還有問題的話,就檢查一下,看你的Windows服務是不是在Release模式下生成的,如果是的話,要把它改成在Debug模式下生成。