GHIDRA:创建一个填充的字符串数组

逆向工程 吉德拉
2021-06-15 02:07:26

我正在反编译用 Pascal 或 Delphi 编写的 DOS .exe。查看反编译的代码时,似乎有许多字符串以00. 例子:

06 53 54 52 49 4E 47 00 00 00 STRING
07 41 4E 4F 54 48 45 52 00 00 ANOTHER
08 4C 41 53 54 7F 4F 4E 45 00 LAST ONE

前导数字是字符串的长度,使用 Pascal 约定。如果我要运行 .exe,这些字符串会出现在列表中。因此,我假设字符串的组织应该是某种列表。

我的问题是这些:

  1. Ghidra 有没有办法将这些字符串放入一个数组中,每个元素一个字符串?当我点击[它时,它尝试仅根据字符串的长度和第一个字符串的字符来构建数组,并忽略00.

  2. 为什么代码是这样编译的。似乎通过添加填充字节来增加文件的大小,并且我在反编译文件中看到了这些类型的列表。

1个回答

虽然使用 Ghidra 的灵活数组定义结构会很好,但它们的功能有限,以至于我没有发现它们特别有用。

不过,就您而言,填充字节实际上可能会让您的生活更轻松。如果字符串像您的示例一样都是 9 个字节,您可以这样做:

struct pstring {
  byte len;
  char[9] str;
}

然后创建一个pstring实例数组