2012-09-05 66 views
0

我有四個功能一個DLL文件,我需要訪問四種功能,但他們沒有名字,只是入口點我知道。我必須弄清楚這四個功能的作用。 問題是,我如何在C#(.Net)中調用這些未知函數?我怎麼知道他們的參數和返回值是什麼? 該DLL是Sndvolsso.DLL。它的功能在互聯網上無處可用(除非你能找到它們)如果有人知道我可以用來讀取參數和返回值的工具,那將是非常有用的。閱讀的Dll參數

+1

你想做什麼?爲什麼使用該特定的DLL? –

+0

這應該是在操作系統級別控制聲音的DLL,以我的理解。我需要使用這個文件,因爲我試圖做一個自定義的Windows shell –

回答

2

如果你的DLL是unmanged: -

使用IDA

  1. 拆卸DLL和發現導出的函數。
  2. 雙擊該函數並將其聲明顯示在IDA中。

在IDA user32.dll中的MessageBoxA的例子: -

.text:77D6EA11 
.text:77D6EA11 ; int __stdcall MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) 
.text:77D6EA11  
+0

那麼如何將其導出到C#?我的看起來比你的例子更令人困惑 –

0

參數/類型/簽名信息不會存儲在非託管的DLL文件。您可以使用LoadLibraryGetProcAddress並使用序號來獲取每個導出函數的地址。但你得到的只是地址;你應該知道如何正確調用這些函數。

這將有助於你理解函數在二進制/機器代碼級別以及如何棧作品是如何工作的。

這裏是你的選擇:

  1. 正如你所說的,找到喜歡上網的外部源的信息。
  2. 如果你能找到PDB文件,這是調試信息文件,它是如何調試懂得位置在內存中的代碼行關聯起來。它將包含您要查找的所有元數據。但在你的情況下,我認爲你不能訪問這個。
  3. 如果您對彙編和理解二進制級別的可執行代碼感到滿意,請反彙編或調試DLL。看看它的期待,它如何使用堆棧。

否則,你將不得不妥協:

  1. 使用不同的庫。最實用,因爲說實話,如果你不知道什麼這個sndvolsso.dll,那麼,即使你得到它的「工作」,你將失去一次出現的任何問題。
  2. 僱用可以做到這一點的人。
  3. 只需編寫自己的代碼,而不是使用此代碼。

但細想起來,你的問題並沒有真正意義。如果你不知道這些功能是什麼,你怎麼知道你需要它們?

+0

這是在操作系統級別控制聲音的DLL,以我的理解。我需要使用這個文件,因爲我試圖製作一個自定義的Windows shell。那謝謝啦。 –