私のプロセス内でCreateProcess()を使って子プロセスを作成し、子プロセスを中断しました。私は子プロセスのメモリに主要なエントリポイントを得ることができますが、子プロセスの関数エントリポイントをどのように取得する必要がありますか?私は子プロセスのソースコードを持っていないと私は.exeファイルの子プロセスを持っている場合機能エントリポイントを取得するにはどうすればよいですか?
は、これは私が、子プロセスのメインエントリポイントを取得する方法である
DWORD FindEntryPointAddress(TCHAR *exeFile)
{
BY_HANDLE_FILE_INFORMATION bhfi;
HANDLE hMapping;
char *lpBase;
HANDLE hFile = CreateFile(exeFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if (hFile == INVALID_HANDLE_VALUE)
;
if (!GetFileInformationByHandle(hFile, &bhfi))
;
hMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, bhfi.nFileSizeHigh, bhfi.nFileSizeLow, NULL);
if (!hMapping)
;
lpBase = (char *)MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, bhfi.nFileSizeLow);
if (!lpBase)
;
PIMAGE_DOS_HEADER dosHeader = (PIMAGE_DOS_HEADER)lpBase;
if (dosHeader->e_magic != IMAGE_DOS_SIGNATURE)
;
PIMAGE_NT_HEADERS32 ntHeader = (PIMAGE_NT_HEADERS32)(lpBase + dosHeader->e_lfanew);
if (ntHeader->Signature != IMAGE_NT_SIGNATURE)
;
DWORD pEntryPoint = ntHeader->OptionalHeader.ImageBase + ntHeader->OptionalHeader.AddressOfEntryPoint;
UnmapViewOfFile((LPCVOID)lpBase);
CloseHandle(hMapping);
CloseHandle(hFile);
printf("test.exe entry point: %p\n", pEntryPoint);
return pEntryPoint;
} // FindEntryPointAddress()
私の目的は私ができることです子プロセスの関数エントリポイントを取得しますか?この
void foo()
{
char str[10];
strcpy(str, "buffer\n");
} // foo()
int main()
{
foo();
return 0;
} // main()
私はmain'自体は、プログラムのエントリポイントである '、私の知る限りでは、関数のエントリポイントのことを聞いたことがありません。そんなことがあるなら、私は本当に知ってうれしいです! –
'main'と同じソースファイルにない場合は、メインソースファイルと一緒にコンパイルされた別のソースファイルにある可能性があります。それはライブラリにあり、その場合はライブラリを参照する必要があります。 –
'&foo'は、' foo'と同じ意味ですか? –