爲noob錯誤提前道歉。這是我的第一個問題。首先,一些背景:(Dependency Walker)在功能上缺少顯式類型
我想爲程序創建一個模塊,使用依賴關係walker在.dll中查找C++函數,但是我沒有lib或任何源代碼。您還可以假設我無法獲得原始開發人員的支持。基本上,我檢查了另一個訪問它的文件,看看最低功能是如何工作的。下面是輸出的未修飾名稱的示例:
void foo::bar::baz(float)
float foo::bar::qux(void)
foo::bar::bar(void)
class foo::bar & foo::bar::operator=(class foo::bar const &)
上面兩個函數顯然會使用float或void並返回float或void。我有類似的功能使用類似的工作:
HINSTANCE THEDLL = LoadLibrary("C:\\dllFolder\\theDll.dll");
typedef float (*quxType)(void);
quxType qux = (quxType)GetProcAddress(THEDLL, "quxMangledName");
所以這些都不是問題。
現在,列表中的第三個看起來像另一個函數,它採用void,但它沒有明確的返回類型。這是否意味着我應該爲它使用隱式類型,它是無效的,還是它不是一個真正的函數?如果不是,那是什麼?
我不知道如何處理第四個。它甚至可以處理沒有關聯的.h文件?
我環顧四周,但我找不到任何有關顯示返回類型的正常函數時該怎麼辦的信息。儘管使用基本上相同的代碼,我用一個類似的.dll函數工作,但當我嘗試在這裏使用函數#2(我真的只需要函數#2)時,我不斷遇到訪問衝突崩潰。所以我猜測.dll需要更多的信息或需要首先初始化,這就是爲什麼我對列表中的其他人感興趣。
我意識到這是一個複雜的問題,因此可能不會有一個「正確的答案」解決方案來讓它工作,但是如果我做出任何明顯的錯誤,或者如果有任何關於如何攻擊的一般性建議問題(甚至是依賴walker的替代品),請告訴我。
好吧,謝謝。這聽起來像是問題。我猜Dependency Walker文檔只是希望用戶更熟悉一般的C++。我將深入挖掘函數列表,看看有沒有工廠函數。 (另外,我試圖投票,但我的聲望太低。) –
@RainbowDash,我添加了一個關於如何僅用LoadLibary和GetProcAddress調用構造函數的鏈接。沒關係的投票:) – fxam
這是爲了避免像「謝謝」這樣的評論,但第二個鏈接完全是問題的解決方案。花了這麼多小時的時間試圖找出如何使其工作,崩潰後崩潰,想知道是否有可能......然後基本上只是複製該博客的例子,並讓它在第一次完美的工作......言語無法表達這種感覺。 –