IMAGE_IMPORT_DESCRIPTOR *plmpDesc;
IMAGE_THUNK_DATA *pThunkINT,*pThunkIAT;
IMAGE_IMPORT_BY_NAME *plmpByName;
ULONG Size;
plmpDesc=(IMAGE_IMPORT_DESCRIPTOR*)ImageDirectoryEntryToData(hMod,TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT,&Size);
ImageDirectoryEntryToDataの戻りを修飾してplmpDescに代入しています。多分、これでplmpDesc(構造体)に値が代入されると思いますが、ImageDirectoryEntryToDataの定義を見るとPVOIDがついていました。どうしてこの式が成り立つのかわからないので教えてください。
while(plmpDesc->Name){
pThunkINT=(IMAGE_THUNK_DATA*)((BYTE*)hMod+plmpDesc->OriginalFirstThunk);
}
上記も同様な疑問です。どうしてhMod+plmpDesc->OriginalFirstThunkの演算結果を代入できるのでしょうか?
while(pThunkINT->u1.Function){
sprintf(strDummy,"%x\t",int((PROC)pThunkIAT->u1.Function));
my_fputs_write1(strDummy);
}
最後ですが、int((PROC)pThunkIAT->u1.Functionのu1.Functionは関数でもないのでどうしてPROCとできるのでしょうか?
コメント(1件)
以下の資料が参考になるのでは?と思います。
■ ImageDirectoryEntryToDataの代わり
http://katahiromz.web.fc2.com/win32/peformat.html
自分も PE フォーマットについて勉強不足なので、あまり偉そうなことは言えないですが。。。