推 purpose:plug-in 最常見就 dll 不是嗎 124.8.135.79 08/11 18:01
→ EdisonX:這方案最近面試的時候被打槍, Orz 180.177.76.161 08/11 18:12
推 purpose:那...如何打槍呢? 124.8.135.79 08/11 18:31
我補一下, 應該是可能我當下表達的不是很好,
dll 可能真的是一個答案, 我的回答讓人覺得「太龐統」,
但再深入的講我又講不出所以然, 拿 excel 來講好了,
我拿來做的話會把
Create(Get)Sheet、CreateButton、CreateMenu、SetCell、GetCell、GenerateImage
放在 dll, 之後別人要開發 plug-in 時可重覆調用這幾個 api,
但整體的流程、架構我又 沒辦法給出較完整的雛形 (憑感覺蠻重的),
另粗略在想, IPC 是不是也是一種作法 ?
或是可搞得像 vs 外掛 VAX , 使用 xml format 維護?
最後也不確定 dll 是否為一普遍方向,( 就是不知道合不合出題者的胃口),
被打槍大概就這樣。
這問題 猜 較偏向 open problem , 請版友詳答的話可能會浪費不少時間,
所以請教是否有些文章、網頁、書籍,或經驗可供分享,因這裡我沒實際開過後台。
謝謝 p 大的關注 :)
#########################
龐統
龐統*ㄆㄤˊ ㄊㄨㄥˇ***人名。(西元179~214)三國蜀襄陽人,字士元,德公之姪。
少時樸頓,未有識者,往見司馬徽,徽甚異之,稱為南州士之冠冕,由是漸顯。劉備召以
為治中從事,與諸葛亮並為軍師中郎將,佐劉備取蜀。後因圍雒縣,攻城時中流矢而卒,
時年三十六。
#########################
OllyDbg 的做法:
1. 主程式的執行檔 OllyDBG.EXE 本身也匯出內部函數,如:
_Getbreakpointtype
_Getbreakpointtypecount
_Getcputhreadid
看名字就知道這些函數的功能
2. 主程式啟動時,自動掃瞄子資料夾 plugin,以一個 xxx.dll 為外掛單位。
再循序呼叫每個外掛都有的匯出函數,如:
_ODBG_Plugininit
_ODBG_Pluginmenu
....
(外掛要匯出幾個函數是不一定的,有些軟體的外掛 DLL 是固定只有一個
_GetPluginObject 函數,從這函數來告知主程式該外掛執行動作的名稱,及位址。
3. 官方提供外掛開發 SDK 給有興趣的開發者,其中包含 plugin.h 用來提供如
_Getbreakpointtype() 函數的原型宣告。並提供 OllyDBG.EXE 的匯入用程式庫
檔案 OLLYDBG.LIB,以便外掛開發者可以透過 implicit link 調用主程式
提供的 API 函數。
http://www.ollydbg.de/pdk.htm
Windows 檔案總管右鍵選單 (Shell Extension) 的做法:
1. 相當於 _Getbreakpointtype 地位的函數,全部使用 COM 架構,充斥在作業
系統內,比如某個系統 DLL 檔案內有提供某功能。
2. 每當使用者對檔案按下右鍵,電腦發現副檔名,比如 .txt,
在透過機碼查詢或 assoc .txt 指令查詢後可得知,
目前對應的檔案類型為:txtfile
又到機碼 HKEY_CLASSES_ROOT\txtfile\ShellEx\ContextMenuHandlers\OXOX
掃瞄得知,此檔案類型有個右鍵外掛名叫 OXOX,其身份識別碼
為 GUID: "{5E2121EE-0300-11D4-8D3B-444553540000}"
因此 Windows 會即時調用此 GUID 對應的外掛。
當然調用成功的前提是,外掛開發者遵從 COM 架構撰寫出 extOXOX.DLL 並將其
提前註冊告知 Windows 有此外掛的存在。
手動註冊:regsvr32.exe extOXOX.dll
移除:regsvr32.exe /u extOXOX.dll
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.8.135.79
→ purpose:移動個游標一直 lag 網路好爛,媽的 124.8.135.79 08/11 20:55
推 yauhh:好明白 118.167.54.220 08/11 21:12
推 EdisonX:謝謝 p 大回答 , 我再依此篇查看其他資料. 180.177.76.161 08/11 21:20
→ EdisonX:非常感謝 :) 180.177.76.161 08/11 21:20
→ MOONRAKER:贊。 118.165.217.26 08/12 02:31