如何解决转发的 WinAPI 的循环依赖?

2023-12-26

我试图找到一种方法来解析映射到进程中的特定 API 的内存地址和 DLL 文件名。大多数问题可以通过 DLL 中的导入/导出表以及分析映射模块的导入地址表来解决。这适用于大多数功能。

但这个问题发生在一些人身上转发功能 https://blogs.msdn.microsoft.com/oldnewthing/20060719-24/?p=30473。这种函数的一个例子是DeleteProcThreadAttributeList在我的 Windows 10 系统上。例如,如果我使用这样的函数构建一个测试 32 位进程,或者更好的是,让我们使用 32 位版本cmd.exe from c:\windows\syswow64\cmd.exe图像,然后尝试分析其导入表。原来这个函数是从API Set使用虚拟名称API-MS-WIN-CORE-PROCESSTHREADS-L1-1-2.DLL:

要查找它重定向到的实际文件,我执行以下操作:

HMODULE hMM = ::LoadLibraryEx(L"API-MS-WIN-CORE-PROCESSTHREADS-L1-1-2.DLL", 
    NULL, DONT_RESOLVE_DLL_REFERENCES);
WCHAR buffModPath[MAX_PATH];
::GetModuleFileNameEx(::GetCurrentProcess(), hMM, buffModPath, _countof(buffModPath));
::FreeLibrary(hMM);

这给了我buffModPath as C:\Windows\System32\KERNEL32.DLL.

因为我是从 32 位进程调用它,所以我现在检查导出表c:\windows\syswow64\KERNEL32.DLL module:

这表明DeleteProcThreadAttributeList被转发到api-ms-win-core-processthreads-l1-1-0.DeleteProcThreadAttributeList.

好的,然后我再次使用我的方法来解决虚拟的重定向api-ms-win-core-processthreads-l1-1-0.dllAPI集:

HMODULE hMM = ::LoadLibraryEx(L"api-ms-win-core-processthreads-l1-1-0.dll", 
    NULL, DONT_RESOLVE_DLL_REFERENCES);
WCHAR buffModPath[MAX_PATH];
::GetModuleFileNameEx(::GetCurrentProcess(), hMM, buffModPath, _countof(buffModPath));
::FreeLibrary(hMM);

这给了我C:\Windows\System32\KERNEL32.DLL,这让我回到了开始的地方。

那么,如何像操作系统模块加载器那样解决对实际 DLL 地址/入口点的循环依赖呢?


我想无论发生什么如果你GetProcAddress其中一个出口应该是一个黑匣子。

PEB 在 Windows 7+ 中具有 ApiSetMap 成员,其中包含加载程序使用的设置信息。该数据的格式至少改变了3次,但映射不仅仅是从“API-*.dll”到“*32.dll”。

你可以阅读这个概念的微软专利here http://www.patentsencyclopedia.com/app/20140366045.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解决转发的 WinAPI 的循环依赖? 的相关文章

  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 如何设置JVM的PATH环境变量

    我正在尝试运行使用 Java 7 ProcessBuilder 安装在我的系统上的可执行文件 我注意到环境变量 PATH 可以通过 System getenv PATH 不包括我自己的自定义设置路径 它返回这个 usr bin bin us
  • Excel表格行列查找

    我在使用某些 Excel 函数时遇到了困难 我有一个带有行标题和列标题以及数据的表 例如 如果我有一种披萨 与其尺寸交叉 数据就是价格 S M L XL Cheese 6 6 5 8 10 Pepperoni 6 5 7 5 10 12 S
  • 使用 argparse 输出来调用函数

    目前我的代码如下所示 它允许我解析我的程序脚本获取的多个参数 有没有更接近 最佳实践 的不同方法 我还没有看到实际使用输出的代码argparse 仅介绍如何设置 def useArguments x 0 while x lt 5 if x
  • Angular 6 - 如何在组件级别应用外部 CSS 样式表(传单)?

    尝试在 Angular 6 组件中使用 Leaflet 根据 css 文件的链接方式 地图显示正常或混乱 缺少的图块顺序不正确 这意味着未考虑 css 我设法让它与 2 个解决方案一起使用 将 css 链接到应用程序级别 全局 但不仅仅链接
  • 您可以在动态计时器上触发 AWS Lambda 吗?

    有没有办法在动态计时器上触发 AWS Lambda 目前 我正在利用预定事件来触发 lambda 但这是一个设定的计时器 有没有办法动态设置从 Lambda 内部触发 Lambda 的时间 这里的想法是 这个 Lambda 执行特定的检查并
  • Rails、yml 和多行

    我一生都无法从我的语言环境文件中获取多行 yaml 来工作 我尝试了多种解决方案的每种组合 但没有成功 我努力了key key gt 双引号 单引号 n 下一行的值 缩进 可能还有其他一些 在我看来我只是使用t key 我在这里撕扯我的头发
  • 将分面 ggplots (facet_wrap) 与 R 中的owplot 对齐

    我正在尝试对齐两个面板图 它们是用facet wrap in ggplot按照以下方式 注意 面板 A 需要保持为空 然而 我注意到面板 B 的 y 轴与面板 C 的最后一个图的 y 轴并不完全对齐 尽管选项axis lb 在两个方面 Co
  • 按日期对 HashMap 进行排序

    在 Java 类中 我有一个按日期重新排序现有 HashMap 的方法 HashMap 是一种类型
  • 在 CodeIgniter 上集成 Bootstrap

    我正在尝试在 codeigniter 网站上使用 bootstrap 但似乎找不到 bootstrap 文件
  • 带参数的路由不起作用

    我正在关注tutorial https openui5 hana ondemand com docs guide 2366345a94f64ec1a80f9d9ce50a59ef html在这里 我陷入了带参数的路由 该示例应用程序未在我的
  • C++ 元函数来确定类型是否可调用

    是否可以编写一个 C 0x 元函数来确定类型是否可调用 我所说的可调用类型是指函数类型 函数指针类型 函数引用类型 这些由boost function types is callable builtin lambda 类型以及任何具有重载的
  • 为什么 Rubocop 不允许 html_safe 或 raw() Rails

    这是我没有通过 Rubocop 的代码 因为 Rails OutputSafety 将字符串标记为 html 安全可能存在安全风险 def number with html delimiter num number with delimit
  • 运行“yarn run”时将参数传递给“node”可执行文件

    节点可以使用各种选项启动 特别有趣的是 inspect flag node inspect node modules bin jest some spec js 是否可以通过 inspect以某种方式标记yarn run 例如 yarn r
  • 使用 Windows 身份验证的 WCF jsonP - 可能吗?

    我正在托管一个输出 jsonp 的 wcf 服务 来自 IIS 打开 Windows 身份验证 的响应是 经过身份验证的服务不支持跨域 javascript 回调 有办法解决这个问题吗 我必须打开 Windows 身份验证 但也想使用 wc
  • SpriteKit 内存泄漏更改包含 SKTileMapNodes 的场景

    我正在尝试使用 Swift SpriteKit 和 SKTileMaps 创建一个简单的 2d 平台游戏 但每次我在包含 SKTileMaps 的场景之间切换时 我都会在 Xcode Instruments 中看到大量内存泄漏 我已经尽可能
  • 将字符串转换为负数

    我需要从字符串类型转换为数字 list 5 4 3 variable Input list 5 4 3 variable epected output 我在转换负数时遇到问题 list 0 int list 0 ValueError 以 1
  • 将 Parse.com 密码迁移到 Django

    我正在尝试将数据从 Parse com 迁移到我们自己的服务器 为此 用户密码也必须迁移 Parse com 使用标准 bcrypt 密码加密 密码按以下格式显示 如何将密码从 Parse 移至另一台服务器 https www parse
  • 当鼠标放置在包含的 div 元素上时更改锚文本的颜色

    当我将鼠标移到文本上时 文本颜色会发生变化 a 链接 但当我将其放在 div 包含它的 当鼠标放在包含的 div 上时 我也想更改锚文本的颜色 more games background color F1F1F1 margin left 1
  • Jackson Yaml 类型信息在序列化时错误

    通过 Jackson 将对象序列化为 yml 时 我得到以下输出 commands dev
  • 如何解决转发的 WinAPI 的循环依赖?

    我试图找到一种方法来解析映射到进程中的特定 API 的内存地址和 DLL 文件名 大多数问题可以通过 DLL 中的导入 导出表以及分析映射模块的导入地址表来解决 这适用于大多数功能 但这个问题发生在一些人身上转发功能 https blogs