GHIDRA:如何从文本(地图)文件加载符号

逆向工程 吉德拉 调试符号
2021-06-19 13:17:33

我在为一个非常老的 Delphi-7 EXE 加载符号时遇到问题。我发布了一个关于加载 DBG 文件符号的单独问题。另一种方法是将调试符号(在 MAP 文本文件中可用)转换为其他文本格式并加载它。我在 GHIDRA 票务系统中看到了对这类事情的引用(例如这里),但我在 GHIDRA IDE 的任何地方都找不到这些操作。

关于在 GUI 中的何处定位这些功能(以及所需的文件格式)的指导将不胜感激。也许我需要安装一些可选组件(我只是将 GHIDRA 9.0.4 解压缩到我的 Fedora-30 系统上)。

这是我的相关问题

2个回答

这并不一定是你有特定的地图文件箱的支持,但是你应该能够使用Script ManagerWindow在Ghidra菜单(代码浏览!)。

Ghidra/Features/Python/ghidra_scripts/ImportSymbolsScript.py脚本又名ImportSymbolsScript(来自脚本管理器)可能是您努力的良好开端

这个脚本的描述是:

导入符号脚本.py

 导入带有“symbolName 0xADDRESS”形式的行的文件

哇,'ImportSymbolsScript' 有帮助。我“拒绝”了那个地图文件

...
  Address         Publics by Value

 0001:0000       byte_0
 0001:001A       start
 0001:00D1       __nomain
 0001:00D8       _fclose
 0001:01DA       __fsopen
...

进入:

0001:0000       byte_0
0001:001A       start
0001:00D1       __nomain
0001:00D8       _fclose
0001:01DA       __fsopen
0001:0214       _fopen
0001:0234       __close
...

...并在 GHIDRA '基本编辑器' 中修改了 ImportSymbolsScript.py,如下所示:

# Imports a file with lines in the form "0xSEGMENT:0xADDRESS symbolName"
# @category Data
# @author 

f = "c:\Tools\!Temp\Portable_VB6\Vs6sp6B\setupsp6.map.txt"
  # f.askFile("Give me a file to open", "Go baby go!")

  # for line in file(f.absolutePath):  # note, cannot use open(), since that is in GhidraScript
for line in file(f):  # note, cannot use open(), since that is in GhidraScript

    pieces        = line.split()
    (segm,offset) = pieces[0].split(":")
    segm          = "1000" # dirty hack !!!
    address       = toAddr(long(segm + offset, 16))
    
    print "creating symbol", pieces[1], "at address", address
    createLabel( address, pieces[1], False )

基本的变化是:

  1. 更改了pieces[]的输入顺序
  2. 添加了对段偏移的支持
  3. 修改/调试脚本时的硬编码文件路径以获得更好的工作流程(f = ...)
  4. 将该"1000" +部分添加到 toAddr() 中以模拟需要的段偏移“1000:...”

好吧,它奏效了!!!

:)

运行脚本之前

在此处输入图片说明

后:

在此处输入图片说明