我使用CreateProcess()从进程内部创建了一个子进程,并挂起了该子进程。我可以在子进程的内存中获取主入口点,但是应该如何获取子进程的函数入口点呢?
这就是我获得子进程的主要切入点的方式
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()
我的目的是,如果我没有子进程源代码,而只有子进程.exe文件,能否获得子进程的功能入口点?
这样的子进程
void foo()
{
char str[10];
strcpy( str, "buffer\n" );
} // foo()
int main()
{
foo();
return 0;
} // main()
最佳答案
函数没有被称为entry point
的东西。如果您想了解调用函数时的执行流程,则可以放置一些printf()
语句,如下所示:
#include <stdio.h>
void foo(void)
{
printf("Entering %s:%s:%d\n", __FILE__, __func__, __LINE__);
return;
}
int main(void)
{
printf("Entering %s:%s:%d\n", __FILE__, __func__, __LINE__);
foo();
return 0;
}
或者,您可以使用
gdb
并在每个函数的开头设置breakpoints
来查看执行流程!关于c - 如何获得功能入口点?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8800035/