掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
プロセスのベースアドレスの取得のしかた (ID:49077)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Mr.XRAY様 >これ,もう一度確認してみてください.違うと思しますよ. ご指摘の通りでした。 32ビット版がベースアドレスらしきものを返しており、64ビット版は駄目でした。 EnumProcessModulesExは追加はできたものの、64ビットKernel32.dll内の関数を使用していないため、 64ビット版のアプリケーションのベースアドレスが取得できないのですね。納得できました。 ところで、もう一つ教えていただいてよろしいでしょうか? GetProcessMemoryInfo(hProcHandle, pmc, cb); pnt := GetModuleBaseAddress(hProcHandle ,str); 現在、ここでベースアドレスを取得した後、以下の様な感じでプロセスをダンプしようと考えています。 しかしReadProcessMemoryで読み取るサイズが正しく取得できません。現在はPPROCESS_MEMORY_COUNTERSの WorkingSetSizeをセットしているのですが、保存されたdump.exeをバイナリエディタで見みると、 PEヘッダの途中位でちょん切れています。セットしているサイズが短いのだと思いますが、この値は どの様にしたら正しく取得できますか? if GetInfo(selected, dBaseAddr, pmc^.WorkingSetSize) then begin hOpen := OpenProcess(PROCESS_VM_READ, FALSE, selected); if hOpen <> INVALID_HANDLE_VALUE then begin dsize := pmc^.WorkingSetSize; SetLength(bBuff, dSize);//ここの値が間違っている様なのですが… ReadProcessMemory(hOpen, pnt, @bBuff[0], dSize, dRead); CloseHandle(hOpen); hFile := CreateFile(PChar('dump.exe'), GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, 0, 0); if hFile <> INVALID_HANDLE_VALUE then begin SetFilePointer(hFile, 0, nil, FILE_BEGIN); WriteFile(hFile, bBuff[0], dSize, dWritten, nil); CloseHandle(hFile); end; end; よろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.