草庐IT

loadlibrary

全部标签

c++ - 延迟加载的 DLL 在内存中的加载距离彼此太远

我有一个x64Windows应用程序,它有时会在我无法控制的DLL库中崩溃。这个库实际上是一大组相互依赖的DLL(其中约40个)。崩溃并不总是在同一个地方,但这里有一个正在发生的事情的例子:Exceptionthrownat0x0000018393916B72(foo.dll)inbar.exe:0xC0000005:Accessviolationreadinglocation0x000001831C1F95A0.在此位置,VisualStudio中的反汇编显示如下:0000018393916B72cmpdwordptr[1831C1F95A0h],3起初我觉得这很奇怪,因为这意味着D

c++ - 检测 DLL 的卸载

我有一个特殊的要求,我相信没有别的办法,即:检测DLL的卸载。我用谷歌搜索并发现afour-yearsoldSO对这个。我选择了相同的解决方案:HookFreeLibrary。当代码进入MyFreeLibrary时,我将钩住入口点指定的模块以相同的方式(内联钩子(Hook))。而在MyEntryPoint,我会先调用原来的入口点,然后检查reason参数-如果值等于DLL_PROCESS_DETACH,表示这个DLL的清理工作是刚刚完成,它将从地址空间中卸载。在这一点上,我有机会做我的工作。它有效。就这样?不幸的是,它还没有完成。一个非常重要的事情被忽略了:依赖。例如,a.dll链接到

c++ - LoadLibrary 失败,错误代码为 193

我很困惑为什么我不能使用LoadLibrary加载我的dll“interfac”。加载依赖项时似乎失败了,但我不确定为什么。代码如下:AfxMessageBox(L"beforeloadlibrary");HMODULEinterfacDll=LoadLibrary(TEXT("C:\\QA\\Pcdlrn\\Win32\\Release\\INTERFAC.DLL"));if(!interfacDll)DWORDdw=GetLastError();//returns0xc1(193)AfxMessageBox(L"afterloadlibrary");这是gflags(x86)的加载

windows - LoadLibrary 静态/全局变量和线程

假设我有一个具有以下静态/全局的DLL:ClassAObject;随着ClassA的实现,它还包含一个“常规”ClassB,如果ClassA尚未构建,它将无法正常工作(这就是我将ClassA设为静态/全局的原因)。在Windows中,我相信DLL加载器会在调用ClassB的构造函数时加载此DLL,对吗?此时,将构建ClassA,然后再构建ClassB。如果第二个线程出现并构造了ClassB,ClassA将不会被构造,因为它已经被构造。现在,我的问题是——如果ClassB是由两个线程同时构造的怎么办。于是Thread1就会开始构造ClassA。线程2会等到ClassA完全构造完成后才执行

java - 使用 Windows 服务调用使用 JNI 和 LoadLibrary 的 Java 程序的问题

我正在创建一个调用java程序的Windows服务程序。这是部分代码,hModule是一个全局变量,在ServiceStart中调用了LoadLibrary,之后调用了invokeJVM。我设法启动了该服务并且它运行良好,但是,每当我停止该服务时,它都会给我一个错误:Windows无法停止本地计算机上的服务错误1067:Windows服务意外终止添加了额外的日志记录后,发现意外终止错误发生的地方是invokeJVM函数的返回。当我检查事件查看器时,它给了我一些BEX错误,谷歌搜索表明这是一个堆栈溢出错误,但我无法确定它的原因,知道为什么吗?HMODULEhModule;VOIDServ

windows - 如何在不实际调用 LoadLibrary 的情况下找到 DLL 的完整路径?

如果我调用LoadLibrary("foo.dll"),它会查找系统上的不同位置,选择最佳匹配,然后加载该库。我想在实际加载它之前找到该文件的完整路径。有没有简单的方法可以做到这一点?到目前为止,我的google-fu让我失望了,但似乎直观地说有一些功能可以做到这一点。我当前的解决方案是使用LOAD_LIBRARY_AS_DATAFILE标志实际调用LoadLibraryEx,然后在结果上调用GetModuleFileName;在此之后我假设我将不得不释放库并在没有此标志的情况下重新加载它,但这似乎是一种迂回的方法。有没有更好的办法?ResolvePathFromDllName也许?

java - 您如何找到 System.loadLibrary() 在哪里查找库?

您能否通过Java方法调用或Windows工具找出System.loadLibrary()从何处查找DLL?我们有一些预期会失败的代码,因为它使用System.loadLibrary()加载native库,但意外地成功了!我们认为我们已经从PATH中删除了相关DLL的所有副本,并删除了java.library.path参数,但不知何故代码仍然成功。我们已经重新启动了机器(以确保它没有潜伏在内存中)。我们一定是在做一些愚蠢的事情,但很难弄清楚是什么。 最佳答案 ProcessExplorer没有显示加载了哪些DLL以及从哪里加载的吗?

windows - 从文件中的偏移量加载库

我正在编写一个可编写脚本的游戏引擎,为此我有大量执行各种任务的类。引擎的大小正在迅速增长,所以我想到将大型可执行文件拆分为dll模块,以便只包含游戏编写者实际使用的组件。当用户编译他们的游戏(也就是说他们的脚本)时,我希望正确的dll成为最终可执行文件的一部分。我已经有相当多的覆盖数据,所以我想我可以将dll存储为这个block的一部分。我的问题归结为:是否可以欺骗LoadLibrary从某个偏移量开始读取文件?这将使我不必将dll提取到一个不干净的临时文件中,或者完全取消自动包含dll并简单地指示我的用户将dll与他们的游戏一起打包。最初我想采用“从内存加载dll”的方法,但以可移植

windows - LoadLibrary 其他扩展名为 'dll' 的文件

是否可以加载没有“dll”扩展名的dll文件?谢谢 最佳答案 是的,只需提供完整的文件名,包括扩展名(如果文件名不包含扩展名,则不提供扩展名)。 关于windows-LoadLibrary其他扩展名为'dll'的文件,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7244918/

c# - LoadLibrary 内部的访问冲突

我正在使用CreateRemoteProcess将一些汇编程序代码注入(inject)远程进程(64位),然后加载一个dll,但我在LoadLibraryA中得到一个C0000005EXCEPTION_ACCESS_VIOLATION用于加载我的.dll文件的调用。这里是注入(inject)的汇编代码(下面截图中的地址不同,但这些是相对于写入前的远程内存地址计算的):MOVRCX,2A0DFF0020MOVRAX,CALLRAXMOVRCX,RAXMOVRDX,2A0DFF0030MOVRAX,CALLRAXMOVQWORDPTRDS:[2A0DFF0010],RAXMOVRCX,2A