2012-10-11 54 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