2012-10-11 14 views
2

我试图反向工程的一些软件,以便更好地理解操作系统的较低级别的工作方式。我想,以取代原地址从objdump的-d从objdump的-t相应的值,这意味着即便在-Dslx选择似乎错过转储。使用sed和awk,共同建立替换映射

从objdump的-t输出看起来像这样:

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

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

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' 

我不是很喜欢这个,我想完全自动化这一点。我与一些猛砸技巧的经验相对较少所以机会是有一个简单的解决方案,我从来没有听说过的。

例如:(我没有在这一点上获得实际的投入,但这是目标我有足够接近)

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 
+0

请编辑您的问题,包括给出的输入“数据”和输出示例的两种来源的例子。祝你好运。 – shellter

+0

重新添加示例后,您可能会编写一个小小的C程序,我们可以运行您的命令来编译/ objdump -d/objdump -t等,或者可能会提及特定库文件以在 –

回答

1

有可能是一个更复杂的回答你的问题不是这里给出的(例如,做的全过程的Wi TH单一的awk,Python或Perl程序),但直到出现这个问题的答案,你可以通过如下使用eval自动化您的当前进程。

你说你是“打印出sed命令旁边使用,然后手动复制和粘贴命令并执行它。”假设XYZ是生成和打印sed命令的管道。

SEDCOM=$(XYZ) 
eval $SEDCOM 

一个例子:如果说
t="echo do do do; echo da da da"
$t
而不是使用XYZ打印/复制/粘贴,使用它来创建sed命令来执行,然后用eval执行命令的 输出结果是
do do do; echo da da da
但如果我们不是说
eval $t
输出为
do do do
da da da

+0

上运行它们,事情很好,而且分开,我回到家时就得给它一个镜头。 – AdamSpurgin