首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

搜索位置以什么顺序加载引用的DLL?

搜索位置以什么顺序加载引用的DLL?

在Windows操作系统中,当一个程序运行时,它会加载各种DLL(动态链接库)来运行。这些DLL可以位于系统目录、应用程序目录或其他目录中。在加载这些DLL时,操作系统会按照一定的顺序进行搜索。以下是搜索顺序:

  1. 应用程序目录:首先,操作系统会在应用程序目录中查找DLL。如果找到了相应的DLL,则加载该DLL。
  2. 系统目录:如果在应用程序目录中找不到DLL,操作系统会在系统目录中查找。系统目录通常包含Windows操作系统使用的核心DLL。
  3. 当前路径:如果在系统目录中也找不到DLL,操作系统会在当前路径中查找。
  4. PATH环境变量:如果在当前路径中仍然找不到DLL,操作系统会在PATH环境变量中指定的目录中查找。

请注意,这个顺序是固定的,不能更改。如果需要加载的DLL位于其他目录中,需要将该目录添加到PATH环境变量中。

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

无法加载 DLL xpstar.dll 或它引用一个 DLL。原因: 126(找不到指定模块。)。

需要复制数据库文件,把SQL服务停了,不使用脱机或者分离是觉得比较慢,结果就是再次重启服务后,SQL开始报错:   无法加载 DLL xpstar.dll 或它引用一个 DLL。...原因: 126(找不到指定模块。)。...1.有人通过这个xpstar.dll重新复制到SQL ServerBinn目录解决,我对比服务器目录下和我本机(正常SQL Server)目录下所有的xpstar.dll,   按照本机目下添加一遍没有解决.... 2.也有通过下载了SQLEXPRESS SP2补丁后,系统报错问题得到了修复。...3.使用SQL 安装包中修复功能解决问题,修复过程中SQL服务会暂停,大概二十分钟左右,修复完成后,SQL不再报错。 ?

2.2K31

java:自动搜索不同位置properties文件并加载

那么你会问了,这样以来,系统中存在两个同样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个位置如果找得到就加载,找不到或抛出任何异常都会被忽略不会报错

1.3K20
  • Windows 下 WPF 开发 调试应用程序在什么时机加载Dll 模块

    在尝试优化性能时候,如何可以了解到在应用程序启动过程中,在什么步骤开始加载了某些 Dll 文件 在 VisualStudio 调试->窗口->模块 可以看到当前应用程序加载所有模块,也就是应用程序加载了哪些...Dll 文件 一个调试方法是在合适逻辑里面添加断点,或者在软件启动完成之后,通过模块了解应用程序加载了哪些 DLL 文件,从而了解应用程序启动慢是否因为加载了不应该加载模块 在 dotnet 里面...,可以通过辅助代码了解是在哪些模块加载DLL 文件,例如我在调试 SVG 库 是在哪个模块加载,我不期望在启动过程中有加载 SVG 相关 DLL 文件,那么我可以如何了解到是在应用程序哪个逻辑里面加载...; } 在进入 CurrentDomain_AssemblyLoad 函数加载到 SharpVectors 模块时候,将会进入断点。...欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后作品务必相同许可发布。

    59630

    Bypass-UAC(用户帐户控制)那些事

    注册表项指定DLL是已经被操作系统加载过后DLL,不会被应用程序搜索加载。...但这只是dll劫持其中一种途径,他有这些途径: (1) DLL替换:用恶意DLL替换掉合法DLL (2) DLL搜索顺序劫持:当应用程序加载DLL时候,如果没有带指定DLL路径,那么程序将会特定顺序依次在指定路径下搜索加载...通过将恶意DLL放在真实DLL之前搜索位置,就可以劫持搜索顺序,劫持目录有时候包括目标应用程序工作目录。...文件搜索路径定位到包含恶意DLL地方。...当加载某些较高完整性级别进程时,会引用这些注册表项,从而导致进程加载用户控制DLL。这些DLL包含导致会话权限提升payload。此模块修改注册表项,但在调用payload后将清除该项。

    1.9K20

    CLR查找和加载程序集方式(一)

    C#开发者在开发WinForm程序、Asp.Net Web(MVC)程序等,不可避免在项目中引用许多第三方DLL程序集, 编译后引用dll都放在根目录下。...随着项目的日益增大,根目录下充满了各种各样dll,非常不美观。如果能够把dll按照想要目录来存放,那么系统就美观多了。 此问题就涉及到 CLR查找和加载程序集方式。...系统搜索dll目录以及顺序   CLR解析一个程序集会在一个根目录内进行搜索,整个探索过程又称Probing,这个根目录很显然就是当前包含当前程序集目录。   ...程序搜索DLL顺序如下(区分强名称签名、没有强名称签名程序集) 没有做强名称签名程序集 程序根目录 根目录下面,与被引用程序集同名子目录 根目录下面被明确定义为私有目录子目录 在目录中查找时候...如何让程序识别不同目录下dll? 我们看到,上面的顺序无论是否有强名称签名看,都提到了一个名词 “私有目录”。

    1.8K30

    BypassUAC技术总结

    分别对应应用程序什么权限运行 asInvoker:父进程是什么权限,此应用程序就是什么权限 requireAdministrator:需要以管理员权限来运行,此类应用程序图标右下方会有个盾牌标记...,dll加载也遵循着Know DLLs注册表项机制:Know DLLs注册表项指定DLL是已经被操作系统加载过后DLL,不会被应用程序搜索加载。...但这只是dll劫持其中一种途径,他有这些途径: (1) DLL替换:用恶意DLL替换掉合法DLL (2) DLL搜索顺序劫持:当应用程序加载DLL时候,如果没有带指定DLL路径,那么程序将会特定顺序依次在指定路径下搜索加载...通过将恶意DLL放在真实DLL之前搜索位置,就可以劫持搜索顺序,劫持目录有时候包括目标应用程序工作目录。...文件搜索路径定位到包含恶意DLL地方。

    87830

    在Windows中劫持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文件名始终是固定

    2.1K10

    模拟隐蔽操作 - 动态调用(避免 PInvoke 和 API 挂钩)

    您可以使用动态调用(我称之为 DInvoke)在运行时加载 DLL 并使用指向其在内存中位置指针调用函数,而不是使用 PInvoke 静态导入 API 调用。...GetPebLdrModuleEntry: 通过在 PEB 中搜索对它引用搜索当前加载模块基地址。...它在初始化时被加载到每个 Windows 进程中,因此我们知道它已经被加载。因此,我们可以安全地搜索 PEB 加载模块列表找到对其引用。一旦我们从 PEB 中找到它基地址,我们就打印该地址。...然后,我们将按上述顺序调用它(减去系统调用),证明每种机制都成功地避开了 API 挂钩。...DynamicAPIInvoke当引用 DLL 尚未加载到当前进程中时,使用可以生成这些异常模块加载事件。

    2K00

    通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

    什么是程序集 用csc.exe进行编译 .NET程序执行原理 JIT编译 AOT编译 程序集规则 程序集加载方式 强名称程序集 程序集搜索规则 项目的依赖顺序什么Newtonsoft.Json版本不一致...程序集搜索规则 事实上,按照存储位置来说,程序集分为共享(全局)程序集和私有程序集。...现在CLR开始搜索程序集aa,首先它会从demo.exe控制台同一目录(也就是D:\Demo\Debug\)中查找程序集aa,搜索文件名为aa.dll文件,如果没找到就在该目录下程序集名称为目录目录中查找...这是为什么? 1.这是因为依赖顺序引起。...,事实上,类似于mscorlib.dll、System.dll这样FCL类库被引用的如此频繁,它已经是我们.NET编程中必不可少一部分,几尽每个项目都会引用,为了不再每次使用时候都复制一份,所以计算机上有一个位置专门存储这些我们都会用到程序集

    2.7K63

    深入解析 DLL 劫持漏洞

    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

    3.2K00

    通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

    CLR在查找引用程序集位置时候,第一个判断条件是 判断该程序集是否被签名。 什么是签名?...现在CLR开始搜索程序集aa,首先它会从demo.exe控制台同一目录(也就是D:\Demo\Debug\)中查找程序集aa,搜索文件名为aa.dll文件,如果没找到就在该目录下程序集名称为目录目录中查找...这是为什么? 1.这是因为依赖顺序引起。...,事实上,类似于mscorlib.dll、System.dll这样FCL类库被引用的如此频繁,它已经是我们.NET编程中必不可少一部分,几尽每个项目都会引用,为了不再每次使用时候都复制一份,所以计算机上有一个位置专门存储这些我们都会用到程序集...简单延伸两个问题,mscorlib.dll加载在哪里?内存堆中又是什么一个情况?

    4.4K30

    干货 | DLL劫持

    什么dll DLL(Dynamic Link Library),全称动态链接库,是Windows系统上程序正常运⾏必不可少功 能模块,是实现代码重⽤具体形式。...DLL劫持漏洞(DLL Hijacking Exploit),严格点说,它是通过⼀些⼿段来劫持或者替换正常DLL,欺 骗正常程序加载预先准备好恶意DLL⼀类漏洞统称。...这时,系统会按照特定顺序搜索⼀ 些⽬录,确定DLL完整路径。...根据MSDN⽂档约定,在使⽤相对路径调⽤ LoadLibrary (同样适 ⽤于其他同类DLL LoadLibraryEx,ShellExecuteEx等)时,系统会依次从以下6个位置去查找所需要...PATH环境变量中列出⽬录 dll劫持就发⽣在系统按照顺序搜索这些特定⽬录时。只要⿊客能够将恶意DLL放在优先于正 常DLL所在⽬录,就能够欺骗系统优先加载恶意DLL,来实现“劫持”。

    1.9K20

    SQL | SQL 必知必会笔记 (二)

    所以要注意操作符组合求值顺序。 要选取供应商 DLL01 或 BRS01 制造且价格在 10 美元及以上所有产品该如何实现?...用通配符进行过滤 主要内容:介绍什么是通配符、如何使用通配符以及怎样使用 LIKE 操作符进行通配搜索,以便对数据进行复杂过滤。...根据 DBMS 不同及其配置,搜索可以是区分大小写。 除了能匹配一个或多个字符外,% 还能匹配 0 个字符。% 代表搜索模式中给定位置 0 个、1 个或多个字符。...把通配符置于开始处,搜索起来是最慢。 仔细注意通配符位置。如果放错地方,可能不会返回想要数据。...创建计算字段 主要内容:介绍什么是计算字段,如何创建计算字段,以及如何从应用程序中使用别名引用它们。 计算字段 存储在数据库表中数据一般不是应用程序所需要格式。

    1.2K20

    使用DLLHSC扫描DLL劫持目标

    DLLHSC DLLHSC全称为DLL Hijack SCanner,即DLL劫持扫描工具,DLLHSC可以生成线索并自动帮助广大研究人员发现合适DLL劫持攻击目标,以方便实现DLL搜索顺序劫持。...DLLHSC实现了这个工具核心功能,detour项目生成一个用于钩住APIDLL文件,Payload项目负责生成用作概念验证DLL,广大研究人员可以测试可执行文件并查看是否可以通过搜索顺序劫持技术来加载它...工具操作模式 DLLHSC实现了三种操作模式,具体如下: 1、轻量级模式 将可执行镜像加载到内存中,解析导入表,然后用Payload DLL替换导入表中引用任何DLL。...下图中显示了OleView.dll加载Payload DLL时返回错误消息提示框: 该工具将等待10秒或-t秒最长时间,确保进程初始化已完成,并且已生成任意消息框。...此模式旨在提供可用作Payload载DLL验证,仅用于为分析人员提供潜在目标: 当进程形式启动时,-rt参数会将提供可执行镜像加载到其地址空间中模块打印出来: 项目地址:点击底部【阅读原文】

    1.1K20

    Dll注入技术之劫持注入「建议收藏」

    引用网络中原理讲解 ●背景知识● 首先我们要了解Windows为什么可以DLL劫持呢?主要是因为Windows资源共享机制。...为了提供这样功能,在Window2000开始,微软加了一个特性,强制操作系统加载程序首先从应用程序目录中加载模块,只有当加载程序无法在应用程序目录中找到文件,才搜索其他目录。...●什么DLL劫持● 根据前面说Windows资源共享机制,操作系统加载程序首先从应用程序目录中加载模块。...这一特性在注册表中也有体现:HKLM\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode,如果为1,搜索顺序为:应用程序所在目录...但是不管是哪种情况,第一个搜索肯定是应用程序所在目录,这样就有机会让应用程序去加载我们DLL

    1.9K30

    白加黑免杀制作(详细)

    三、白加黑前置知识 白加黑是一种利用 DLL 劫持技术来绕过安全软件主动防御,达到加载恶意程序目的。...1. dll 文件搜索路径顺序 dll 加载如果指指定了 dll 文件名而没有指定具体路径一般是按照一定路径顺序一次去搜索,如果能在搜索到正确 dll 之前使其先搜索到我们恶意 dll 就能造成...,静态调用由系统自动加载一般不会对 dll 进行校验,但是动态调用不同,一些程序为了防止 dll 劫持,会对自己一些位置确切固定不变 dll 进行校验,如果发现被篡改了则不会加载。...如何让其加载我们 dlldll 搜索路径顺序有关,不过不是很重要,一般我们能利用 dll 都是特殊 dll,无论 SafeDllSearchMode 是否开启最终都是在当前路径之下搜索。...,注意一定要从安装位置拖入,不然看不到当前路径加载 dll: 可以看到了加载了 ffmpeg.dll,以及很多系统 dll

    5.3K71

    从原理解析如何防御DLL劫持

    那么,在这种情况下,Windows系统会按照特定顺序搜索一些目录,来确定DLL完整路径。关于动态链接库搜索顺序更多详细资料请参阅MSDN。...根据MSDN文档约定,在使用了DLL相对路径 调用LoadLibrary函数时,系统会依次从下面几个位置去查找所需要调用DLL文件。 1.程序所在目录。 2.加载 DLL 时所在的当前目录。...1,即安全DLL搜索模式开启时,查找DLL目录顺序如下: 1.程序所在目录 2.系统目录即 SYSTEM32 目录。...在上述描述加载DLL整个过程中,DLL劫持漏洞就是在系统进行安装“DLL路径搜索目录顺序搜索DLL时候发生。...无论安全DLL搜索模式是否开启,系统总是首先会从应用程序(程序安装目录)所在目录加载DLL,如果没有找到就按照上面的顺序依次进行搜索

    2.4K10
    领券