人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

教えてください。次のリンクのソースコードを見ています。ここでわからない行があるので教えてください。

http://dsas.blog.klab.org/archives/50908743.html

以下はモジュール名を代入しています。mModはハンドルです。そして(BYTE*)をつけて、かつ、pImpDesc->Nameと足しています。どうして(BYTE*)hModとするのでしょうか。この行がやっていることをおしえてもらってもいいですか。

LPSTR pszModName = (LPSTR)((BYTE*)hMod + pImpDesc->Name);


ここでも同じように出てきています。
pImpByName = (IMAGE_IMPORT_BY_NAME*)
((BYTE*)hMod+ pThunkINT->u1.AddressOfData);

以上、よろしくお願いします。

●質問者: mai_mai_mail
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● hissssa
●100ポイント

このソースでは、hModにはGetModuleHandle()ないしLoadLibrary()で得られるハンドル情報が入っていますが、このハンドル情報とは実際にはメモリにロードされたモジュールの先頭アドレスです。
そして、pImpDescのメンバーには、ロードされたモジュールの詳細情報についての、先頭アドレスからの相対アドレス値(バイト単位)が格納されています。
よって、hModの示すアドレス+pImpDescのメンバーが示す相対アドレスの値は、pImpDescのメンバーの情報についての実アドレスを表す事になります。

hModはHMODULE型ですが、これをバイト単位のアドレスとして明確に扱うために、まず最初に(BYTE *)でキャストします。そこにpImpDesc->Nameの値を加えることで、このName情報への実アドレスとなります。最後にその結果を(LPSTR)でキャストすることで、目的である「Name文字列へのポインタ」が得られるわけです。


mai_mai_mailさんのコメント
仰るとおりですね。ありがとうございます。このhModの示すアドレス+pImpDescはOriginalFirstThunkからたどってImage thunk Dataに格納されているアドレスと同じものなのでしょうか。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ