私はVisual Studio 2008でC++アプリケーションを作成しており、実行可能ファイルを読み込んでエントリポイントのアドレスを取得する必要があります。どのように私はこれを得ることができますか?Visual C++でexeファイルから "エントリポイントのアドレス"を取得する方法は?
1
A
答えて
-1
IMAGE_NT_HEADERSの助けを借りて、任意の実行ファイルのポイントのエントリにアクセスできます。エントリ・ポイントのアドレスにアクセスするAddressOfEntryPointメンバ変数を持つ構造IMAGE_OPTIONAL_HEADER上記から
typedef struct _IMAGE_NT_HEADERS {
DWORD Signature;
IMAGE_FILE_HEADER FileHeader;
IMAGE_OPTIONAL_HEADER OptionalHeader;
} IMAGE_NT_HEADERS, *PIMAGE_NT_HEADERS;
。小さなコードに続いて
は、より多くのお手伝いを致します。
FILE *executable;
executable= fopen("YourExe.exe","rb");
IMAGE_NT_HEADERS executableInformation;
fread(&executableInformation,sizeof(executableInformation),1,executable);
注:コードがテストされていないと誤差がある場合がございます。
0
エントリポイントのアドレスを検索したり、さまざまなヘッダーパラメータを読み取るには、以下の方法を見つけてください。
LPCSTR fileName; //exe file to parse
HANDLE hFile;
HANDLE hFileMapping;
LPVOID lpFileBase;
PIMAGE_DOS_HEADER dosHeader;
PIMAGE_NT_HEADERS peHeader;
hFile = CreateFileA(fileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if(hFile==INVALID_HANDLE_VALUE)
{
printf("\n CreateFile failed in read mode \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; //pointer to dos headers
if(dosHeader->e_magic==IMAGE_DOS_SIGNATURE)
{
//if it is executable file print different fileds of structure
//dosHeader->e_lfanew : RVA for PE Header
printf("\n DOS Signature (MZ) Matched");
//pointer to PE/NT header
peHeader = (PIMAGE_NT_HEADERS) ((u_char*)dosHeader+dosHeader->e_lfanew);
if(peHeader->Signature==IMAGE_NT_SIGNATURE)
{
printf("\n PE Signature (PE) Matched \n");
//address of entry point
//peHeader->OptionalHeader.AddressOfEntryPoint
}
UnmapViewOfFile(lpFileBase);
CloseHandle(hFileMapping);
CloseHandle(hFile);
return 0;
}
else
{
printf("\n DOS Signature (MZ) Not Matched \n");
UnmapViewOfFile(lpFileBase);
CloseHandle(hFileMapping);
CloseHandle(hFile);
return 1;
}
関連する問題
- 1. exeファイルのフルパスからInnosetupスクリプトのexeファイル名を取得する方法は?
- 2. C#でプロジェクトコードのエントリポイントを取得する方法
- 3. C#、TcpClientからIPアドレスを取得する方法は?
- 4. Cで.exeファイルのプロパティの詳細を取得するには?
- 5. C++ visual studio 2010 exeリソースを取得Rebase?
- 6. C#のFTPリクエストからIPアドレスを取得する方法
- 7. C#でアドレスを取得する方法は、delegeteからですか?
- 8. .exeインストーラから特定のexeファイルを実行する方法
- 9. TCLでC exeファイルの戻り値を取得する方法(Windows)
- 10. AndroidでプログラムでMacアドレスからIPアドレスを取得する方法は?
- 11. ファイルを取得する方法DLLまたはEXEの説明
- 12. C++のファイルから行番号を取得する方法は?
- 13. エントリポイントのアドレス
- 14. Linuxのコマンドラインからexeのコンパイル日を取得する方法
- 15. JAVAのクライアントマシンからMACアドレスを取得する方法は?
- 16. Visual Studio 2017 - Windowsフォーム - exeアイコンを設定する方法 - Visual C++
- 17. Cefsharp現在のURLアドレスを取得する方法は? c#
- 18. AzureでクライアントのIPアドレスを取得する方法C#?
- 19. C#でオブジェクトのアドレスを取得する方法
- 20. Visual Studioでファイルの相対パスを取得する方法は?
- 21. Windows-mobileからMACアドレスを取得する方法は?
- 22. cuda-memcheck、アドレスからソースコードを取得する方法は?
- 23. exeファイルからMySqlをC#
- 24. ソケットからIPアドレスを取得する方法Windowsで
- 25. 異なるエントリポイントの値アドレスを
- 26. C++のフォルダからファイル名を取得する方法
- 27. Visual Studio C++でexeをビルドする方法
- 28. Visual C++でファイルを非同期で読み取る方法は?
- 29. JavaのFTPサーバからファイルhttpアドレスを取得するには?
- 30. Androidのバウンディングボックスからアドレスを取得する方法
エラーがある場合は、スタブをスキップする必要があります。 –
@サントスダナウォード:ありがとう。それは間違いなく私を助けるだろう。 – Sultan23
@HansPassantすべきこと.. –