コンパイル後にPEセクションのアドレスを取得するCコードを.exe
に書き込むことはできますか?Cで各PEセクションの開始アドレスを取得する方法は?
-2
A
答えて
0
exeの各セクションにアクセスしたいのですか? もしそうなら、以下のようにしてください:
#include<windows.h>
#include<stdio.h>
int main()
{
LPCSTR fileName="inputFile.exe";
HANDLE hFile;
HANDLE hFileMapping;
LPVOID lpFileBase;
PIMAGE_DOS_HEADER dosHeader;
PIMAGE_NT_HEADERS peHeader;
PIMAGE_SECTION_HEADER sectionHeader;
hFile = CreateFileA(fileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if(hFile==INVALID_HANDLE_VALUE)
{
printf("\n CreateFile failed \n");
return 1;
}
hFileMapping = CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL);
if(hFileMapping==0)
{
printf("\n CreateFileMapping failed \n");
CloseHandle(hFile);
return 1;
}
lpFileBase = MapViewOfFile(hFileMapping,FILE_MAP_READ,0,0,0);
if(lpFileBase==0)
{
printf("\n MapViewOfFile failed \n");
CloseHandle(hFileMapping);
CloseHandle(hFile);
return 1;
}
dosHeader = (PIMAGE_DOS_HEADER) lpFileBase;
if(dosHeader->e_magic==IMAGE_DOS_SIGNATURE)
{
printf("\n DOS Signature (MZ) Matched \n");
peHeader = (PIMAGE_NT_HEADERS) ((u_char*)dosHeader+dosHeader->e_lfanew);
if(peHeader->Signature==IMAGE_NT_SIGNATURE)
{
printf("\n PE Signature (PE) Matched \n");
//once found valid exe or dll
//go to first section
sectionHeader = IMAGE_FIRST_SECTION(peHeader);
UINT nSectionCount = peHeader->FileHeader.NumberOfSections;
//No of sections
printf("\n No of sections : %d \n",nSectionCount);
//sectionHeader contains address of first section
//traverse each section by below way
for(UINT i=0; i<nSectionCount; ++i, ++sectionHeader)
{
//section information
}
}
else
{
return 1;
}
}
else
{
return 1;
}
return 0;
}
+0
ディスクから読み取るのではなく、自分のメモリからセクションを読み取るほうが効率的です。 – user2073973
+0
user2073973独自のメモリから読み取る方法は? – 9090
+0
仮想アドレスが必要な場合は、この関数[ImageRvaToVa](https://msdn.microsoft.com/en-us/library/ms680218(VS.85).aspx) –
関連する問題
- 1. Flotでx軸の開始値を取得する方法は?
- 2. アドレスから前の命令の開始を取得する
- 3. 各開始アルファベットからクエリ結果1回を取得する方法
- 4. 実行可能ファイルのテキストセクションの開始アドレスと終了アドレスを取得する
- 5. PEヘッダ - 新しいセクション - メモリ内のOEPアドレスを計算するには?
- 6. C++プログラムでOS Xのプロセス開始時間を取得する方法
- 7. C#でオブジェクトのアドレスを取得する方法
- 8. AzureでクライアントのIPアドレスを取得する方法C#?
- 9. 既知のIPアドレスの最後のセクションを取得する方法
- 10. EXE内のPEセクションとILコードの検索方法は?
- 11. C#、TcpClientからIPアドレスを取得する方法は?
- 12. iPhone/Androidでスクロール開始イベントを取得する方法
- 13. 要求時にマップされるWindows PEセクションの作成方法
- 14. C#のFTPリクエストからIPアドレスを取得する方法
- 15. 開始規則の戻り値を取得する方法
- 16. IPアドレスの取得方法
- 17. 新しいセクションをC++のpeファイルに追加します
- 18. C#でアドレスを取得する方法は、delegeteからですか?
- 19. このCインタビューコードテストの開始方法は?
- 20. アニメーションを開始したビューオブジェクトを取得する方法......?
- 21. C/C++で命令のアドレスを取得
- 22. Objective-CでMACアドレスを取得する
- 23. アレイインデックスS4がPEを開始するときに外に出る
- 24. C++のTDBGridから各行を取得する方法
- 25. 角度サービス(投稿、取得、削除)を開始する方法
- 26. JQuery UI Draggableドラッグ開始位置を取得する方法
- 27. IDに基づいて開始月を取得する方法
- 28. MACアドレスを取得する方法
- 29. Objective-CのUIViewで各キーの値を取得する方法は?
- 30. Javaでポップアップメニューを開始したJTextFieldイベントを取得する方法は?
そのプログラムの中から '.exe'ファイルを読み込むことはできませんでしたか? – displayname
はい。 PE形式を勉強することから始めてください。 –