如何在ida Pro中重新格式化C结构

时间:2019-02-23 20:23:56

标签: arm disassembly ida radare2

我正试图反汇编基于arm64的二进制文件,我想知道如何重新格式化结构,而不是不是字符串,而是至少要使它们位于代码之前的值之前? 举个例子

static struct mystruct cmn = {
      { 0xFF, 0x03, {0x98, 0x81, 0x03} },
      { 0x01, 0x01, {0x00} },
      { 0x02, 0x01, {0x00} },
      { 0x03, 0x01, {0x53} },
};

但是用二进制实际上很难记住,有时候我在反转时会犯错误。那么,是否有可能在ida pro 7.2或radare 2中获得完全相同的排列字符?

https://del.dog/raw/fomukovata

1 个答案:

答案 0 :(得分:0)

环境

  • radare2: radare2 4.2.0-git 23519 @ linux-x86-64 git.4.1.1-84-g0c46c3e1e commit:0c46c3e1e30bb272a5a05fc367d874af32b41fe4 build:2020-01-08__09:49:0
  • 系统: Ubuntu 18.04.3 LTS

解决方案

  • 正如@David Hoelzer所述,您必须首先导出内存中数据的格式。
  • 如果您知道数据的结构,我们可以在radare2中使用两个命令来构造该内存区域。
    • 命令1:pf.name [0 | cnt] fmt#定义新的命名格式
    • 命令2:Cf [?] [-] [sz] [0 | cnt] [fmt] [a0 a1 ...] [@addr]#格式内存(请参阅pf?)

示例

遵循您提供的结构。

user@host:~$ r2 /bin/ls
[0x1000011e8]> pf.mystruct [5]c[3]c[3]c[3]c
[0x1000011e8]> Cf 14 ? (mystruct)example
[0x1000011e8]> pd 1
            ;-- rip:
            0x1000011e8 format ? (mystruct)example {
 example :
                struct<mystruct>
0x1000011e8 = [ 'U', 'H', '.', '.', 'A' ]
0x1000011ed = [ 'W', 'A', 'V' ]
0x1000011f0 = [ 'A', 'U', 'A' ]
0x1000011f3 = [ 'T', 'S', 'H' ]
} 14
[0x1000011e8]> q
user@host:~$