掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
自前でDLLをプロセスへマッピングするには? (ID:73911)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
先般は暗号関係の事でご助言して頂きありがとうございました。 度々で申し訳ないですが今回もご助言をお願い致したいです。 自前でDLLをプロセスへマッピングする為に http://ruffnex.oc.to/kenji/text/load_dll/ を参考にプログラムしたのですがWin7で正常に動作しなくて困っています。 【症状1】RunDLLMain関数の return pMain((HMODULE)pImageBase, DLL_PROCESS_ATTACH, NULL); の部分で下記の例外が発生して終了してしまいます。 0x1000120E で例外がスローされました (ConsoleApplication.exe 内): 0xC0000005: 場所 0x1000120E の実行中にアクセス違反が発生しました 【開発環境・実行環境】 Windows7SP1(データ実行防止:OFF、UAC実行:requireAdministrator) VisualC++ 2015 Community Win32コンソール 【変更点1】全てのPTCHARをTCHAR*に変更 【変更点2】MapDLLFromImage関数の PTCHAR secMemAddr=(PTCHAR) ((PTCHAR)pMemoryImage+psh->VirtualAddress); PTCHAR secFileAddr=(PTCHAR) ((PTCHAR)pDLLFileImage+psh->PointerToRawData); を下記に変更 LPVOID secMemAddr=LPVOID ((LPBYTE)pMemoryImage+psh->VirtualAddress); LPVOID secFileAddr=LPVOID ((LPBYTE)pDLLFileImage+psh->PointerToRawData); 【変更点3】PrepareDLLImage関数の PTCHAR svDllName=(PTCHAR) RVATOVA(pMemoryImage,pid->Name); HMODULE hDll=GetModuleHandle(svDllName); if(hDll==NULL){if((hDll=LoadLibrary(svDllName))==NULL) return FALSE;} を下記に変更 LPSTR svDllName=(LPSTR) RVATOVA(pMemoryImage,pid->Name); wchar_t work[300]; CharToWchar(svDllName,work,300);//char*をwchar_t*へ変更する自作関数 HMODULE hDll=GetModuleHandle(work); if(hDll==NULL){if((hDll=LoadLibrary(work))==NULL) return FALSE;} 【確認点1】 http://ruffnex.oc.to/kenji/text/load_dll/ で紹介されているコードを少し変更(上記の3個の変更点とは異なる)すれば WindowsXPsp3(データ実行防止OFF) VisualC++2003Pro Win32コンソールの環境で正常に構築・実行できる。 【確認点2】 確認点1で構築した実行ファイルを上記のWindows7SP1の環境でも正常に実行できる。 【確認点3】 確認点1のコードを上記のVisualC++ 2015 Community Win32コンソールで構築し、 その実行ファイルを上記のWindows7SP1で実行しても症状1が生じてしまう。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.