申し訳ありませんが、この発言は、あなたがWindowsシステムで作業していることを前提としています。もしそうでなければ、私は他の実行可能イメージフォーマットでも同様の方法に従うことができると確信しています。あなたは、この特定の例では、画面の出力を変更する方法をターゲット内のデータを変更していないか尋ねるしようとしていると仮定すると、
...
は、あなたが実行可能イメージのPEヘッダを見て考えられていますか?メモリにロードされた特定のデータのアドレスをPEファイルのオフセットに変換することはできますが、問題のイメージのPEヘッダー内のIMAGE_SECTION_HEADER構造を調べることができます。
まず、メモリ内のデータのRVAを計算します。これは、その内部にあるセクションに関連するデータのアドレスです。
第2に、ファイルのヘッダーをバッファーに読み込むことによって、実行可能ファイルのPEヘッダー内のIMAGE_SECTION_HEADER構造体を索引付けします。このヘッダをメモリバッファにロードしたら、ポインタを使ってそれを処理することができます。これと同様に、
IMAGE_NT_HEADERS* pImageHeader = &peHeaderBuffer[0];
あなたのデータが含まれている正しいIMAGE_SECTION_HEADERを見つけた後、あなたがいる場合、このセクションがあるのPEファイルの先頭からのオフセットあなたを与える構造のPointerToRawDataメンバーにアクセスすることができますRVAを追加すると、データが格納されているファイルの先頭からオフセットが取得されます。
明らかに、私の回答はセクションヘッダーをどのように索引付けするか説明していませんが、これはかなり説明がつかないほど面倒な作業です。すべてあなたがしたい場合は
http://msdn.microsoft.com/en-us/library/windows/desktop/ms680336%28v=VS.85%29.aspx
:ここで見つけることができます - 私はあなたがOllyDbgのように、簡単なデバッガ内からexectuableのPEヘッダを見て提案し、PEヘッダの参照MSDNのドキュメンテーションうこの情報をターゲットのものと逆にすることは、OllyDbgを使用することは非常に簡単です。データに対応するセクションが表示されるまでPEヘッダービューをスキップすると、そこにPointerToRawDataメンバーが表示され、これをRVAに追加することができます。
"あなたのデータを含む正しいIMAGE_SECTION_HEADERを見つけた後"。だから、RVAを計算すると、特定のヘッダーに自分のデータが含まれていることをどのように知ることができますか? – Ren
私はもっと説明する必要がありました、申し訳ありません。 メモリ内のデータのアドレスはIMAGE_SECTION_HEADER :: VirtualAddress + [メモリのPEのベースアドレス]とIMAGE_SECTION_HEADER :: VirtualAddress + [メモリのPEのベースアドレス] + [セクションサイズ、メモリ]の間です – Jeremy
私は混乱しています私は、私のデータが常に18FF3Cであることを記憶していることを知っています。 – Ren