#include <windows.h>
#include <stdio.h>
#include <tlhelp32.h>
#include <string.h>
#include <psapi.h>
WINAPI int WinMain(HINSTANCE hInstance, HINSTANCE hPreInstacne, LPSTR lpCmdLine, int nCmdShow)
{
HANDLE pHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 process32;
process32.dwSize = sizeof(process32);
BOOL bReturn = Process32First(pHandle,&process32);
wchar_t* dest;
int srcSize = strlen(lpCmdLine);
dest = (wchar_t*)malloc((srcSize+1)*2);
memset(dest,0,(srcSize+1)*2);
mbstowcs(dest,lpCmdLine,srcSize);
*(dest+srcSize) = L'\0'; //dest = L"Twinkstar.exe"
while(bReturn)
{
if(!wcscmp(dest,(wchar_t*)process32.szExeFile))
{
LPSTR path = (LPSTR)malloc(256);
memset(path,0,256);
HANDLE process = OpenProcess(PROCESS_ALL_ACCESS ,FALSE,process32.th32ProcessID);
GetModuleFileNameExA(process,NULL,path,sizeof(path));
printf("%s",path);
free(path);
path = NULL;
break;
}
Process32Next(pHandle,&process32);
}
free(dest);
dest = NULL;
}
需求:编写一个程序,传入进程名字,输出进程所在路径
问题:程序运行后卡死
- 打开GDB调试:
- 传入参数 Twinkstar.exe:
- 第17行下断点:
- 第17行dest = L""
- 步进,第18行dest="Twinkstar.exe"
- dest成功接收了lpCmdLine的值传递
- 继续运行,GDB直接卡死,推测问题就在循环里