在我們選項這個函數後,右邊的訊息框中會出現 Number of arguments: 4(有四個參數)的字樣。OllyDbg 會根據函數尾部的RET 10語句來正確識別參數的數量。RET nnn
是使用PASCAL使用約定的函數的典型特徵。(參數被放壓入推疊中,第一個參數會被最後一個壓壓入推疊中,函數使用完畢後,參數會被遺棄)。大多數的 Windows API 函數都是
PASCAL形式的。
下一步,我們要設定棧中參數的個數。在這個例子中,不必做進行這個操作,因為OllyDbg已經知道了MessageBoxW函數的參數數量。但是,如果您願意的話,也可以按下左邊的複選框,改變成您認為合適的參數數量
現在填寫參數列表。這個對話視窗中支持至多10個參數. 參數可以是任何有效的陳述式,而不必使用暫存器。如果操作數指向了記憶體,則參數右邊的緩衝區視窗會顯示記憶體中的資料。Loaddll.exe 有10個大小為1K的緩衝區,這些緩衝區被標記為Arg1 .. Arg10,,您可以方便自由的使用它們。 另外,對話視窗還支持兩個偽變數:由loaddll.exe新增的父視窗關鍵句, 以及loaddll的實例關鍵句。為了方便您的使用,在您第一次使用使用輸出函數時,OllyDbg就已經將這兩個偽變數加到了歷史列表中去了。
MessageBoxW e函數需要4個參數:
?父視窗關鍵句。 這裡我們選項 ;handle of owner window. Here, we simply select ;
?在訊息框中UNICODE文本的位址。選項Arg2並按Enter鍵。緩衝區視窗會以16進制的格式顯現記憶體中的緩衝區。這個緩衝區啟始化全是0。點擊第一個字元,並按快捷鍵
Ctrl+E(另外, 也可以從表單中選項「二進制〔Binary〕|編輯〔Edit〕」)。這時會出現一個對話視窗,在對話視窗中按鍵輸入「Text in box」或者其他希望顯示的字串串;
?訊息框標題的UNICODE文本的位址。選項Arg3並在Unicode格式的記憶體中寫上「Box title」;
?訊息框的風格。使用常量MB_xxx進行組合.OllyDbg 可以識別這些常量。在這裡我們按鍵輸入:MB_OK|MB_ICONEXCLAMATION。
這裡不需要暫存器參數。
現在我們準備使用輸出函數。選項「在使用時隱藏〔Hide on call〕」意思是說,當函數執行時對話視窗將會從螢幕消失。當我們執行一個會執行很長時間的函數,或者設定了斷點的時候,這個選項非常的有用。您也可以手動關閉對話視窗。當函數執行完畢後,OllyDbg會重新自動開啟。「使用輸出函數」對話視窗。選項「在使用後暫停〔Pause after call〕」意思是說,在執行完函數後,loaddll將會被暫停。
按「使用〔Call〕按鈕」後,OllyDbg 會自動制作備份所有的記憶體、校驗、參數、暫存器等訊息。並隱藏對話視窗,然後使用 MessageBoxW 函數。和期望的一樣,訊息框在螢幕中出現了:
|