Articles of DLL

如何截取dll方法调用?

如何截取dll方法调用? 有什么可用的技术? 它只能在C / C ++中完成吗? 如何拦截从所有正在运行的进程到给定的DLL的方法调用? 如何拦截从给定的进程到给定的DLL的方法调用?

有没有更好的方式来加载在C + +的DLL?

现在我做这样的事情,如果我有很多我想在我的DLL中引用的函数,它似乎很混乱。 有没有一种更好,更干净的方式来访问函数,而不必为每个函数定义创build一个typedef,以便它将编译和正确加载函数。 我的意思是函数定义已经在.h文件中,我不应该重新声明他们后我加载函数(或我?)有没有比使用LoadLibary更好的解决scheme? 如果在Visual Studio 2005项目设置中可以做同样的事情,我不一定需要这个function。 BHannan_Test_Class.h #include "stdafx.h" #include <windows.h> #ifndef BHANNAN_TEST_CLASS_H_ #define BHANNAN_TEST_CLASS_H_ extern "C" { // Returns n! (the factorial of n). For negative n, n! is defined to be 1. int __declspec (dllexport) Factorial(int n); // Returns true iff n is a prime number. bool __declspec (dllexport) IsPrime(int n); } #endif […]

如何获取mscorlib.ni.lib(.Net Framework 3.5)的PDB文件

做了很多search之后,我仍然无法得到问题的解决scheme。 我有一个mdmp文件。 调用堆栈显示它正在使用mscorlib.ni.dll。 所以要获取函数信息,我需要得到它的pdb文件。 mscorlib.ni.dll的版本是2.0.50727.3655。 我相信它来自.Net Framework 3.5。 由于mscorlib.ni.dll是由ngen.exe生成的本机优化的dll,所以我需要使用ngen.exe createpdb生成此dll的pdf。 ngen.exe createpdb "C:\Windows\assembly\…\mscorlib.ni.dll" "C:\SymbolCache" 结果如下: 在“C:\ Windows \ Microsoft.NET \ Framework64 \ v3.5”文件夹中找不到ngen.exe 我可以在文件夹“C:\ Windows \ Microsoft.NET \ Framework64 \ v2”中findngen.exe,但没有createpdb选项。 我可以在文件夹“C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319”中findngen.exe,它确实支持createpdb选项,但报告错误。 Microsoft(R)CLR本机映像生成器 – 版本4.0.30319.18408版权所有(c)Microsoft Corporation。 版权所有。 在本机映像“C:\ Windows \ assembly \ NativeImages_v2.0.507 7_64 \ mscorlib \ 5cd1c2848ff40eb0a8c149706ee394fa […]

在程序启动时从另一个目录加载一个DLL

我的基本问题是:我的程序(MyProgram.exe)有一个来自另一个程序(OtherProgram)的DLL的依赖,我试图避免每次更新OtherProgram时重新打包一个新的DLL。 我想在启动时在OtherProgram的DLL中有MyProgram.exe链接,但是我不完全确定Windows允许这样做。 所以如果有某种解决方法也是可以接受的。 而在一些背景下,平台是Windows 7 x64,MyProgram.exe运行良好,当我在MyProgram.exe项目目录中创build一个符号链接到OtherProgram的安装目录中的DLL。 当我尝试运行它没有符号链接,我得到“程序无法启动,因为OtherProgramDLL.dll从您的计算机丢失”错误。 任何意见或相关信息的链接非常感谢! 编辑:澄清:DLL在编译时不链接,此问题在运行时出现

只为进程初始化关键部分一次

在一个multithreading的应用程序,有没有一种方法来确保只有一个关键部分初始化,除了把代码放在DLL main()?

DLL:在Linux for Linux上用MinGW编译C时无法识别文件格式

我在Linux上使用MinGW(特别是Ubuntu)来编译Windows的C程序。 我正在使用名为SFML的库,它是名为CSFML的绑定。 我使用-L和-l来定位库,但是当我编译时,我得到这个错误: win32/dll/csfml-audio-2.dll: file not recognized: File format not recognised 我不知道为什么。 这是我用来编译的命令: sudo i686-w64-mingw32-gcc -o wandering src/main.c src/constants.c src/Display/display.c **…some more c files in here…** src/Generation/perlinnoise.c $(pkg-config –libs –cflags glib-2.0) $(pkg-config –libs –cflags gee-1.0) -Iwin32/CSFML-2.1/include -Lwin32/dll -lcsfml-audio- 有谁知道为什么会发生? 我可以在没有SFML的情况下编译C程序,但用MinGW就可以了。

我应该与我的应用程序重新分配msvcrt.dll?

我应该重新分配msvcrt.dll与我的应用程序,并使用私人DLL如果一些应用程序的库dynamic依赖msvcrt.dll? 即与系统的msvcrt.dll(DLL地狱)可能的任何不兼容问题? 应用程序是针对Windows Server系统的。

是rebasing dll(或提供一个合适的默认加载地址)值得的麻烦?

重新绑定DLL意味着修复DLL,因此它首选的加载地址是加载器实际上能够加载DLL的加载地址。 这可以通过诸如Rebase.exe的工具来实现,也可以通过为所有(自己的)dll指定默认加载地址,以使它们“适合”在可执行进程中。 以这种方式pipe理DLL基地址的关键是加速应用程序负载。 (或者我明白) 现在的问题是: 值得麻烦吗? 我有Richter / Nazarre的C / C ++书,他们强烈build议[a]确保加载地址全部匹配,以便Loader不必重新加载加载的DLL。 然而,他们没有争论,如果这加快了应用程序加载时间的任何重要的数额。 而且,对于ASLR来说,这似乎有点可疑,因为无论如何,加载地址都是随机的。 有没有关于这个利弊的事实? [a]:在我的WvC ++ / 5th ed中,在第568ff页的标题为Rebasing Modules and Binding Modules的章节中。 在第20章, DLL高级技术 。

从中央存储库加载DLL的一种方法

我们有很多产品,每个产品的应用程序中都有一些常见的DLL。 现在,我们将每个常见的DLL复制到每个产品的bin目录中,并将它们视为专用程序集。 这不必要地增加了每个产品的msi大小,当DLL发生问题时,我们必须构build包含DLL的每个产品的msi并进行部署。 是否有任何指示产品应用程序使用通用的私人目录来加载DLL [使用清单scheme..]? [注意:将私有目录添加到PATH env将不会提供解决scheme,就好像在SYSTEM目录中存在一个具有相同名称的DLL一样,这将会占用我们专用目录的权限] -Kartlee

WinAPI函数LoadLibrary()在执行错误期间导致函数失败

以下代码使用LoadLibrary()在运行时加载dll。 boolean Load_Internals_dll() { boolean result = true; //LOG_INIT; HINSTANCE hApexRLIO = LoadLibrary(L"APEX_RLIO_Internals.dll"); printf("Checking getlasterror after loadlibrary:\n",GetLastError()); if(NULL == hApexRLIO) { result = false; printf("[ERR]: Unable to load dll\n"); LOG_PRINT(" [ERR]: Unable to load dll.\n" ); } result = InitRSIDComm_Lib_Func(); //LOG_EXIT; return result; } 加载DLL后,发现句柄hApexRLIO不为空,但函数GetLastError()返回系统错误代码1627(函数在执行期间失败)。 这个错误可能是什么原因造成的? 这个错误代码在网上没有太多的文档,VC ++十加仑的头请帮我解决这个问题。