Bash 一起使用sed和awk创建替换贴图

Bash 一起使用sed和awk创建替换贴图,bash,shell,sed,awk,objdump,Bash,Shell,Sed,Awk,Objdump,我正在尝试对一些软件进行反向工程,以便更好地理解操作系统的底层工作原理。我想用objdump-t中的相应值替换objdump-d中的原始地址转储,这一点连-Dslx选项似乎都忽略了 objdump-t的输出如下所示: 00000000 l d .bss 00000000 .bss 00000000 g .text 00000000 fred 我能够在索引1和NF中使用awk提取所需的信息(我使用的实际代码在另一台计算机上)。对于每条记录,我将字段放入一个数组中: fi

我正在尝试对一些软件进行反向工程,以便更好地理解操作系统的底层工作原理。我想用objdump-t中的相应值替换objdump-d中的原始地址转储,这一点连-Dslx选项似乎都忽略了

objdump-t的输出如下所示:

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

fields[$1] = $NF
从这里我有点迷路了。我想使用这些条目将所有出现的“location”替换为

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

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

0x0000030:
0x00000034 xx xx mov 0x00000000,%eax
0x00000038 xx推送0x00000012
0x0000004c xx xx xx subl 0x00000200,%ebx
=

0x0000030:
0x00000034 xx xx mov大小,%eax
0x00000038 xx推送计数
0x0000004c xx xx xx子另一个变量%ebx

对于您的问题,可能有一个比这里给出的更复杂的答案(例如,使用单个awk、python或perl程序完成整个过程),但在答案出现之前,您可以使用
eval
自动执行当前过程,如下所示

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

SEDCOM=$(XYZ)
eval $SEDCOM
举个例子:如果我们说
t=“echo do;echo da da”

$t

结果输出为
do;echo da da

但是如果我们说
eval$t

输出为
do-do


da da

请编辑您的问题,以包括“数据”来源和样本输出的示例,给出这些输入。祝你好运。如果你在文章中添加示例,你可能会编写一个小C程序,我们可以在上面运行你的命令来编译/objdump-d/objdump-t等等,或者可能会提到一些特定的库文件来运行它们,就像这样,这样可以把事情很好地分开,回家后我必须试一试。
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
SEDCOM=$(XYZ)
eval $SEDCOM