社区
进程/线程/DLL
帖子详情
如何让编译出的新版dll,可以直接替换旧版本的dll
sophyyoung
2013-04-12 01:37:05
其实就是本来有个 a.lib和a.dll,是别人开发的,用户程序为b.exe,使用了a.dll。
之后我重新写了个新的lib和dll,接口函数都是一样的,考虑到兼容性,依然取名 a.lib和a.dll,可是却不能直接替换b.exe里面的a.dll,b还是需要包含新的a.lib,然后rebuild一下,才行,不知道有没有办法可以让在不重新编译用户程序的情况下,编写新的 dll呢?
...全文
1432
10
打赏
收藏
如何让编译出的新版dll,可以直接替换旧版本的dll
其实就是本来有个 a.lib和a.dll,是别人开发的,用户程序为b.exe,使用了a.dll。 之后我重新写了个新的lib和dll,接口函数都是一样的,考虑到兼容性,依然取名 a.lib和a.dll,可是却不能直接替换b.exe里面的a.dll,b还是需要包含新的a.lib,然后rebuild一下,才行,不知道有没有办法可以让在不重新编译用户程序的情况下,编写新的 dll呢?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lm_whales
2013-06-06
打赏
举报
回复
只要新的DLL和旧的DLL没有本质差别(实现相同功能,同为32BITS或者同为64BITS,没有错误),完全可以直接替换。 不能替换, 是导出函数名有改变或者导出方式不同,或者函数参数不同,函数调用约定不同等造成的。
weiql6
2013-04-19
打赏
举报
回复
不能吧,按楼主所说的情况,应该不需要重新rebuild的。我试了下,是不需要的。
chentao
2013-04-18
打赏
举报
回复
1
DLL中得函数在EXE中是隐式链接的,需要用到和DLL对应的导入库lib文件,并且编译成EXE时,这些导入库的信息会被写入到EXE的导入段,所以才不能直接替换。
sophyyoung
2013-04-12
打赏
举报
回复
唉,白开心一场,确实不能用,我刚才用NI 公司的labwindows 写的用户程序,debug能用,但release 在退出时有个如下错误: FATAL RUN-TIME ERROR: Unknown source position, thread id 0x00001ED4: The program has caused a 'General Protection' fault at 001B:686591AD. 使用windbg时错误是:Access violation - code c0000005 (first chance) 于是我转用 vs2008 里的 vc++ 写的用户程序,这下界面都出不来了。说的错误是: First-chance exception at 0x00000003 in AutoTest.exe: 0xC0000005: Access violation. Unhandled exception at 0x00000003 in AutoTest.exe: 0xC0000005: Access violation. 看起来错误都是一样的。 使用新的lib,重新编译一下就可以了。没有这样的问题了。。
sophyyoung
2013-04-12
打赏
举报
回复
看过了,也试过了,之前试的时候确实不行的,怎么今天试了就可以了呢! 主要是我用 depends 看的,他们的函数名都是一样的没错,但每个函数后面的 entry point 不同,我就以为不可以用了。
一个傻冒
2013-04-12
打赏
举报
回复
如果是delphi写的dll,那要改些东西才行。 楼主用工具先确认一下是用语言写的。用些查壳的工具,或者反汇编过来看看,也大概能知道。
无言猪
2013-04-12
打赏
举报
回复
用depends看一下两个dll的函数名一致不,有些不注意的地方也会引起导出函数名的不一直,比如extern "C", 或者用def文件重写了函数名的.
sophyyoung
2013-04-12
打赏
举报
回复
原来的dll都不知道拿什么编译的,这样都可以吗?
jimette
2013-04-12
打赏
举报
回复
引用 1 楼 ydfivy 的回复:
只要DLL的接口函数一定,只要符合这个调用函数,DLL就可以被调用。你的为啥要重新编译一下呢?
是这个道理 不能是把接口参数改了把?
一个傻冒
2013-04-12
打赏
举报
回复
只要DLL的接口函数一定,只要符合这个调用函数,DLL就可以被调用。你的为啥要重新编译一下呢?
为何Unity无法运行时
替换
DLL
?
Unity等C#项目
编译
生成的
DLL
在运行时无法
直接
替换
,主要原因有三点:首先,
DLL
一旦加载到AppDomain就无法卸载(除非卸载整个AppDomain,但Unity不支持);其次,运行时类型系统与原
DLL
强绑定,
替换
会导致引用丢失;最后,IL2CPP将代码静态
编译
为本地代码,完全缺乏动态加载机制。因此,Unity主工程
DLL
必须通过脚本语言或特殊解释器(如ILRuntime)实现热更新,无法
直接
替换
。
生产环境
DLL
文件
替换
操作指南
在生产环境中进行
DLL
替换
是一项系统性、风险性极高的操作,必须遵循“准备—执行—验证”的标准流程。
替换
前的签名验证、备份与计划制定是保障操作安全的前提;执行过程中的锁定处理与工具使用是确保操作成功的关键;
替换
后的版本核对与功能验证则是确认操作有效性的必要手段。下一章将继续深入探讨
替换
前的备份与服务停止操作,进一步完善生产环境下的
DLL
替换
流程体系。
VS
编译
间接引用的
DLL
不一定输
出
如果A引用B,B引用C,那么A对C就是间接引用,一般的
编译
A时会输
出
B的
DLL
,而因为B对C有引用,所以也会输
出
C的
DLL
。但是实际
编译
时发现,并不一定都会输
出
C的
DLL
。后面不断的追查原因,最终发现是与B对C引用时代码的调用有关。如果B对C的调用都是常量的方式,比如C中都是CONST常量,或者B只调用了C的CONST常量。那么
编译
的时候,B不会带上C的引用,这个可以ildasm工具,去查看B的D...
dll
混淆加密——防止
dll
反
编译
通过以上步骤,你可以快速实现 C#
DLL
的基础防护。如果需要更专业的方案,可考虑商业混淆器(如 Dotfuscator、MaxtoCode),但免费工具已能满足基础需求。:没有绝对安全的方案,但此方案可使反
编译
成本远高于收益。实现,但需注意:完全防止反
编译
几乎不可能,只能增加逆向成本。使用不同的陷阱触发方式(异常/日志/延迟破坏)点击"Protect"生成加固后的
DLL
。定期更新混淆配置(不同版本使用不同预设)防止反
编译
的核心是增加逆向难度,主要通过。的实际值(调试模式获取)
C++中的
DLL
动态链接库,如何
编译
并使用
DLL
DLL
(动态链接库)是一种在Microsoft Windows操作系统中常用的文件格式,用于实现共享函数库。
DLL
的内容在程序运行时被加载和链接,而不是在程序
编译
时。这被称为动态链接,与静态链接库(如静态库 .lib 文件)形成对比。
DLL
文件包含可以被多个程序同时使用的代码和数据。:多个程序可以共享同一个
DLL
文件中的代码和资源,这比每个程序单独拷贝这些代码更有效率,从而节省内存。:
DLL
允许开发人员创建模块化的程序。你可以在
DLL
中放置一组功能,并且在需要时由多个程序或其他
DLL
调用。
进程/线程/DLL
15,465
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章