メモリ上にあるプロセスを、選択して実行ファイルとして保存したいと考えています。
選択したプロセスの情報をGetModuleInformationで収集し、ベースアドレスからプロセスの長さ分の
データをディスクに書き出すという仕組みで、一応ディスク上にファイルとして保存されます。
しかし残念ながら、保存したファイルを実行しようとしても、
有効なアプリケーションではない旨のエラーが表示され、動作してくれません。
バイナリエディタでダンプしてみると、一見それっぽいのですが、ディスク上のファイルと比較すると、
PEヘッダの後方やファイルの末尾に0の列が追加されており、全体にフォーマットが崩れてしまっている様に見えます。
トレースすると、GetModuleInformationで返るサイズが、ディスク上のファイルサイズより大きく、
その差分の領域に0が並んでいる様にも見えますが、そうであるなら、ファイルの末尾に0が並びそうに思います。
しかし実際には、ファイル内にパーティションの様に0が挿入されています。
当初は、プログラム上の間違いかと思い、言語系の掲示板でアドバイスを仰いだところ、
「メモリ上にあるプロセスは、実行用に展開された状態で、ディスクにある時とは異なるので、
書き出したファイルは、正しいのではないか?」というアドバイスをいただきました。
そこで、書き出したファイルを再配置して、実行可能な形にできないかと模索しているのですが、
ディスク上のPEファイルとメモリ上の状態の対比について、なかなかこれという情報にたどり着けません。
非常に漠然とした質問で恐縮ですが、参考になる資料や、良い情報がありましたら、ご教示下さい。
よろしくお願いします。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/24 03:05 編集
2018/04/24 03:35
2018/04/24 09:55
2018/04/24 10:37
2018/04/25 09:44