こんぱいら
■ このスレッドは過去ログ倉庫に格納されています
0041名無し@沢村
NGNG>apiのコールをアセンブラでどうやってかくのか
apiのコールは我が「Visual E++」で実現済みだ。
原理を説明すると、まずcall文でapiをコールするんだよ。call[apiの文字列]というふうに書く。
この[apiの文字列]は、dllに記述されているパブリックネームで書くんだ。
次に[apiの文字列]の部分をアドレスに変換するんだが、これはPEファイル内のIMPORTセクションのアドレスになるんだ。
IMPORTセクションには使用するapiの数だけ6バイトごとにjmp文+アドレスが書いてある。
つまりcall[apiの文字列]はIMPORTセクションに書かれている該当するapiの先頭アドレスを指すわけだ。
だからIMPORTセクションには、どの順番でapiを並べるかを決めておかなくてはならない。これは自分で決めるんだ。
次にIMPORTセクションに書かれているapiごとのjmp文+アドレスだが、これはimportセクションのルックアップテーブルへジャンプするためのものなんだ。
ルックアップテーブルにはDLLごとに使用するapi文字列の先頭アドレスが書かれてるというわけだ。
とまあ、つまりこのアドレスはこれを指す、あのアドレスはあれを指すというふうに、実際のPEファイルを調べてつじつまを合わせるようにしてプログラムをつくれば、実際のdllとのリンクはPEファイルが自動的にやってくれるよ。
つまりおれらは、単にこのアドレスはこれを指す、あのアドレスはあれを指すというふうにつじつまさえ合わせていけばいいんだよ。
「Visual E++」はこのやりかたでapiの呼び出しを実現してるんだから、間違いないよ。
わかったかな?おまいらよ?
■ このスレッドは過去ログ倉庫に格納されています