32位程式獲取32 64位程序檔案位址通用方法

2022-09-19 22:45:11 字數 2205 閱讀 3152

一般來說,限於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 ...