第13题):进程隐藏的C代码翻译成DELPHI遇到困难?
主要是C中的指针参数引用数组地址不知道该怎么翻译?
或者谁直接给个进程隐藏的DELPHI版本的也行???
PVOID LinearToPhys(PULONG BaseAddress,PVOID addr)
{
    ULONG VAddr=(ULONG)addr,PGDE,PTE,PAddr;
    PGDE=BaseAddress[VAddr>>22];
    if ((PGDE&1)!=0)
    {
        ULONG tmp=PGDE&0x00000080;
        if (tmp!=0)
        {
            PAddr=(PGDE&0xFFC00000)+(VAddr&0x003FFFFF);
        }
        else
        {
            PGDE=(ULONG)MapViewOfFile(g_hMPM, 4, 0, PGDE & 0xfffff000, 0x1000);
            PTE=((PULONG)PGDE)[(VAddr&0x003FF000)>>12];
            if ((PTE&1)!=0)
            {
                PAddr=(PTE&0xFFFFF000)+(VAddr&0x00000FFF);
                UnmapViewOfFile((PVOID)PGDE);
            }
            else return 0;
        }
    }
    else return 0;    return (PVOID)PAddr;
}ULONG GetData(PVOID addr)
{
    ULONG phys=(ULONG)LinearToPhys((PULONG)g_pMapPhysicalMemory,(PVOID)addr);
    PULONG tmp=(PULONG)MapViewOfFile(g_hMPM, 4, 0, phys & 0xfffff000, 0x1000);
    if (tmp==0)
        return 0;
    ULONG ret=tmp[(phys & 0xFFF)>>2];
    UnmapViewOfFile(tmp);
    return ret;
}BOOL SetData(PVOID addr,ULONG data)
{
    ULONG phys=(ULONG)LinearToPhys((PULONG)g_pMapPhysicalMemory,(PVOID)addr);
    PULONG tmp=(PULONG)MapViewOfFile(g_hMPM, FILE_MAP_WRITE, 0, phys & 0xfffff000, 0x1000);
    if (tmp==0)
        return FALSE;
    tmp[(phys & 0xFFF)>>2]=data;
    UnmapViewOfFile(tmp);
    return TRUE;
}

解决方案 »

  1.   

    补充 主要是:
    PULONG BaseAddress;
        PGDE=BaseAddress[VAddr>>22];主要是这个:C中的指针参数可以直接写成数组访问的方式,这个要怎么翻译成DELPHI
    这里就编译出错了,大哥请指导!
      

  2.   

    var BaseAddress: PULONG;//最好用PCardinal,省的uses Windows单元PGDE := PCardinal(Cardinal(BaseAddress) + (VAddr shr 22))^;
      

  3.   

    不知道在XP,2003下是否真的有效呢
    用PSKiller都看不见?