如何更改年龄不匹配的 PDB 以使其正确匹配?

2024-03-29

我们的夜间构建过程被破坏了很长一段时间,因此它生成的 PDB 文件与相应的图像文件的年龄相差几个小时。我已经解决了这个问题。

但是,我想开始使用符号服务器,但由于必须使用这些年龄不匹配的 pdb 文件而无法开始。我通过使用 Windbg 中的 .symopt +0x40 方法解决了这个问题。这意味着我必须手动组织我的所有 pdb 文件,并且经过多年的发布,这一点加起来。

我正在寻找一种方法来修改 Windbg 用于标记 pdb 年龄的机制,并强制它与我的图像文件匹配。实用性ChkMatch http://www.debuginfo.com/tools/chkmatch.html做了类似的事情,但是对于 pdb 签名。开发人员在页面上声明“如果可执行文件和 PDB 文件具有不同的签名但年龄相同,则 ChkMatch 能够使它们匹配(有关 PDB 签名和年龄的更多信息,请参阅本文)。如果年龄不同,该工具无法匹配文件匹配。”

我查看了一个十六进制编辑器的内部,甚至发现了看起来像与年龄相对应的位,但它必须在内部引入更多的技巧,因为我无法让它工作。

有任何想法吗?

EDIT: 我不知道这是否有帮助,但在我的特殊情况下,年龄差异是由不必要的重新链接 dll 引起的,这也会重新创建 PDB 文件。但是,我们的构建过程是存储原始 dll(重新链接之前)和重新链接之后的 pdb。我考虑过以某种方式手动重现这样的情况。意思是,强制重新链接 DLL,但在这两种情况下都保存 pdb。然后我可以对两个文件进行二进制比较,看看它们是如何变化的。也许运行某种自动执行此操作的修补软件?通过查看我的控制案例中到底发生了什么变化,也许我可以对公司构建过程中保存的 DLL 和 PDB 执行相同的操作?

EDIT: 我想到了!!!!感谢第一个答案的评论,我查看了《未记录的 Windows 2000 秘密:程序员手册》一书的 pdf 链接。作者详细介绍了 pdb 文件格式。正如我之前所说,我已经将 pdb 加载到十六进制编辑器中,并翻转了一些位,看起来我使年龄/签名匹配,但它不起作用。好吧,在使用 W2k 秘密书中的实用程序将 pdb“分解”到包含的流中之后,我发现它们隐藏了对流 3 中年龄的另一个引用!!!!!!!!!当我也翻转那个时,它在windbg中匹配。这是巨大的!!!!非常感谢...符号服务器我来了!


Windbg 不会修改 pdb 的年龄 - 它只会查找它以匹配可执行文件的年龄 - 编译器在(重新)生成可执行文件和调试文件时会修改它。

现在,根据 debuginfo.com 文章,到达正确的调试目录(类型为 Codeview)、将其与 PDB7 签名进行匹配并对可执行文件内的 Age 或 GUID 进行修改并不困难。为什么这不是一个选择?

我想,你想更新 pdb 吗?恐怕 pdb 是一种专有格式。有多个只读 API(dbghelp.dll 和 dia sdk),但就修改而言,您需要猜测细节才能修改。

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

如何更改年龄不匹配的 PDB 以使其正确匹配? 的相关文章

  • PowerShell 中的 echo 和 Write-Host 有什么区别?

    我对之间的区别感到困惑echo and Write Host在 PowerShell 中 我有两个文件 POC ps1 validatePath ps1 这些文件位于我的本地计算机上 我使用以下命令在远程计算机上运行它们Invoke Com
  • Python - PIP 安装故障排除 - PermissionError: [WinError 5] 访问被拒绝

    使用 PIP 安装新软件包甚至将 pip 本身升级到最新版本时出现以下错误 我正在 Windows 8 1 机器上使用 Python 3 4 运行 pip 该消息告诉我我没有文件的管理权限 我的帐户是管理员帐户 我很感激任何关于如何解决这个
  • Visual Studio Code 安装位置

    我几天前安装了 Visual Studio Code 但现在在我的计算机上找不到可执行文件 它在哪里 我已经检查了程序和功能 我还检查了我的路径 由于某种原因 它也不在其中 更新 10 11 2018 如果您进行完全重新安装 包括卸载计算机
  • .NET 中的 CoCreateInstance 完全匹配吗?

    我有进程内 DLL COM 服务器 但我选择以 DllSurrogate 身份运行 因此从非托管代码 Delphi 中我有 function TComWrapper GetServer IUnknown begin OleCheck CoC
  • 如何获取Windows 7中的“临时文件夹”?

    在 Windows 7 中 如何以编程方式获取系统临时文件夹 The 获取临时路径 http msdn microsoft com en us library windows desktop aa364992 28v vs 85 29 as
  • 如何在 Windows 中拦截 DNS 查询

    我正在研究如何在 Windows 中拦截 DNS 查询 以一种不需要将 DLL 注入到每个进程中的方式 并且理想情况下能够根据发出查询的进程做出决策 因此简单的 DNS 代理服务器是不够的 从表面上看 DNS 查询所采用的路径如下所示 某些
  • Windows 相当于 Mac OS X“打开”命令

    刘畅在这里问了一个与此非常相似的问题 Linux 相当于 Mac OS X 打开 命令 https stackoverflow com questions 264395 linux equivalent of the mac os x op
  • 在 win 7 任务计划程序中顺序运行批处理文件

    我有 2 个批处理文件作为单个任务中的 操作 第一个使用 Microsoft Security Essentials 扫描病毒 第二个让计算机进入睡眠状态 问题是 当任务运行时 似乎两个批处理文件同时运行 也就是说 我可以看到病毒扫描的开始
  • 如何模拟 TCP/IP 错误?

    在多层应用程序上 我需要模拟各种 TCP IP 错误来测试一些重新连接代码 有谁知道我可以使用什么工具 基于 Windows 来实现此目的 谢谢 Scapy http secdev org projects scapy 允许您控制数据包的各
  • 无法安装 Visual Studio C++ 包含文件“excpt.h”

    我正在尝试编译一个 Visual Studio C 项目 但由于编译器报告 无法打开包含文件 excpt h 没有这样的文件或目录 我无法到达任何地方 该问题已在互联网上多次报告 但我找不到有关我的具体情况的任何帮助 问题不在于项目的包含路
  • 如何为Windows 10及以下版本的域名创建自签名证书进行开发?

    I have subdomain example com我用于开发目的 我的 Web 应用程序解决方案包含 Web API 等 我需要从外部系统调用它们 因此我没有使用 localhost 我现在需要测试 SSL 并需要一个证书subdom
  • 自 2012 年以来,WinSock 注册 IO 性能是否有所下降?

    我最近使用 MS 为该 API 提供的稍微可接受的文档编写了基于 WinSock Registered IO RIO 的 UDP 接收 最终的性能非常令人失望 单套接字性能有些稳定 约为每秒 180k 数据包 使用多个 RSS 队列 即多个
  • Windows批处理文件-显示所有子文件夹

    我在使用 Windows 批处理文件返回 JUST 文件夹 忽略文件 时遇到困难 这就是我现在所拥有的 目前它正在返回文件和子子文件夹 for r g in xx do echo g 另外 假设我只想返回以几个不同前缀开头的文件夹 例如 我
  • 如何“安装”自定义 Windows 驱动程序?

    我计划用 C 语言编写一个基本的 Windows 注册表过滤器 该过滤器的目的是挂钩所有 用户和内核特权 注册表调用 以便我可以在我的程序中使用它们 我基本上是复制 Mark Rusinovich 的 regmon 进程监视器 但更基本 我
  • 没有名为“_pywrap_tensorflow_internal”的模块

    在尝试验证tensorflow gpu的安装时 在尝试执行 import tensorflow as tf 时出现ImportError 我在 Windows 7 上使用 Quadro K620 Tensorflow 是使用 pip 安装的
  • 强制节点在 Windows 上使用 git bash

    我有一个 package json 文件 如下所示 name APP version 3 0 0 private true scripts start node app js test test dbLoad env db test tes
  • 如何检查程序是否在 Windows 上的 Ubuntu 上的 Bash 中运行,而不仅仅是普通的 Ubuntu?

    非常简单 确定您所使用的操作系统的通常位置似乎与 Ubuntu for Windows 上的普通 Ubuntu 相同 例如uname a与本机 GNU Linux 安装相同并且 etc os version与 Ubuntu Trusty T
  • Python ctypes:SetWindowsHookEx 回调函数从未被调用

    我正在尝试用 Python 编写一个程序 该程序可以识别何时显示警报框 对话框 它正在处理多个监视器 我希望它在任务栏图标闪烁 弹出错误 通知等时在辅助监视器上显示可视化效果 据我所知 检测这些事件的方法是使用消息挂钩 如下所述 http
  • 无法在 Windows 的多处理环境中“pickle”Tkinter 对象

    我正在尝试创建一个应用程序 其中 Tkinter GUI 由不断获取数据的其他对象更新 我在使用多线程时遇到问题 因此我决定尝试使用多处理模块 我发现您无法在其中运行 Tkinter 窗口multiprocessing Process 这是
  • Python执行windows cmd函数

    我知道你可以使用 subprocess 通过 Python 脚本运行 Linux 终端命令 subprocess call ls l for linux 但我找不到在 Windows 上做同样事情的方法 subprocess call di

随机推荐