2

OSの下位レベルの仕組みをよりよく理解するために、いくつかのソフトウェアをリバースエンジニアリングしようとしています。objdump -d からの未加工のアドレス ダンプを objdump -t からの対応する値に置き換えたいと考えていますが、これは -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を使用して印刷/コピー/貼り付けする代わりに、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 に答える