一般來說,限於32位程式getmodulefilenameex對於64位程式來說是不管用的,我們如果需要在32位程式獲得64位程序的執行目錄可能需要用到wow64或者是queryfullprocessimagename。
但是前者雖然通用,但是實現起來過於複雜,還需要用到彙編,後者
minimum supported client
minimum supported server
上為ms docs給出的限制條件,顯然無法支援到諸如xp之類的系統顯然這個api不是通用的,那麼如果我們需要乙個通用且方便的方法怎麼辦呢?
這時候就可以祭出我們的getprocessimagefilenamea
minimum supported client
minimum supported server
target platform
windows
header
psapi.h
library
kernel32.lib on windows 7 and windows server 2008 r2; psapi.lib (if psapi_version=1) on windows 7 and windows server 2008 r2; psapi.lib on windows server 2008, windows vista, windows server 2003 and windows xp
dll
kernel32.dll on windows 7 and windows server 2008 r2; psapi.dll (if psapi_version=1) on windows 7 and windows server 2008 r2; psapi.dll on windows server 2008, windows vista, windows server 2003 and windows xp
支援還是蠻全的但是注意到這個api返回的是native path(\\**\****),而不是我們熟悉的dos path(x:\**\***)
所以我們還需要querydosdevicea進行轉換
值得一提的是,根據這個api所屬dll的變更,我們有理由認為queryfullprocessimagename實際上就是這個api的封裝
/*
created on: 2022-02-01
created by: icys
*/#include #include #include #include #include //將nt檔案路徑轉為dos檔案路徑
std::string ntfilepath2dosfilepath(std::string name)
; char szdevicestr[max_path] = ;
char szdrive[3] = ;
int cchdevname = 0;
if (getlogicaldrivestringsa(sizeof(szdrivestr), szdrivestr) == 0)
for (int i = 0; szdrivestr[i]; i += 4)
cchdevname = lstrlena(szdevicestr);
if (strnicmp(szdevicestr, name.c_str(), cchdevname) == 0) //比較字首
}return "";
}std::string getprocesspath(int pid)
int main()
本文由icys編纂並發表,僅發表於cnblog,如果在其他地方所見,均為未經允許的盜竊。 32位程序注入64位程序
include include define makerex w,r,x,b asm emit 0100 w r x b b define rep asm emit 0xf3 pragma pack 1 typedef struct stubargs stubargs,pstubargs pragm...
64位程序和32位程序通訊問題
最近遇到乙個問題,64位程式向32位程式傳送乙個wm copydata訊息,發現傳遞的資料和收到的資料不對 函式 如下,typedef struct tagcopydatastruct copydatastruct,pcopydatastruct 傳送方 64位程式 void csenddlg on...
64位系統編譯32位程式
如上使用c4這個小工具時遇到來需要 32位系統的需求,發現使用 m32引數後,編譯提示錯誤,如下 usr bin ld 未知的 模式 32 支援的 elf x86 64 elf32 x86 64 elf i386 i386linux elf l1om elf k1om i386pep i386pe ...