これはファイルに静的にリンクされた.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を見てください。