x86的hook 其實很簡單 其實我們在od裡就可以知道 e9+(跳轉的位址-現在的位址-5)
然後 跳來跳去就可以 而 緩衝區讀寫有個很重要的概念就是
#define sub_code ctl_code(file_device_unknown, 0x801, method_buffered,file_any_access)
(這是比喻一下 這個是我們的code 值 比如)
pio_stack_location stack = iogetcurrentirpstacklocation(pirp);
ulong ml = stack->majorfunction;
switch (ml)
{case irp_mj_device_control:
{ kdprint(("enter mydriver_deviceiocontrol\n"));
ntstatus status = status_success;
//得到輸入緩衝區大小
ulong cbin = stack->parameters.deviceiocontrol.inputbufferlength;
//得到輸出緩衝區大小
ulong cbout = stack->parameters.deviceiocontrol.outputbufferlength;
//得到ioctl碼
ulong code = stack->parameters.deviceiocontrol.iocontrolcode; //這個碼就是區別緩衝區的資訊的
switch (code)
{case add_code:
然後 應用層的話 應該是
deviceiocontrol(hdevice, add_code , &port, 8, &bufret, 4, &dwwrite, null);//寫上碼
這樣就可以了 。。
如果想保護某個程序的話 需要對 ntopenprocess 進行hook 開啟的話 直接返回 null 然後 應用層 傳入乙個pid 值就可以了
經過緩衝區pid 然後呼叫hook 函式就可以了 然後就可以保護 我們想要保護的程序了
後面如果**實現了 就把原始碼貼上出來
23 fread和fwrite的讀寫緩衝區
fwrite buff,sizeof buff 1,pfile 返回實際寫入的完整項數,引數3盡量填1,簡單粗暴 fread buff,sizeof buff 1,pfile 返回實際讀取的完整項數,引數3盡量填1,簡單粗暴 檔案內容 每4位元組複製舊檔案到新檔案,忽略錯誤檢查 file pfile...
x86上乙個非原子讀寫的例子
在x86上對16bit,32bit,64bit的運算元進行load和store操作,只要這個運算元是在一條快取行內,則保證是原子的。include include alignas 64 char data 128 寫執行緒 void thread write int val 讀執行緒 void th...
多程序讀寫乙個緩衝區的機制
今天主管給安排了乙個工作,實現多程序對乙個緩衝區的對操作,做流 的,需要高效率的機制。經過一天的思考,確定了乙個比較好的機制。把緩衝區設定成1 2兩區,讀程序 多個 去讀 1區,同時寫程序 多個 要向 2區寫,這樣可以提高一倍的吞吐量。現在問題是當讀程序發現 1區沒有了內容,怎麼通知寫程序切換到 1...