내 프로세스 내에서 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'와 같은 의미입니까? –