第一次發的部落格是用peb獲得程序完整路徑,這幾天在學一種新方法。程序下有多個模組,而通過windbg除錯發現第一模組即程序完整路徑。直接看**把。
#include #includechar* 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 使...