我有一个与一组dll文件链接的应用程序。我在不通过不安全的LoadLibrary()调用的情况下隐式加载DLL。我正在考虑使用证书文件对DLL进行签名以避免DLL劫持。我怀疑隐式链接如何检查我的DLL是否已签名。 最佳答案 您应该使用MANIFESTDEPENDENCY链接器选项添加list依赖项,并将publicKeyToken设置为用于签署dll的key。例如像这样的东西:/manifestdependancy:type='win32'name='mydll'language='*'publicKeyToken='1234567
我一直明白版本(例如:1.2.3.4)中的每个数字都被视为常规int值。我们正在使用一些遵循不同约定的第三方DLL,这似乎会导致我们的修补过程出现问题(修补程序不会用新的DLL覆盖旧的DLL)。旧版本的DLL是1.38DLL的新版本是1.4我理解为1.4我讨厌因为无知而犯错误,我也讨厌盲目遵循惯例而不理解其背后的含义。所以现在是我要求澄清的时候了。对此有何看法? 最佳答案 惯例是1.4!=1.40。版本是一组数字,而不是单个数字。如果他们想增加到1.4,他们应该一直使用1.3.8。 关于
我对如何最好地设置VS2008项目以便将DLL编译为智能设备DLL和C++Win32DLL的意见很感兴趣。除了拥有两个项目并共享源文件之外,还有其他选择吗? 最佳答案 是的,您可以使用多个平台来做到这一点。虽然很难做到正确,但您无法从项目模板中初始化设置。最好的办法是使用SmartDevice项目模板启动项目,因为它具有最多的自定义设置。然后Build+ConfigurationManager,Activesolutionplatform=New,选择Type=Win32,Copy=None。最后一个是痛苦的一点,您必须自己更改Wi
我链接到ntdll.lib以使用ZwQueryInformationProcess并使用多线程运行时库。ntdll似乎定义了一些crt函数。因此,当我链接它并使用运行时库时,我会遇到链接器错误。我可以强制链接器使用crt函数并忽略ntdll符号来消除错误吗?或者以其他方式解决此错误。我知道ZwQueryInformationProcess的文档建议动态加载,但它在我的主项目也链接到的静态库中使用,并且这已经运行了很长时间,所以我不想改变它。谢谢。我在其他网站上发现了一些关于此的讨论,例如:http://www.codeguru.com/forum/archive/index.php/t
我有一个Windows.dll文件(来自第三方-已停止支持它,我没有C源代码来纠正问题)。我在我的项目中使用.dll。.dll文件在WindowsXP/Vista下运行良好(因为它是在这些操作系统版本为当前/最新版本时发布的)-现在的问题是该项目现在仅限于WindowsXP/Vista用户(由于那个.dll)-当它在Windows7下运行时会出现轻微故障(即与WindowsXP/Vista相比产生不同的结果)。我认为问题是Microsoft一定更改了一些影响兼容性的东西(在Windows库或其他东西中?)。所以我想知道-我知道它并不是最好的选择,但作为一个临时/hackish解决方法是
我有一个nativedll形式的第3方API,我使用DllImport从C#调用它。此nativedll取决于打开的第3方应用程序。当我正常运行代码时,API会执行预期的操作并驱动应用程序。但是,当我运行与Windows服务相同的代码时,即使是我自己,API也会返回我在关闭应用程序时看到的相同(未记录的)错误代码;ProcessExplorer确认nativedll已从应用程序目录正确加载。可能是什么原因造成的,我该如何解决这个问题? 最佳答案 有点旧,但它是搜索中排名靠前的结果之一。所以我认为我的数据仍然有用。Ihavea3rdp
我有一个dll的源代码还不是线程安全的。dll相当复杂,需要相当长的时间才能使其线程安全。所以我想出了独立运行Dll的几个“副本”的想法。最简单的方法可能是创建N个重命名的Dll副本并为每个线程加载一个单独的Dll。这是可行的解决方案吗?有没有更好的类似方法?是否可能存在一些包装代码?我知道这根本不是一个好的工程解决方案。请不要怪我。但它可能会解决许多问题。编辑2017我已经做到了,而且没有任何问题。伟大的!但请注意以下几点:http://msdn.microsoft.com/en-us/library/2s9wt68x%28v=vs.80%29.aspx如果DLL将任何非本地数据或对
我必须创建一个包装器DLL来导出一些符号(函数)。在其资源中,它包含另一个实际执行此任务的加密DLL。在包装器DLL初始化时,它解密原始的DLL,将其保存在文件中,并通过LoadLibrary加载到地址空间。但是我想避免将此DLL保存在文件中。我知道这并不能保证防弹保护,实际上可以转储进程虚拟内存并在那里看到它。我还知道可以创建一个具有FILE_FLAG_DELETE_ON_CLOSE属性的文件,这确保该文件在进程终止后立即被删除。但我仍然想知道是否有一个选项可以“不从文件”加载DLL。到目前为止,我想到了以下几点:分配一个具有足够保护的虚拟内存块(PAGE_EXECUTE_READ或
这感觉像是一个菜鸟问题,所以如果是骗人的,请指出正确的位置:)我尝试将用C编写的DLL包含到C++程序中。它没有用;gcc说test.cpp:xxx:error:toomanyargumentstofunction.这是一个最小的工作示例:DLL函数的包装器:/*myWrapper.h*/#ifndef_MYWRAPPER_H#define_MYWRAPPER_H#include#ifdef__cplusplusextern"C"{#endifexternFARPROCEXPORTED_functionNameP;intGetDLLpointers();#ifdef__cplusplu
我正在制作一个DLL,它使用LoadLibrary动态加载另一个DLL(winsock)。我读到我不应该在DllMain中调用LoadLibrary,但我反复使用它并且不想每次使用它时都必须调用LoadLibrary/GetProcAddress。所以我的问题是:在DLL中调用LoadLibrary的最佳位置在哪里?LoadLibrary/GetProcAddress有多快?在每个函数中都这样做是不是开销很大? 最佳答案 创建一个在DllMain之外进行设置的初始化函数。您的代码会在加载DLL后调用该函数,然后它可以调用完成初始化所