0

メモリ内で実行されている実行可能ファイルからメモリアドレスを読み取り、それらのメモリアドレスを使用してPE構造をウォークしようとしています。

4バイトのchar配列をintと同等に変換する方法がわからないため、問題が発生しています。

これまでの私のコードは次のとおりです。

char buffer[4];
int e_lfanew = 60;

if(!ReadProcessMemory(pHandle, (me32.modBaseAddr + e_lfanew), buffer, 4, NULL))
{
    printf("ReadProcessMemory @ %x Failed (%d)\n", me32.modBaseAddr, GetLastError());
}

私が読み込んでいるアドレス(この場合は0xE0000000)は、PEヘッダーのオフセットです。読み取ったばかりのメモリアドレスを取得して、プロセスメモリから再度読み取るためのオフセットとして使用したいのですが、正しくintに変換する方法がわかりません。

どんな助けでも大歓迎です。

4

2 に答える 2

3
 buffer[0]        | 
(buffer[1] <<  8) |
(buffer[2] << 16) |
(buffer[3] << 24)

またはその逆で、上位バイトがbuffer[0]かbuffer[3]かによって異なります。

于 2011-02-27T19:58:27.130 に答える
0
int MemoryBufferToInt(char* buffer, int buffer_size) {
   int result;
   assert(buffer_size == sizeof(result));
   memcpy(&result, &buffer[0], sizeof(result));
   return result;
} 

上記のコードは、このバッファがプロセスから取得されたことを前提としているため、メモリバッファのバイト順序は、プラットフォーム上の通常のintのバイト順序と同じです。それ以外の場合、バッファのバイト順序がわかっていれば、特定のバイト順序の整数を簡単に構成できます。

static_cast<char*>(&result)バッファの内容を取得する関数のパラメータとして、バッファの代わりに使用できることに注意してください。

于 2011-02-27T19:59:07.520 に答える