史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 作業系統操作技術文件
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2003-09-30, 07:29 PM   #1
貝斯特 帥哥
長老會員
 
貝斯特 的頭像
榮譽勳章
UID - 90669
在線等級: 級別:1 | 在線時長:11小時 | 升級還需:1小時
註冊日期: 2003-08-06
住址: The Gates of Hell
文章: 1758
現金: 15064 金幣
資產: 5185909 金幣
預設 Windows未公開函數

在網站中有些範例是使用Windows未公開的函數,也許你會想這樣是否是正確的寫程式方法,也許Windows下一個版本也就不提供這些函數了,那時不就完蛋了嗎?其實微軟有許多程式都有使用到未公開的函數,如果你的程式掛了,Windows的這些程式也會完蛋,若能更容易的達成你所要的目標,用用無訪。
 但這些函數要如何尋找呢? 通常是用TDUMP等工具來取得,某個函式庫中所有的可用函數名稱 如這樣


--------------------------------------------------------------------------------
C:\WINDOWS\SYSTEM>TDUMP -ee shell32.dll
Turbo Dump Version 5.0.16.6 Copyright (c) 1988, 1999 Inprise Corporation
Display of File SHELL32.DLL

EXPORT ord:0022='CheckEscapesA' => 'jx?BR>EXPORT ord:0044='CheckEscapesW' => 'jx?BR>:
:
EXPORT ord:0274='SHFormatDrive' => '?U?BR>:
:
--------------------------------------------------------------------------------
其中SHFormatDrive在MSDN上並沒有紀錄 這就是個未公開函數
其中ord:0274就是這個函數所在的位置,實際上呼叫SHFormatDrive就是呼叫 Shell32.274 你可以試試以下例子 用相同的方式在User32.dll中可以得到
EXPORT ord:0439='MessageBoxA' => 'U?BR>因此MessageBoxA的ord=439 試試這兩種呼叫方法
--------------------------------------------------------------------------------
Private Declare Function MessageBox Lib "user32" Alias _
"MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, _
ByVal lpCaption As String, ByVal wType As Long) As Long
Private Declare Function MessageBoxH Lib "user32" Alias _
"#439" (ByVal hwnd As Long, ByVal lpText As String, _
ByVal lpCaption As String, ByVal wType As Long) As Long

Private Sub Command1_Click()
MessageBox Me.hwnd, "Hello", "這是一般呼叫", 0
MessageBoxH Me.hwnd, "Hello", "這是透過ord呼叫", 0
End Sub
--------------------------------------------------------------------------------
也許你會想,既然能透過名稱來呼叫,何必透過ord,碰巧的是有許多未公開函數也只能 找到ord而已,有的即使知道Ord也沒辦法呼叫,必須透過PE檔案格式,直接取得函數位址再呼叫,一般尋找未公開函數是從應用程式著手,比較有效率,不過最好是懂得Assembly,因為函數參數必須透過反組譯才能知道.
__________________

給自己看也給所有需要這些話鼓勵的人看!

認真不一定會得到美好的結果,但是不認真就一定沒有

想要有什麼結果,就秉持你的雙手
放手去做
總比什麼都沒付出最後失敗了才嘆氣來的好吧
沒努力的人.沒有資格說放棄
努力過的人.更要有勇氣繼續努力下去
貝斯特 目前離線  
送花文章: 1, 收花文章: 38 篇, 收花: 123 次
 



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 11:00 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1