補丁與插件

  1. DLL怎么導(dǎo)出函數(shù)?
    1.1 使用關(guān)鍵字_decslpec(dllexport)
    1.2 使用def文件導(dǎo)出

  2. 在函數(shù)前加extern "C" 起到什么作用?
    2.1 禁用c++的名稱粉碎機制

  3. 一個軟件,在不修改已有代碼的前提下,如何加載新的DLL?
    3.1 軟件在啟動時, 遍歷指定文件夾找到所有的dll,并加載它們。

  1. 一個軟件,在不修改已有代碼的前提下,擴展新的功能
    4.1 以插件的形式擴展新功能
    4.1.1 調(diào)用軟件帶有的功能
    4.1.2 提供導(dǎo)出函數(shù)供軟件調(diào)用
    4.2 以補丁的形式。
    4.3 軟件加載DLL時,如何識別DLL是為本軟件編寫的插件?
    4.3.1 先加載DLL(不進(jìn)行判斷)
    4.3.2 獲取DLL指定的導(dǎo)出函數(shù)(如果獲取失敗,就可以說明dll不是本軟件的插件)
    4.3.3 調(diào)用dll的導(dǎo)出函數(shù), 判斷導(dǎo)出函數(shù)的返回值是否符合要求(要求可以是一個版本號,或者是TRUE和FALSE)。
    4.4 當(dāng)軟件想要在特定場景下調(diào)用DLL的導(dǎo)出函數(shù)時,也會動態(tài)獲取dll的導(dǎo)出函數(shù),如果能獲取到就調(diào)用,獲取不到就不調(diào)用來的.
    4.4.1 當(dāng)軟件希望它的一個功能能夠被插件所擴展的時候,就可以在實現(xiàn)這個功能的時候調(diào)用dll的特定導(dǎo)出函數(shù)。
  1. 當(dāng)一個加載DLL的exe不是自己編寫的,但DLL是自己編寫的,怎么調(diào)試DLL?
    5.1 不直接調(diào)試dll,而是調(diào)試加載dll的exe
    5.2 在vs的項目屬性->調(diào)試->命令->設(shè)置為exe的路徑
    5.3 在vs的項目屬性->調(diào)試->工作目錄->設(shè)置為exe所在目錄

OD插件的編寫:

  1. 導(dǎo)入頭文件和庫文件
  2. 導(dǎo)出一個必選的函數(shù): ODBG2_Pluginquery

OD的反調(diào)試插件:

  1. 導(dǎo)出一個必選的函數(shù): ODBG2_Pluginquery
  2. 在被調(diào)試進(jìn)程被加載到OD的時候,獲取被調(diào)試進(jìn)程的PEB的地址
    然后將PEB.BeginDebug字段設(shè)置為0

x32dbg命令行顯示peb/teb數(shù)據(jù)的插件:

  1. 導(dǎo)出3個必選的函數(shù)
  2. 在插件初始化函數(shù)中注冊2個命令("pebaddr","tebaddr")
  3. 在命令的回調(diào)函數(shù)中獲取peb和teb的地址,并調(diào)用x32dbg的api將將內(nèi)存窗口轉(zhuǎn)到peb/teb所在的地址。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容