2013-06-04 90 views
0

這是一個隱藏特定進程給出的Pid的代碼,但我不能得到PsGetCurrentProcess()的工作,它一直拋出未定義的引用錯誤,我不知道這裏做什麼是代碼鏈接器錯誤未定義的引用調用PsGetProcess

#include <iostream> 
#include <conio.h> 
#include "ddk\ntddk.h" 
#include <stdio.h> 
unsigned long SearchProcId(unsigned int Pid){ 

unsigned long eproc,aux,proceso,ret; 
PLIST_ENTRY lista; 
unsigned int idProceso=0; 

eproc=(unsigned long)PsGetCurrentProcess();//estamos en "System" 
lista=(LIST_ENTRY*)(eproc+0x88);//tenemos los punteros al siguiente y al anterior 
aux=(unsigned long)lista->Blink; 
proceso=(unsigned long)lista; 
idProceso=*((int *)(proceso+0x84)); 

while(proceso!=0 && aux!=proceso && Pid!=idProceso)//recorremos la lista 
{ 
    proceso-=0x88; 
    ret=proceso; 

    idProceso=*((int *)(proceso+0x84)); 
    //avanzamos 
    lista=lista->Flink; 
    proceso=(unsigned long)lista; 
} 

if(Pid!=idProceso) 
ret=0; 

return ret; 
} 








int main(int argc, char** argv) { 
PLIST_ENTRY plist_active_procs; 
unsigned long eproc=0; 
printf ("id del proceso del lol?"); 
unsigned int i=0; 
scanf ("%d",&i); 
eproc = SearchProcId(i); 
plist_active_procs = (LIST_ENTRY*)(eproc+0x88); 
plist_active_procs -> Blink -> Flink=plist_active_procs->Flink; 
plist_active_procs -> Flink -> Blink=plist_active_procs->Blink; 

return 0; 
} 

它不斷拋出我這個錯誤,我不知道該怎麼做C:\用戶\加布裏埃爾\文檔\ main.o的main.cpp :(文字+ 0xe):未定義的引用`小鬼 _IoGetCurrentProcess @ 0'

+0

我們可以得到你的編譯器命令和輸出...另外,你的兩個關閉}缺少4個空格。 – ChrisCM

+0

如果你檢查一個[參考](http://msdn.microsoft.com/en-us/library/windows/hardware/ff559933%28v=vs.85%29.aspx)它會告訴你你需要什麼庫與...聯繫。 –

回答

0

事實上,你包括在同一個來源的<iostream>ddk/ntddk.h文件表明你可能沒有寫驅動程序。

PsGetCurrentProcess僅適用於司機。在正常的應用程序中,你應該使用GetCurrentProcess

當然,在你的代碼的其他部分,像過濾控制塊一樣,在用戶模式下根本不會工作。如果你想這樣做,你需要建立一個驅動程序(因此,刪除所有的stdio,iostream和類似的用法 - 你需要編寫一個單獨的應用程序,將數據輸入和輸出驅動程序)

+0

所以我能做些什麼來獲得指向這個過程的指針? –

+0

簡短的回答,你不能。也許你可以解釋你實際上正在做的事情(看起來你試圖隱藏自己的過程,這是一個頑皮的事情 - 不知道我想幫你做到這一點)。 –

+0

是的,它是一個程序,隱藏一個進程給定的Pid –

相關問題