Linux上的PDB符号服务器

0xC*_*22L 1 windbg debug-symbols pdb-files

如何在运行HTTP服务器的Linux机器上设置符号服务器以与WinDbg和朋友一起使用?

Microsoft提供的上游符号服务器是HTTP服务器(例如http://msdl.microsoft.com/download/symbols),我想模仿它们的行为并启用通常的Win32调试器从我自己的下载符号.

如何在不模仿Windows的点点滴滴的情况下实现这一目标(例如通过Wine或KVM)?

Sea*_*ine 5

如果您还没有,可能需要了解如何在Windows上创建符号存储,因为要在Linux 上创建符号存储,您需要创建兼容的文件结构.

首先,重要的是要注意通过http共享符号服务器并不特别.创建符号存储后,只需将其放在可通过http访问的位置即可.所以,真正重要的是这项工作symstore.exe.

我知道你不想接受使用仿真的想法,但你真的有两个选择:

  1. symstore.exe使用Wine之类的东西直接在Linux机器上执行.(我不知道KVM在这里有多好用.)
  2. 重新创建symstore.exe您需要使用的功能.

重新创建symstore.exe可以很简单,如果你不希望使用任何其更先进的功能,如交易,文件链接,或多个用户能够导入.


什么symstore.exe做的简化视图:

  1. 在输出子目录中创建一个子目录,其中包含每个pdb导入的名称.
  2. 散列pdb文件并创建一个带有散列名称的子文件夹.
  3. 将其复制pdb到哈希目录,可选择压缩它.(或者,根据标志,存储具有从中导入file.ptr的位置的文件pdb.)
  4. refs.ptr在哈希目录中添加一行,其中包含有关导入的PDB的一些信息.(我不相信客户端实际使用此文件dgbhelp.dll,因此可能会省略此步骤.)
  5. 更新文件[output directory]\000Admin以支持事务等事务.(同样,这只是为了未来的运行symstore.exe.)
  6. 触摸pingme.txt输出文件夹.

(更多信息在这里.)

这听起来并不复杂,但毫无疑问,可能需要一些时间来做对.首先,您可能需要查看Mozilla的构建脚本,该脚本pdbs 放置在Windows调试器知道如何阅读的结构中.有关它的更多信息,请点击此处.


小智 5

您可以使用python symstore包将PDB(和exe/dll)文件发布到本地symstore目录,然后您只需要将该目录与Web服务器一起提供.

  • 将Web服务器配置为目录的服务器竞争,例如/ var/www/symbols
  • 安装'symstore'python包

每次需要发布新的PDB/exe/dll文件时,请将它们放在Web服务器上的某个位置.然后运行python包提供的'symstore'命令,例如

symstore/var/www/symbols pdb1 pdb2 ...

这会将所有指定的文件复制到正确的/ var/www/symbols子目录中,并在符号存储的元文件中创建一个事务条目.

symstore包还提供了一个python API,因此可以从任何python进程以编程方式进行发布.

Symstore包安装说明如下:https://pypi.python.org/pypi/symstore/0.1.1