포인터 연산 우후훗-0-; Study+more

포인터 연산으로 하루를 버리고... 얻어낸 ProcessInfo_LegacyDrv.zip 소스 코드들...

중요한 포인트를 찝어 보자면...

 //get hided process list///////////////////////////////////////////////////
 pProcessListHead =
  (PLIST_ENTRY)(&pDeviceExtension->pHidedProcessListHead.Flink);
 pProcessList = pProcessListHead;
 
 //trace process
 for(; i<ProcessCount; i++)
 {
  if(pProcessList->Flink == pProcessListHead) break;
  
  pProcess = (((PUCHAR)pProcessList) - OFFSET_LIST_ENTRY);

  (pProcessListPool+i)->ProcessKeyInfo.UniqueProcessId =
   *((PULONG)(pProcess + OFFSET_UNIQUE_PROCESS_ID));

  RtlCopyMemory(
   (pProcessListPool + i)->ProcessKeyInfo.ImageFileName,
   (pProcess + OFFSET_IMAGE_FILE_NAME),
   16);

  (pProcessListPool + i)->PStatus = STATUS_HIDED;
  
  CopiedBytes += sizeof(PROCESSINFOQUERY);
  pProcessList = pProcessList->Flink;
 }

요런 루틴에서 *(주소+i)하면 배열에서 Arr[index+i]라는걸 깜빡해서
*(주소+sizeof(구조체 크기)*i) 요런식으로 계산해서 엉망 진창인 코드가 나왔었다는거...
(계속, 메모리 액세스 바이올레이션... 이런소리가 나오더라..- _;)


덧글

  • 승네군 2008/01/24 14:04 # 답글

    쳇.. 위에 올린 소스는 포인터 연산에 문제 있음. (소스 복사하거나 참조하여 쓰지 말것)
  • WERT 2008/01/27 20:24 # 답글

    쿨럭.. 괄호와 요상한 구조체만 보면 혼미..
  • 승네군 2008/01/28 08:57 # 삭제 답글

    신비함을 넘어서서 변태스러운 포인터의 세계 - _-
  • 나쯔 2008/02/11 15:39 # 답글

    느무 복잡해... 그냥 남이 짠 소스 그대로 배껴쓸래.
  • 승네군 2008/02/11 20:12 # 삭제 답글

    동감이얌 -0-...
    만들어 놓고 보니.. 인터넷에 널려있더라는거.. 크아아!!
댓글 입력 영역