2017-03-15 49 views
0

私はアセンブリが初めてで、Ollydbgから取ったピンボール関数の例を示したガイドを読んでいました。私は、命令のほとんどは何をすべきか理解しようとしていたが、次の行は、私は完全に混乱していますx86の角括弧Intelアセンブリ

01017455 |. E8 249D0000 CALL <JMP.&[email protected]@Z> 

角括弧は、この点では何を意味するのですか?その機能の名前に何か意味がありますか? 「JMP」混乱しています - それは関数名の一部であり無視されるべきですか?

答えて

2

これはファイルに静的にリンクされた.LIBの呼び出しのようです。 Windowsでは、API /ライブラリ呼び出しは、実行可能ファイルの特別なセクションにあるJMP命令を呼び出すことによって実現されます。

CALL <JMP.&[email protected]@Z> 

例えば

は、次の命令

JMP.&[email protected]@Z 

CALLを行いますCALLはスタックに戻りアドレスをプッシュしてから、このセクションでは、次のJMPの命令にジャンプします。このJMPは返信先アドレスを変更しないため、実質的にはCALLのようになります。簡体

curEIP: 
    CALL <JMP.&[email protected]@Z>  ; pushes (curEIP+insLen) to the stack and JMPs to (some virtual label named) `msvcrt.??3` in this section named above 
    ... 
msvcrt.??3: 
    JMP [email protected]      ; JMPs to `[email protected]` - address of the real function in the statically linked LIB in memory 
    ... 
; after the CALL completes... 

を...それは、以前に実行を継続するために、スタック(初期EIP + instructionLengthInBytes)にプッシュ戻り値のアドレスに戻ります。

この点で山括弧は何を意味していますか?

彼らはあなたに上記のスキーム

の関連データを示すだけの大会であり、その関数の名前に意味のあるものはありますか?

はい。上記を参照。角かっこの間の名前は、デバッガとは異なります。

「JMP」混乱しています - それは関数名の一部であり無視されるべきですか?

<JMP...

は、単に次の文字/アドレスが実行可能に静的にリンクされたライブラリのジャンプテーブルへの参照として解釈されるべきであること、incidcates(特殊(上述で)セクションを含みます)。それを再現するためにPE-Explorer/Debuggerを見てください。

-1

山括弧は、Windows API呼び出しで使用されます。

例えば、私がKernel32ライブラリから関数を使用した場合、Kernel32は、角かっこで呼び出されます。