在使用od(ollydbg)的過程中,我們可以使用斷點開進行反彙編**的暫停執行,通常在除錯自己**的時候我們會使用搜尋expresion
的方式來在特定**處下斷點,但是有時候我們成功在所謂有效的expression
處下了斷點之後執行**,**卻沒有暫停,直接執行到程式結束。這是為什麼呢。
注:expression在這裡表示乙個可以被od檢測到的函式
這是因為我們的**在編譯的過程中,由於
在我們的**編譯之後,可執行檔案並沒有呼叫我們認為程式會呼叫的函式。
例1
程式a.c
如下
#include
int a =1;
intmain
(void
)
使用mingw
編譯
g++ -o0 a.c -o a.exe
正確姿勢:在od
中你必須使用對應的字符集下的函式才能成功對messagebox
函式呼叫處下斷點,在gcc
、g++
中預設使用的是ascll
字符集,你必須在messageboxa
函式處下斷點才能成功暫停程式。
例2
程式b.c
如下:
#include
void
test()
intmain
(void
)
使用mingw
編譯
g++ -o0 b.c -o b.exe
正確姿勢:在編譯的過程中,雖然使用了-o0
停用編譯優化,但是由於printf
函式用的太簡單,編譯器還會有可能使用puts
函式替換printf
函式,此時在puts
函式處下斷點才可以正確中斷程式。 spring下quartz啟動兩次的問題
最近正在做的專案,測試的時候發現定時排程任務會執行兩次,於是乎查資料呀,都說是tomcat配置問題,哥改了還是不行,後來無奈使用了乙個網上說的方法,將job中的方法使用同步,通過乙個靜態變數進行控制,配置如下 dosend false dodelete false 0 0 0 0 3 job如下 p...
記一次5000併發的除錯過程
為了滿足招標和使用者的需要,希望公司的基礎架構能支援5000併發,特此進行驗證和除錯。向兄弟部門借了兩台伺服器 每台8核cpu,48g記憶體 在兩台伺服器上安裝虛擬化平台exsi,每台上安裝4個linux7.0虛擬機器,總共8個linux7.0虛擬機器 a伺服器上的四台虛擬機器 aa1,aa2,aa...
記一次 連線已重置 的除錯過程
專案是來自edusoho的開源版本,經一同事多次修改,接手時個人中心打不開,無修改密碼功能等等,一步步解決了 說說除錯了很久的 連線已重置 最初這個問題只在使用者的伺服器出現,遂開始了坑自己的過程,用二分法刪除 輸出變數來除錯,最終找到了乙個公共方法,裡面呼叫了乙個系統方法,然後進行不下去了,兩個方...