dll的入口函式:
bool winapi dllmain
(hinstance hinstance, dword reason,
lpvoid lpvreserved)
;
hinstance:該引數是當前dll模組的控制代碼,即本動態連線庫模組的例項控制代碼。
reason:該引數表示dllmain()函式被呼叫的原因。分別是:值作用
dll_process_attach
當dll被某程序載入時,dllmain()函式被呼叫
dll_pro cess_detach
當dll被某程序解除安裝時,dllmain()函式被呼叫
dll_thread_attach
當程序中有執行緒被建立時,dllmain()函式被呼叫
dll_thread_detach
當程序中有執行緒結束時,dllmain()函式被呼叫
lpvreserved:保留引數,即不被程式設計師使用的引數。
新增匯出函式:
extern
"c"__declspec
(dllexport)
(函式返回型別)
(函式名稱)
(引數...
);
dll的呼叫:
hmodule hmodule =
loadlibrary
("dll檔名.dll");
函式指標 mfun =
getprocaddress
(hmodule,
"dll中所匯出的函式名"
);
getprocaddress(
hmodule hmodule, // dll模組控制代碼
lpcstr lpprocname // 函式名
);返回值:
如果函式呼叫成功,返回值是dll中的輸出函式位址。
如果函式呼叫失敗,返回值是null。得到進一步的錯誤資訊,呼叫函式getlasterror。
dll遠端注入:
先介紹幾個函式:
handle createremotethread
(__in handle hprocess,
__in lpsecurity_attributes lpthreadattributes,
__in size_t dwstacksize,
__in lpthread_start_routine lpstartaddress,
__in lpvoid lpparameter,
__in dword dwcreationflags,
__out lpdword lpthreadid);/*
*/
hprocess : 執行緒所屬程序的程序控制代碼.該控制代碼必須具有
process_create_thread,
process_query_information,
process_vm_operation,
process_vm_write,
和process_vm_read 訪問許可權.一般使用openprocess()獲得。
lpthreadattributes: 乙個指向 security_attributes 結構的指標, 該結構指定了執行緒的安全屬性.一般為null;
dwstacksize: 執行緒棧初始大小,以位元組為單位,如果該值設為0,那麼使用系統預設大小.
dwcreationflags [in]:
執行緒的建立標誌.值含義
0執行緒建立後立即執行
create_suspended
0x00000004
執行緒建立後先將執行緒掛起,直到 resumethread 被呼叫
stack_size_param_is_a_reservation
0x00010000
dwstacksize 引數指定為執行緒棧預訂大小,如果stack_size_param_is_a_reservation沒有被指定,dwstacksize 引數指定為執行緒棧分配大小.
lpthreadid [out]
指向所建立執行緒id的指標,如果建立失敗,該引數為null.
lpvoid virtualallocex
(handle hprocess,lpvoid lpaddress,
size_t dwsize,
dword flallocationtype,
dword flprotect)
;//在目標程序申請記憶體
hprocess:
申請記憶體所在的程序控制代碼。
lpaddress:
欲分配的記憶體大小,位元組單位;注意實際分 配的記憶體大小是頁記憶體大小的整數倍
flallocationtype 可取下列值:值含義
mem_commit
為特定的頁面區域分配記憶體中或磁碟的頁面檔案中的物理儲存
mem_physical
分配物理記憶體(僅用於位址視窗擴充套件記憶體)
mem_reserve
保留程序的虛擬位址空間,而不分配任何物理儲存。保留頁面可通過繼續呼叫virtualalloc()而被占用
mem_reset
指明在記憶體中由引數lpaddress和dwsize指定的資料無效
mem_top_down
在盡可能高的位址上分配記憶體(windows 98忽略此標誌)
mem_write_watch
必須與mem_reserve一起指定,使系統跟蹤那些被寫入分配區域的頁面(僅針對windows 98)
flprotect 可取下列值:值含義
page_readonly:
該區域為唯讀。如果應用程式試圖訪問區域中的頁的時候,將會被拒絕訪
page_readwrite
區域可被應用程式讀寫
page_execute
區域包含可被系統執行的**。試圖讀寫該區域的操作將被拒絕。
page_execute_read
區域包含可執行**,應用程式可以讀該區域。
page_execute_readwrite
區域包含可執行**,應用程式可以讀寫該區域。
page_guard
區域第一次被訪問時進入乙個status_guard_page異常,這個標誌要和其他保護標誌合併使用,表明區域被第一次訪問的許可權
page_noaccess
任何訪問該區域的操作將被拒絕
page_nocache
ram中的頁對映到該區域時將不會被微處理器快取(cached)
bool writeprocessmemory
(handle hprocess,
lpvoid lpbaseaddress,
lpvoid lpbuffer,
dword nsize,
lpdword lpnumberofbyteswritten);
//把lpbuffer中的內容寫到程序控制代碼是hprocess程序的lpbaseaddress位址處,寫入長度為nsize。
hprocess:該引數是指定程序的程序控制代碼。
lpbaseaddress:該引數是指定寫入目標程序記憶體的起始位址。
lpbuffer:該引數是要寫入目標程序記憶體的緩衝區起始位址。
nsize:該引數是指定寫入目標記憶體中的緩衝區的長度。lpnumberofbyteswritten:該引數用於接收實際寫入內容的長度。
PyMySQL基本使用以及SQL注入問題
目錄又是乙個可以幫助我們實現用 來運算元據庫的模組,安裝,匯入即可 然後匯入即可使用 pymysql基本使用 import pymysql conn pymysql.connect user root password 123 host 127.0.0.1 port 3306,charset utf...
CMFCColorButton的使用以及重繪
cmfccolorbutton是visual studio 2008 sp1版本以上提供的顏色採集器。系統環境 windows 7 程式設計環境 visual studio 2008 sp1 下面介紹下使用步驟 1.新建基於對話方塊的工程,名稱為mycolorbuttondemo 2.拖動乙個按鈕到...
NSSortDescriptor使用以及陣列排序
nssortdescriptor 指定用於物件陣列排序的物件的屬性。物件可能是字典,這種情況就是對字典陣列排序 如果是employee物件需要按照name來排序,就生成下面的descriptor nssortdescriptor descriptor nssortdescriptor sortdes...