首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重命名DLL,但仍然允许EXE找到它?

如何重命名DLL,但仍然允许EXE找到它?
EN

Stack Overflow用户
提问于 2008-11-11 10:04:27
回答 6查看 31.7K关注 0票数 26

我们有一个DLL,它是在内部产生的,并且我们有相关的存根静态库。

我们还有一个EXE,它使用静态链接到DLL的LIB文件的简单方法使用这个DLL(即,不是手动使用LoadLibrary)。

当我们部署EXE时,我们希望更改DLL文件名,因为混淆的原因(应客户的请求)。

,我们如何做到这一点,以便我们的EXE仍然自动地找到DLL?

我已经尝试重命名DLL和LIB文件(在将它们构建为正常名称之后),然后将EXE项目设置更改为与重命名的LIB链接。这在运行时会失败,因为我猜DLL的名称是在LIB文件中烘烤的,而不是简单地由链接器将".lib“替换为".dll”。

通常,我们不希望将这种混淆应用于DLL的所有使用,因此我们希望保持当前的DLL项目输出文件(如果它们是它们)。

我希望有一种方法,可以编辑DLL的LIB文件,并用其他东西替换DLL文件的硬编码名称。在这种情况下,这可以完全在EXE项目中完成(可能是构建前的步骤)。

更新:我发现延迟加载不起作用,因为我的DLL包含导出的C++类。见这篇文章

还有别的选择吗?

EN

回答 6

Stack Overflow用户

发布于 2008-11-11 10:45:06

使用LIB工具(包含在visual studio中),您可以从def文件生成lib文件。如果您的dll源不包括def文件,则必须先创建一个。你可以用垃圾箱帮你。例如:dumpbin /exports ws2_32.dll

在输出中,您可以看到导出的函数的名称。现在创建一个这样的def文件:

代码语言:javascript
复制
LIBRARY WS2_32
EXPORTS
    accept      @1
    bind        @2
    closesocket @3
    connect     @4

@number是dumpbin输出中的序号。

使用LIB /MACHINE:x86 /def:ws2_32.def来生成库文件。

现在,您可以轻松地修改def文件,并在每次重命名dll时生成一个新的libfile。

您可以使用dumpbin:dumpbin /exports ws2_32.lib验证libfile。您应该获得与原始lib文件相同的输出。

票数 21
EN

Stack Overflow用户

发布于 2008-11-11 14:25:49

这里有一个很好的替代方法:延迟加载

在构建应用程序时,将其与原始DLL名称链接(但将原始dll设置为延迟加载)。

然后根据客户请求部署重命名的DLL。

您的EXE将尝试使用原始名称而不是重命名版本来定位DLL,因此会失败,但是由于加载延迟,您可以拦截此失败并自己加载重命名版本,然后让本机windows加载程序解决所有问题,就好像什么都没有改变一样。

阅读文章链接器对延迟加载DLL的支持并查看延迟钩实例

您的延迟挂钩可能如下所示:

代码语言:javascript
复制
FARPROC WINAPI delayHook( unsigned dliNotify, PDelayLoadInfo pdli )
{
    switch( dliNotify )
    {
        case dliNotePreLoadLibrary:
            if( strcmp( pdli->szDll, "origional.dll" ) == 0 )
                return (FARPROC)LoadLibrary( "renamed.dll" );
            break;
        default:
            return NULL;
    }

    return NULL;
}
票数 19
EN

Stack Overflow用户

发布于 2018-02-25 00:52:16

我创建了一个小python脚本来正确地重命名本地dll。它生成一个新的库文件,供您在MSVC中的项目链接中使用。

dll.py

当然,您需要使用developer命令提示符才能正常工作。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/280485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档