2009-03-01 8 views
3

私は、DUMPBINを使用してエクスポートを一覧表示するチュートリアルに続いて、エクスポートされた関数のアセンブリコードを取得するためにOllyDbgを使用しています。エクスポートテーブルRVAが逆アセンブリの実アドレスに対応していないとすれば、完全なdisassemlyでどのように関数コードを見つけることができますか?逆アセンブリでの関数の検索

+0

ただ好奇心から、どのチュートリアルですか? – Nils

+1

それはリバースエンジニアリングの秘密、Eldad Eilamの一部です。リバースエンジニアリングIA-32 Windowsアプリケーションのやや精巧な作業。彼の最初の目標は、最小限のツールで「死んだ」リスティングを読むスキルを磨くことです。 – ProfK

答えて

2

RVAは再配置可能な仮想アドレスです。プロセス空間で実際のアドレスを見つけるには、プロセスでモジュールがロードされたベースアドレスを知る必要があります。ベースアドレスをRVAに追加すると、実際のアドレスが得られます。私はollydbgを使用していませんが、それが接続されているプロセスにロードされたモジュールのベースアドレスを提供しなかった場合、私は驚くでしょう。なんらかの理由でその情報が提供されない場合は、sysinternalツールからprocexp.exeを使用して取得できます。

2

少なくとも高水準言語で書かれたプログラムは、スタックフレームを設定するコードです。

問題のコードを生成するために使用されているコンパイラが分かっている場合は、何を探すべきかを知ることができます。私の例で

$ cat main.c 
int main(int argc, char **argv) { 
     return 1; 
} 
$ gcc -m32 -S main.c 
$ cat main.s 
     .file  "main.c" 
     .text 
.globl main 
     .type main, @function 
main: 
     leal  4(%esp), %ecx 
     andl  $-16, %esp 
     pushl -4(%ecx) 
     pushl %ebp 
     movl  %esp, %ebp 
     pushl %ecx 
     movl  $1, %eax 
     popl  %ecx 
     popl  %ebp 
     leal  -4(%ecx), %esp 
     ret 
     .size main, .-main 
     .ident "GCC: (Debian 4.3.3-4) 4.3.3" 
     .section .note.GNU-stack,"",@progbits 

MOVL%は、ESP、%EBP命令は、セットアップコードの最後の命令です。

free-as-in-beer versionがダウンロード可能な市販のディスアセンブラIDA Proは、自動的に機能を見つけるのには大変効果的です。

+0

私は無料のIDA Proを持っています。それは素晴らしいですが、私はこれについて本の著者に固執し、それを「冷たい」行います。あなたの答えが示唆するように、私は何の機能も探していませんでしたが、特定の輸出を探していました。 ここに表示される奇妙な言葉は、私はWindowsのみを知っています:-) – ProfK

+0

"奇妙な言葉"はUnixシェルセッションのコピー&ペーストされたテキストで、 "$"はプロンプトです。最小限のCプログラムがx86アセンブリにコンパイルされています。 – hillu

+0

奇妙な言葉はAT&T表記です;-) – ProfK