2

我正在尝试对某些软件进行逆向工程,以更好地了解操作系统的低级工作原理。我想用来自 objdump -t 的相应值替换来自 objdump -d 的原始地址转储,即使是 -Dslx 选项似乎也错过了一些东西。

objdump -t 的输出如下所示:

00000000 l    d  .bss   00000000 .bss
00000000 g       .text  00000000 fred

并且我能够在索引 1 和 NF 处使用 awk 提取所需的信息(我使用的实际代码在另一台计算机上)。对于每条记录,我将字段放入一个数组中:

fields[$1] = $NF

从这里我有点迷路了。我想使用这些条目将所有出现的“位置”替换为

fields[location]

此时我只是打印出 sed 命令以供下一步使用,然后手动复制并粘贴命令并执行它。它看起来像

objdump -d test.o | sed -e 's/<loc1>/<name1>/g' 
                        -e 's/<loc2>/<name2>/g' 
                        . . . 
                        -e 's/<locN>/<nameN>/g'

我真的不喜欢这个,我想完全自动化这个。我对一些 Bash 技巧相对缺乏经验,所以很可能有一个我从未听说过的简单解决方案。

示例:(此时我无法访问实际输入,但这对于我的目标来说已经足够接近了)

00000000 g     O .bbs 00000010 size
00000012 g     O .bbs 00000004 count
00000200 l     F .bbs 00000020 anotherVar

+

0x0000030 <main>:
    0x00000034    xx xx      mov   0x00000000, %eax
    0x00000038    xx         push  0x00000012
    0x0000004c    xx xx xx   subl  0x00000200, %ebx

=

0x0000030 <main>:
    0x00000034    xx xx      mov   size, %eax
    0x00000038    xx         push  count
    0x0000004c    xx xx xx   subl  anotherVar, %ebx
4

1 回答 1

1

您的问题可能有比此处给出的更复杂的答案(例如,使用单个 awk、python 或 perl 程序执行整个过程),但在出现该答案之前,您可以使用eval如下方式自动化当前流程。

您说您“打印出 sed 命令以供下一步使用,然后手动复制和粘贴命令并执行它”。假设 XYZ 是生成和打印 sed 命令的管道。不是使用 XYZ 来打印/复制/粘贴,而是使用它来创建要执行的 sed 命令,然后使用它eval来执行命令:

SEDCOM=$(XYZ)
eval $SEDCOM

一个例子:如果我们说
t="echo do do do; echo da da da"
$t
结果输出是
do do do; echo da da da
,但如果我们说
eval $t
输出是
do do do
da da da

于 2012-10-11T17:42:35.263 回答