獲得指定 PID 的程序可執行檔案全路徑

2021-04-15 21:06:28 字數 2269 閱讀 3832

#ifndef __pslib_h__

#define __pslib_h__

dword winapi getprocessname(dword dwprocessid, lptstr pszname, dword nsize, bool bfullpath);

#endif // __pslib_h__

實現為:

#include #include #include // for _tcsrchr()

#include #include #include "pslib.h"

// for windows 9x series

typedef handle (winapi * fncreatetoolhelp32snapshot)(dword dwflags, dword th32processid);

typedef bool (winapi * fnprocess32first)(handle hsnapshot, lpprocessentry32 lppe);

typedef bool (winapi * fnprocess32next)(handle hsnapshot, lpprocessentry32 lppe);

typedef bool (winapi * fnthread32first)(handle hsnapshot, lpthreadentry32 lpte);

typedef bool (winapi * fnthread32next)(handle hsnapshot, lpthreadentry32 lpte);

// for windows nt series

typedef bool (winapi * fnenumproces**odules)(handle hprocess, hmodule *lphmodule, dword cb, lpdword lpcbneeded);

typedef dword (winapi * fngetmodulebasename)(handle hprocess, hmodule hmodule, lptstr lpbasename, dword nsize);

typedef dword (winapi * fngetmodulefilenameex)(handle hprocess, hmodule hmodule, lptstr lpfilename, dword nsize);

#define decl_pfunc(f) static fn##f my##f = null

decl_pfunc(createtoolhelp32snapshot);

decl_pfunc(process32first);

decl_pfunc(process32next);

// decl_pfunc(thread32first);

// decl_pfunc(thread32next);

decl_pfunc(enumproces**odules);

decl_pfunc(getmodulebasename);

decl_pfunc(getmodulefilenameex);

#undef decl_pfunc

#ifdef unicode

#define tail_char text("w")

#else

#define tail_char text("a")

#endif // !unicode

static void getsnapshotfunctions()

static void getpsapifunctions()

dword winapi getprocessname(dword dwprocessid, lptstr pszname, dword nsize, bool bfullpath)

; if(myprocess32first(hprocesssnap, &pe32))

lstrcpyn(pszname, pszexefile, nsize);

dwret = lstrlen(pszname) + 1;

break;

}} while(myprocess32next(hprocesssnap, &pe32));

}closehandle(hprocesssnap); // must clean up the snapshot object!

return dwret;

}else

closehandle(hprocess);

return bret ? cb : 0;

}}

可執行檔案及linux程序記憶體

通過編譯器編譯為可執行檔案,linux下執行檔案的格式為elf。linux下物理記憶體通過mmu管理對映到程序的虛擬記憶體中,虛擬記憶體的分布 2.data段 資料段,初始化的全域性變數和static變數。為何還產生bss段,為了可執行程式更加的小。3.bss 未初始化的全域性變數和static變數...

程序位址空間 可執行檔案 分析

位址空間頂部保留給核心 作業系統常駐記憶體的部分 位址空間的這個部分包含核心在代表程序執行指令時 比如當應用程式執行系統呼叫時 使用的 資料和棧。對任何乙個普通程序來講,它都會涉及到5種不同的資料段 棧 stack 即呼叫棧,存放程式臨時建立的區域性變數 堆 heap 存放程序執行中被動態分配的記憶...

linux 執行可執行檔案

1 首先,需要了解一下a.out這個目標檔案。a.out在linux下是elf executable linkable format 檔案格式,該目標檔案由乙個檔案頭 段 資料段 已初始化 從定位資訊區 符號表及符號名字字串構成,如下左圖所示,經過鏈結後生成執行檔案如下右圖所示,需要說明的是1 bs...