gpt4 book ai didi

c - 如何获得函数入口点?

转载 作者:行者123 更新时间:2023-11-30 14:26:39 26 4
gpt4 key购买 nike

我使用 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()

最佳答案

没有任何东西称为函数的入口点。如果你想了解调用函数时的执行流程,那么你可以添加一些 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并在每个函数的开头设置断点以查看执行流程!

关于c - 如何获得函数入口点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8800035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com