0

給出以下:如何通過C++代碼低級別調試COM DLL(Firefox插件)方法而無需調試信息?

  • 一些舊Firefox插件的32位DLL代碼文件(即其他類型庫,XSD和XSL條目中含有DLL),沒有源代碼或調試信息,最初編碼在C++和與Visual Studio編譯,
  • 的名稱和一個導出的功能/方法的參數在該DLL(Firefox的插件的功能,在JS代碼accessable),
  • 的Visual Studio社區2013在Windows 7,
  • 運行
  • C++開發經驗,但不適用於COM或Firefox,
  • 經驗與調試英特爾彙編代碼,
  • 代碼許可證,不禁止拆卸DLL,

我想這樣做:加載DLL到一些C++代碼,並在CPU層面步入函數的代碼來找出它究竟做了什麼。

你能給我一些關於從哪裏開始以及如何做到這一點的提示嗎?我想這個DLL可能需要一些Firefox特定的初始化,然後才能調用我想要調試的函數。這可以通過Firefox SDK來完成嗎?沒有DLL的源代碼和調試信息?或者我可以成功地「裸體」加載DLL,找到 - 相當簡單的函數的入口點(如何?)並調用它?

感謝您的任何提示。

+0

沒有源代碼將有限制,如果您調試dll文件只是用PDB文件,即使你也可以得到一些調試信息:https://www.codeproject.com/questions/287477/debug-the-reference-dll-without-source -code-in-sol和https://msdn.microsoft.com/en-us/library/ms241613.aspx?f=255&MSPPError=-2147217396 –

+0

有沒有更新?您能否讓我知道關於這個問題的最新信息? –

+0

正如我上面所寫,沒有可用於DLL的調試信息(例如PDB文件)。只是從DLL直接導出的符號表等。 – following

回答

0

如果沒有pdb文件或源代碼,您很難調試dll文件,因爲調試器從PDB文件加載調試信息並使用它來定位符號或與程序源代碼的當前執行狀態相關聯。 Visual Studio使用PDB文件作爲其主要文件格式,用於在調試期間調試信息。如果沒有這些文件,則無法調試該庫。

更新:

我們正在使用的LoadLibrary()函數動態加載一個dll到一個項目,但如果你想踏入你的DLL文件,它真的需要PDB文件。一個簡單的示例是,您可以創建一個pdb文件並將其放置在一個簡單的自定義dll庫項目所在的文件夾中。我認爲Visual Studio會自動搜索目錄並加載它們,您可以在調試模塊窗口中找到這些信息。

下面的情況是不一樣的問題,因爲你的,但它也分享我們,它會載入PDB文件,如果DLL文件確實是由一個項目/過程被稱爲:

Does winbase::LoadLibrary() load .pdbs?

+0

重定位信息以及入口點符號不在PDB中,而是在DLL中(否則DLL根本不能使用!Windows需要這兩個信息才能運行DLL代碼)。它可以在沒有PDB的情況下低級別調試任何DLL文件 - 看到我上面的最後一條評論 - ,我可以用一個「普通的DLL」來完成,但我不知道如何使用COM DLL來完成它的細節,這就是我的問題在於 – following

+0

@ following,我只是在我以前的答案中提供了一些信息,但是如果你真的想進入dll文件,它需要pdb文件。 –

+0

在反彙編視圖中可以插入任何代碼,沒有任何PDB文件。 – following