同时使用 sed 和 awk 创建替换地图



我正在尝试对一些软件进行逆向工程,以更好地了解操作系统的较低级别工作原理。我想用 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

对于您的问题,可能有一个比这里给出的更复杂的答案(例如,使用单个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

相关内容

  • 没有找到相关文章

最新更新