作者purpose (purpose)
看板Programming
标题Re: [问题] 关於 plug-in 设计模式
时间Sat Aug 11 20:52:43 2012
1F:推 purpose:plug-in 最常见就 dll 不是吗 124.8.135.79 08/11 18:01
2F:→ EdisonX:这方案最近面试的时候被打枪, Orz 180.177.76.161 08/11 18:12
3F:推 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
4F:→ purpose:移动个游标一直 lag 网路好烂,妈的 124.8.135.79 08/11 20:55
5F:推 yauhh:好明白 118.167.54.220 08/11 21:12
6F:推 EdisonX:谢谢 p 大回答 , 我再依此篇查看其他资料. 180.177.76.161 08/11 21:20
7F:→ EdisonX:非常感谢 :) 180.177.76.161 08/11 21:20
8F:→ MOONRAKER:赞。 118.165.217.26 08/12 02:31