搜索位置以什么顺序加载引用的DLL?
在Windows操作系统中,当一个程序运行时,它会加载各种DLL(动态链接库)来运行。这些DLL可以位于系统目录、应用程序目录或其他目录中。在加载这些DLL时,操作系统会按照一定的顺序进行搜索。以下是搜索顺序:
请注意,这个顺序是固定的,不能更改。如果需要加载的DLL位于其他目录中,需要将该目录添加到PATH环境变量中。
推荐的腾讯云相关产品和产品介绍链接地址:
需要复制数据库文件,把SQL服务停了,不使用脱机或者分离是觉得比较慢,结果就是再次重启服务后,SQL开始报错: 无法加载 DLL xpstar.dll 或它引用的一个 DLL。...原因: 126(找不到指定的模块。)。...1.有人通过这个xpstar.dll重新复制到SQL Server的Binn目录解决,我对比服务器目录下和我本机(正常SQL Server)目录下所有的xpstar.dll, 按照本机的目下添加一遍没有解决.... 2.也有通过下载了SQLEXPRESS SP2的补丁后,系统报错问题得到了修复。...3.使用SQL 安装包中的修复功能解决问题的,修复过程中SQL服务会暂停,大概二十分钟左右,修复完成后,SQL不再报错。 ?
那么你会问了,这样以来,系统中存在两个同样的fodbmgr_code.properties文件,一个在jar包中,一个在WEB-INF/conf文件夹下,如果这两个文件中都定义了同样的参数但值不同,到底以哪个为准呢...这就是涉及到搜索优先序问题,我们的做法是,先用ClassLoader.getResource搜索加载properties文件,然后再加载WEB-INF/conf文件夹下的properties文件,如果存在同名参数...java.util.HashSet; import java.util.Properties; import java.util.Set; public class ConfigUtils { /** * 顺序加载不同位置的...properties文件,加载顺序为: * 1.调用{@link ClassLoader#getResource(String)}方法在{@code clazz}所在位置查找,如果失败则抛出异常...3.由环境变量指定的文件夹位置 4.java虚拟定义user.dir文件夹下 第1个位置必须能找到指定的文件否则,就会抛出异常,后续3个位置如果找得到就加载,找不到或抛出任何异常都会被忽略不会报错
在尝试优化性能的时候,如何可以了解到在应用程序启动的过程中,在什么步骤开始加载了某些 Dll 文件 在 VisualStudio 的 调试->窗口->模块 可以看到当前应用程序加载的所有模块,也就是应用程序加载了哪些...Dll 文件 一个调试方法是在合适的逻辑里面添加断点,或者在软件启动完成之后,通过模块了解应用程序加载了哪些 DLL 文件,从而了解应用程序启动慢是否因为加载了不应该加载的模块 在 dotnet 里面...,可以通过辅助的代码了解是在哪些模块加载了 DLL 文件,例如我在调试的 SVG 库 是在哪个模块加载的,我不期望在启动的过程中有加载 SVG 相关的 DLL 文件,那么我可以如何了解到是在应用程序的哪个逻辑里面加载的...; } 在进入 CurrentDomain_AssemblyLoad 函数加载到 SharpVectors 的模块的时候,将会进入断点。...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
注册表项指定的DLL是已经被操作系统加载过后的DLL,不会被应用程序搜索并加载。...但这只是dll劫持的其中一种途径,他有这些途径: (1) DLL替换:用恶意的DLL替换掉合法的DLL (2) DLL搜索顺序劫持:当应用程序加载DLL的时候,如果没有带指定DLL的路径,那么程序将会以特定的顺序依次在指定的路径下搜索待加载的...通过将恶意DLL放在真实DLL之前的搜索位置,就可以劫持搜索顺序,劫持的目录有时候包括目标应用程序的工作目录。...文件以将搜索路径定位到包含恶意DLL的地方。...当加载某些较高完整性级别进程时,会引用这些注册表项,从而导致进程加载用户控制的DLL。这些DLL包含导致会话权限提升的payload。此模块修改注册表项,但在调用payload后将清除该项。
C#开发者在开发WinForm程序、Asp.Net Web(MVC)程序等,不可避免的在项目中引用许多第三方的DLL程序集, 编译后引用的dll都放在根目录下。...随着项目的日益增大,根目录下充满了各种各样的dll,非常的不美观。如果能够把dll按照想要的目录来存放,那么系统就美观多了。 此问题就涉及到 CLR查找和加载程序集的方式。...系统搜索dll的目录以及顺序 CLR解析一个程序集会在一个根目录内进行搜索,整个探索过程又称Probing,这个根目录很显然就是当前包含当前程序集的目录。 ...程序搜索DLL的顺序如下(区分强名称签名、没有强名称签名的程序集) 没有做强名称签名的程序集 程序的根目录 根目录下面,与被引用程序集同名的子目录 根目录下面被明确定义为私有目录的子目录 在目录中查找的时候...如何让程序识别不同目录下的dll? 我们看到,上面的顺序无论是否有强名称签名看,都提到了一个名词 “私有目录”。
分别对应应用程序以什么权限运行 asInvoker:父进程是什么权限,此应用程序就是什么权限 requireAdministrator:需要以管理员权限来运行,此类应用程序图标右下方会有个盾牌标记...,dll加载也遵循着Know DLLs注册表项的机制:Know DLLs注册表项指定的DLL是已经被操作系统加载过后的DLL,不会被应用程序搜索并加载。...但这只是dll劫持的其中一种途径,他有这些途径: (1) DLL替换:用恶意的DLL替换掉合法的DLL (2) DLL搜索顺序劫持:当应用程序加载DLL的时候,如果没有带指定DLL的路径,那么程序将会以特定的顺序依次在指定的路径下搜索待加载的...通过将恶意DLL放在真实DLL之前的搜索位置,就可以劫持搜索顺序,劫持的目录有时候包括目标应用程序的工作目录。...文件以将搜索路径定位到包含恶意DLL的地方。
DLL劫持 首先,让我们弄清定义,从最广泛的意义上讲,DLL劫持是欺骗合法/受信任的应用程序以加载任意DLL,诸如DLL搜索顺序劫持、DLL加载顺序劫持、DLL欺骗、DLL注入和DLL侧面加载等术语经常被误认为是相同的...有多种方法可供选择,成功的方法取决于如何配置应用程序以加载其所需的DLL,可能的方法包括: DLL替换:用恶意DLL替换合法的DLL,可以将其与DLL代理结合使用,以确保原始DLL的所有功能均保持不变...DLL搜索顺序劫持:在不带路径的应用程序指定的DLL中,以特定顺序在固定位置搜索,通过将恶意的DLL放在实际DLL之前的搜索位置,劫持了搜索顺序,有时包括目标应用程序的工作目录 Phantom DLL劫持...:使用一个恶意的DLL来代替合法应用程序尝试加载的丢失/不存在的DLL DLL重定向:通过编辑改变,其中DLL被搜索的位置,例如%PATH%环境变量,或.exe.manifest/.exe.local文件...因此,让我们把重点放在检测上,您可以从意外路径中搜寻前面提到的任何DLL的创建或加载,特别是在临时位置(如:%appdata%)中,毕竟加载DLL的(合法)应用程序的名称可以更改,但DLL的文件名始终是固定的
您可以使用动态调用(我称之为 DInvoke)在运行时加载 DLL 并使用指向其在内存中位置的指针调用函数,而不是使用 PInvoke 静态导入 API 调用。...GetPebLdrModuleEntry: 通过在 PEB 中搜索对它的引用来搜索当前加载的模块的基地址。...它在初始化时被加载到每个 Windows 进程中,因此我们知道它已经被加载。因此,我们可以安全地搜索 PEB 的已加载模块列表以找到对其的引用。一旦我们从 PEB 中找到它的基地址,我们就打印该地址。...然后,我们将按上述顺序调用它(减去系统调用),以证明每种机制都成功地避开了 API 挂钩。...DynamicAPIInvoke当引用的 DLL 尚未加载到当前进程中时,使用可以生成这些异常的模块加载事件。
什么是程序集 用csc.exe进行编译 .NET程序执行原理 JIT编译 AOT编译 程序集的规则 程序集的加载方式 强名称程序集 程序集搜索规则 项目的依赖顺序 为什么Newtonsoft.Json版本不一致...程序集搜索规则 事实上,按照存储位置来说,程序集分为共享(全局)程序集和私有程序集。...现在CLR开始搜索程序集aa,首先它会从demo.exe控制台的同一目录(也就是D:\Demo\Debug\)中查找程序集aa,搜索文件名为aa.dll的文件,如果没找到就在该目录下以程序集名称为目录的目录中查找...这是为什么? 1.这是因为依赖顺序引起的。...,事实上,类似于mscorlib.dll、System.dll这样的FCL类库被引用的如此频繁,它已经是我们.NET编程中必不可少的一部分,几尽每个项目都会引用,为了不再每次使用的时候都复制一份,所以计算机上有一个位置专门存储这些我们都会用到的程序集
SafeDllSearchMode的开启与否主要影响 Current Directory(当前目录) 在搜索顺序中的位置。...不过微软引入了 SetDllDirectory 这个API,给这个API传递一个空字符串就可以将当前目录从DLL搜索顺序中排除掉。...如果进程尝试加载一个不存在的DLL,根据默认的DLL搜索顺序,进程最终会搜索到PDF文件所在目录(即当前目录),如果该目录下恰好就存在有一个同名的DLL,那么这个DLL就会被进程所加载。...漏洞详情为:Windows 10下的 URLMON.dll 文件存在加载 phoneinfo.dll 的代码,而Windows 10本身并不携带这个 phoneinfo.dll 文件,并且在查找DLL时使用的是标准的目录搜索顺序...因为这里 dwFlags 的值为0,所以使用标准的DLL搜索顺序;由于Windows 10上并不存在 phoneinfo.dll 这个文件,所以进程最终会尝试加载当前目录下的DLL。
CLR在查找引用的程序集的位置时候,第一个判断条件是 判断该程序集是否被签名。 什么是签名?...现在CLR开始搜索程序集aa,首先它会从demo.exe控制台的同一目录(也就是D:\Demo\Debug\)中查找程序集aa,搜索文件名为aa.dll的文件,如果没找到就在该目录下以程序集名称为目录的目录中查找...这是为什么? 1.这是因为依赖顺序引起的。...,事实上,类似于mscorlib.dll、System.dll这样的FCL类库被引用的如此频繁,它已经是我们.NET编程中必不可少的一部分,几尽每个项目都会引用,为了不再每次使用的时候都复制一份,所以计算机上有一个位置专门存储这些我们都会用到的程序集...简单延伸两个问题,mscorlib.dll被加载在哪里?内存堆中又是什么样的一个情况?
所以要注意操作符组合的求值顺序。 要选取供应商 DLL01 或 BRS01 制造的且价格在 10 美元及以上的所有产品该如何实现?...用通配符进行过滤 主要内容:介绍什么是通配符、如何使用通配符以及怎样使用 LIKE 操作符进行通配搜索,以便对数据进行复杂过滤。...根据 DBMS 的不同及其配置,搜索可以是区分大小写的。 除了能匹配一个或多个字符外,% 还能匹配 0 个字符。% 代表搜索模式中给定位置的 0 个、1 个或多个字符。...把通配符置于开始处,搜索起来是最慢的。 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。...创建计算字段 主要内容:介绍什么是计算字段,如何创建计算字段,以及如何从应用程序中使用别名引用它们。 计算字段 存储在数据库表中的数据一般不是应用程序所需要的格式。
什么是dll DLL(Dynamic Link Library),全称动态链接库,是Windows系统上程序正常运⾏必不可少的功 能模块,是实现代码重⽤的具体形式。...DLL劫持漏洞(DLL Hijacking Exploit),严格点说,它是通过⼀些⼿段来劫持或者替换正常的DLL,欺 骗正常程序加载预先准备好的恶意DLL的⼀类漏洞的统称。...这时,系统会按照特定的顺序搜索⼀ 些⽬录,以确定DLL的完整路径。...根据MSDN⽂档的约定,在使⽤相对路径调⽤ LoadLibrary (同样适 ⽤于其他同类DLL LoadLibraryEx,ShellExecuteEx等)时,系统会依次从以下6个位置去查找所需要的...PATH环境变量中列出的⽬录 dll劫持就发⽣在系统按照顺序搜索这些特定⽬录时。只要⿊客能够将恶意的DLL放在优先于正 常DLL所在的⽬录,就能够欺骗系统优先加载恶意DLL,来实现“劫持”。
结论 在默认情况下,Windows 加载程序在用户磁盘上搜索 DLL 的搜索顺序: 包含可执行文件的目录。...PATH 环境变量中所列出的目录。 如果调用 LoadLibrary 时传入的是绝对路径,那么加载程序将只尝试从该绝对路径搜索 DLL。...DLL 并将它们载入,从而保证系统 DLL 始终都是从它们在 Windows 目录的正式位置载入的。...我对这个说法持保留意见,因为在我的验证中,在一个 Windows XP SP1 的环境中已经应用了此搜索顺序。...另外,有一些其它方法可以改变加载程序的搜索顺序,已知的有: SetDllDirectory 函数。如果传入一个有效路径,那么它将被插入在默认顺序的 1 与 2 之间。
DLL Hijacking,中文为DLL 劫持,需要说明的是这是一种技巧,准确的描述为DLL搜索顺序劫持。...,可以看到加载顺序和上面所说的DLL相同: ?...另外标准的搜索策略取决于是否启用的安全DLL搜索模式(safe DLL search mode),安全DLL搜索模式会将用户当前目录放在搜索顺序的后面。...介绍了这么多,终于了解了DLL的搜索顺序,对我们有什么意义呢?...后话 DLL Hijacking学习过程中主要理解了DLL 的搜索顺序以及影响搜索顺序的点,更多的操作则需要一些代码功底,很抱歉,笔者这方面不会。
DLLHSC DLLHSC全称为DLL Hijack SCanner,即DLL劫持扫描工具,DLLHSC可以生成线索并自动帮助广大研究人员发现合适的DLL劫持攻击目标,以方便实现DLL搜索顺序劫持。...DLLHSC实现了这个工具的核心功能,detour项目生成一个用于钩住API的DLL文件,Payload项目负责生成用作概念验证的DLL,广大研究人员可以测试可执行文件并查看是否可以通过搜索顺序劫持技术来加载它...工具操作模式 DLLHSC实现了三种操作模式,具体如下: 1、轻量级模式 将可执行镜像加载到内存中,解析导入表,然后用Payload DLL替换导入表中引用的任何DLL。...下图中显示了OleView.dll在加载Payload DLL时返回的错误消息提示框: 该工具将等待10秒或-t秒的最长时间,以确保进程初始化已完成,并且已生成任意消息框。...此模式旨在提供可用作Payload载的DLL的验证,仅用于为分析人员提供潜在目标: 当以进程的形式启动时,-rt参数会将提供的可执行镜像加载到其地址空间中的模块打印出来: 项目地址:点击底部【阅读原文】
引用网络中的原理讲解 ●背景知识● 首先我们要了解Windows为什么可以DLL劫持呢?主要是因为Windows的资源共享机制。...为了提供这样的功能,在Window2000开始,微软加了一个特性,强制操作系统的加载程序首先从应用程序目录中加载模块,只有当加载程序无法在应用程序目录中找到文件,才搜索其他目录。...●什么是DLL劫持● 根据前面说的Windows资源共享机制,操作系统加载程序首先从应用程序目录中加载模块。...这一特性在注册表中也有体现:HKLM\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode,如果为1,搜索的顺序为:应用程序所在目录...但是不管是哪种情况,第一个搜索的肯定是应用程序的所在目录,这样就有机会让应用程序去加载我们的DLL。
三、白加黑前置知识 白加黑是一种利用 DLL 劫持技术来绕过安全软件的主动防御,以达到加载恶意程序的目的。...1. dll 文件的搜索路径顺序 dll 加载如果指指定了 dll 文件名而没有指定具体路径一般是按照一定的路径顺序一次去搜索,如果能在搜索到正确的 dll 之前使其先搜索到我们的恶意 dll 就能造成...,静态调用由系统自动加载一般不会对 dll 进行校验,但是动态调用不同,一些程序为了防止 dll 劫持,会对自己的一些位置确切固定不变的 dll 进行校验,如果发现被篡改了则不会加载。...如何让其加载我们的 dll 跟 dll 的搜索路径顺序有关,不过不是很重要,一般我们能利用的 dll 都是特殊的 dll,无论 SafeDllSearchMode 是否开启最终都是在当前路径之下搜索。...,注意一定要从安装位置拖入,不然看不到当前路径加载的 dll: 可以看到了加载了 ffmpeg.dll,以及很多系统 dll。
那么,在这种情况下,Windows系统会按照特定的顺序去搜索一些目录,来确定DLL的完整路径。关于动态链接库的搜索顺序的更多详细资料请参阅MSDN。...根据MSDN文档的约定,在使用了DLL的相对路径 调用LoadLibrary函数时,系统会依次从下面几个位置去查找所需要调用的DLL文件。 1.程序所在目录。 2.加载 DLL 时所在的当前目录。...1,即安全DLL搜索模式开启时,查找DLL的目录顺序如下: 1.程序所在目录 2.系统目录即 SYSTEM32 目录。...在上述描述加载DLL的整个过程中,DLL劫持漏洞就是在系统进行安装“DLL路径搜索目录顺序”搜索DLL的时候发生的。...无论安全DLL搜索模式是否开启,系统总是首先会从应用程序(程序安装目录)所在目录加载DLL,如果没有找到就按照上面的顺序依次进行搜索。
领取专属 10元无门槛券
手把手带您无忧上云