2016-07-05 2 views
1

私はkernel32.dllの関数のRVAを取得しようとしています。つまり、IMAGE_EXPORT_DIRECTORY構造体を取得できるまで、ファイル内の異なる構造を見つけるためにオフセットを使用する必要があります。しかし、私はファイルの内容を取得する方法と方法を知っているので、これをほぼ不可能な仕事にする特定の文字や要素を解釈して残してしまいます。ですから、文字配列にコピーするdllファイルの内容を取得する最良の方法を知りたいと思います。PE解析のためのDLLファイルの内容を正しく取得する方法は?

更新:興味のある方は、dllをメモリにマッピングする関数を作成しました。

void* GetFileImage(char path[]) 
{ 
    HANDLE hFile = CreateFile(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL); 
    if(hFile == INVALID_HANDLE_VALUE){return NULL;} 

    HANDLE file_map = CreateFileMapping(hFile, NULL, PAGE_READONLY|SEC_IMAGE, 0, 0, "KernelMap"); 
    if(file_map == INVALID_HANDLE_VALUE){return NULL;} 

    LPVOID file_image = MapViewOfFile(file_map, FILE_MAP_READ, 0, 0, 0); 
    if(file_image == 0){return NULL;} 

    return file_image; 
} 
+0

あなたはメモリに.dllファイルをマッピングすると考えられていますか? CreateFileMapping ... [これは古いですが、おいしいです。](https://msdn.microsoft.com/en-us/library/ms809762.aspx) –

答えて

0

複数の方法があります。しかし、それほど多くはありません。

1.システム起動時にメモリにロードされるkernel32.dllなどのシステムロードファイルを解析する場合は、直接GetModuleHandleを使用して、ロードされたベースアドレスを取得し、PEを解析することができますPEの構造とdllの静的/遅延ロードとそのエクスポート)。

2.解析しようとしているDLLがロードされているシステムではない場合は、LoadLibraryを使用してロードすることができます。ロードされたベースアドレスが返され、PEを解析できます。

3.また、CreatFileMapping/MapViewOfFileを実行して、独自の仮想メモリ内のdllを解析して解析することもできます。

@デビッド・トーマスによって提案されたMSDNの記事が大きな助けになるでしょう:: Peering Inside the PE

関連する問題