獲得程序完整路徑的第二種方法

2022-05-07 05:54:09 字數 2203 閱讀 3153

第一次發的部落格是用peb獲得程序完整路徑,這幾天在學一種新方法。程序下有多個模組,而通過windbg除錯發現第一模組即程序完整路徑。直接看**把。

#include #include 

char* getprocesslist(ulong&bufferlength)

;

if (enabledebugprivilege()==false)

processentry32.dwsize = sizeof(processentry32); //

結構體中有dwsize的時候dwsize一般要初始化為自己結構體的大小。

);

if (snapshothandle ==invalid_handle_value)

char* bufferdata = (char*)localalloc(lptr, 1024); //

暫時分配一下緩衝區 --->虛擬記憶體 malloc

if (bufferdata==null)

if (process32first(snapshothandle, &processentry32)) //

得到第乙個程序順便判斷一下系統快照是否成功

}//獲得程序下的第乙個模組

hmodule modulehandle =null;

dword returnlength =getmodulefilenameex(processhandle, modulehandle,

processfullpath,

sizeof(processfullpath)); //

程序下的第一模組就是本身的程序所在位址

if (returnlength == 0

)

}//bufferdata[[20][calc.exe\0][ \0][20][calc.exe\0][ \0][20][calc.exe\0][ \0] ]

label1:

v7 = sizeof(dword) +lstrlen(processentry32.szexefile) + lstrlen(processfullpath) + 2; //

id + imagename + 1 + fullpath + 1

//緩衝區太小,再重新分配下

if (localsize(bufferdata) < (offset +v7))

bufferdata = (char*)localrealloc(bufferdata, (offset +v7),

lmem_zeroinit |lmem_moveable);

//接下來三個memcpy就是向緩衝區裡存放資料 資料結構是

//程序id+程序名+0+程序完整名+0 程序

//因為字元資料是以0 結尾的

memcpy(bufferdata + offset, &(processentry32.th32processid), sizeof

(dword));

offset += sizeof

(dword);

memcpy(bufferdata + offset, processentry32.szexefile, lstrlen(processentry32.szexefile) + 1

); offset += lstrlen(processentry32.szexefile) + 1

; memcpy(bufferdata + offset, processfullpath, lstrlen(processfullpath) + 1

); offset += lstrlen(processfullpath) + 1

;

if (processhandle!=null)

} while (process32next(snapshothandle, &processentry32));

}else

bufferlength =offset;

closehandle(snapshothandle);

return

bufferdata;

}

順帶著挖個坑,listctrl這個控制項賊坑,咋寫都不出來。。。。

ITEXT 目錄生成的第二種方法

最近在用itext寫pdf報告,期間遇到目錄生成的問題,而目錄生成我認為最關鍵的是獲取章節的頁碼問題。下面分別介紹這兩種方法。除了這兩種方法之外,還可以參考我的另一篇部落格 itext 目錄生成的第三種方法 方法一 1 先生成不帶目錄的pdf檔案,命名為a.pdf。假設此時目錄應該在第3頁,分別從a...

建立程序的第二種方法,以後很多都用這個方法。

coding utf 8 author 巴豆 email wjywinner 126.com import os import time from multiprocessing import process 引入multiprocessing中的process模組。class myprocess ...

Go練習題 3 第二種方法

乙個使用者管理系統 需要提供的功能 1.新增使用者 2.刪除使用者 3.修改使用者資訊 4.查詢使用者資訊 package main import fmt os strconv strings 定義密碼輸入次數 const password string 123123 maxauth int 3 使...