int main(int argc, char* argv[]) { BYTE *pbytePEB = NULL; _asm { mov eax, dword ptr fs:[0x30] mov pbytePEB, eax } printf("PEB Addr: %x/n", pbytePEB); BYTE *pLdrData = pbytePEB + 0x0C; pLdrData = (BYTE *)*(DWORD *)pLdrData; printf("PEB_LDR_DATA Addr: %x/n", pLdrData); BYTE *pListEntry = pLdrData + 0x0C; // 改变此处的偏移量 BYTE *pFlink, *pBlink; pFlink = (BYTE *)*(DWORD *)pListEntry; printf("Flink: %x/n", pFlink); pBlink = (BYTE *)*(DWORD *)(pLdrData + 0x10); printf("Blink: %x/n/n", pBlink); DWORD *pdwFirstLdrMouduleAddr = (DWORD *)pFlink; for( ; ; ) { if(pdwFirstLdrMouduleAddr == (DWORD *)*(DWORD *)(pFlink)) break; printf("LDR_MODULE Addr: %x/n", (DWORD *)(pFlink)); printf("Flink: %x/n", *(DWORD *)(pFlink)); printf("Blink: %x/n", *(DWORD *)(pFlink + 0x4)); prin