核心中通過給執行緒插apc注入dll

2021-06-20 18:22:12 字數 1484 閱讀 5048

void apcloaddll(pvoid normalcontext, pvoid systemargument1, pvoid systemargument2);

void apcloaddllend();

pmdl pmdl = null;

void apckernelroutine( in struct _kapc *apc,

in out pknormal_routine *normalroutine,

in out pvoid *normalcontext,

in out pvoid *systemargument1,

in out pvoid *systemargument2 )

dbgprint("apckernelroutine called. memory freed.");

}void addapcingectdll(lpstr dllfullpath, pethread thread,ulong ptargetprocess,void *loadlibrarywaddr)

dwsize = 386;//這個長度是我們寫的大片的nop

pmdl = ioallocatemdl (apcloaddll, dwsize, false,false,null);

if (!pmdl)

__try

__except (exception_execute_handler)

kestackattachprocess((ulong *)ptargetprocess,&apcstate);//進入目標程序的上下文

else

*p=loadlibrarywaddr;

keunstackdetachprocess (&apcstate); //恢復咱原來的上下文

//初始化apc,插apc

keinitializeapc(papc,

(pethread)thread,

originalapcenvironment,

&apckernelroutine,

null,

usermode,

(pvoid) null);

if (!keinsertqueueapc(papc,0,null,0))

else

//使執行緒處於警告狀態,注意不同作業系統的ethread

if(!*(char *)((char *)thread+0x4a))

}}//列舉指定程序的執行緒

ntstatus ingectdll(peprocess process,lpstr dllfullpath,void *loadlibrarywaddr)

} }return status_success;

}__declspec(naked) void apcloaddll(pvoid normalcontext, pvoid systemargument1, pvoid systemargument2)

}

核心中通過給執行緒插apc注入dll

void apcloaddll pvoid normalcontext,pvoid systemargument1,pvoid systemargument2 void apcloaddllend pmdl pmdl null void apckernelroutine in struct kapc...

linux核心中建立執行緒方法

1.標頭檔案 include wake up process include kthread create kthread run include is err ptr err 2.實現 kthread create 與kthread run區別 linux核心建立執行緒的方法實質上只有乙個 kth...

執行緒與程序在核心中的實現

核心 為2.6.35.13。程序與其對應的執行緒之間使用相同的記憶體空間 檔案描述符和一些其他的東西。在核心中,執行緒與程序都是用結構體task struct來表示的,在核心排程上並沒有什麼區別。2.1 相同點 我們已經在上文中指出主線程與執行緒之間使用相同的記憶體空間 檔案描述符和一些其他的東西。...