在进程的虚拟内存空间中,加载了映像文件(“something.exe”)。如果您将0x00F8EBE0 添加到该地址并读取该位置,您将获得0x127B5450。将箭头读作“指向”,方括号中的值读作“地址加偏移量”。您可以通过编程方式获取图像库using the ToolHelp32 API。
这里有一个指向对象结构的指针链,每个偏移量都会告诉你下一个指针在结构/对象中的位置。
要从其他程序使用此信息,您可以使用ReadProcessMemory。从第一个偏移量(图像库)开始,调用ReadProcessMemory,然后将相关偏移量添加到其中,然后重复。大致流程如下:
//assuming you've calculated the image base of the target
//and acquired a handle to the process:
LPVOID base = ImageBase + 0x00F8EBE0; //note: EntryPoint needs obtaining properly
LPVOID value;
ReadProcessMemory(hnd,base,(LPVOID) &value,sizeof value, NULL);
base = value + 0x20;
ReadProcessMemory(hnd,base,(LPVOID) &value,sizeof value, NULL);
base = value + 0xc;
ReadProcessMemory(hnd,base,(LPVOID) &value,sizeof value, NULL);
base = value + 0x10;
ReadProcessMemory(hnd,base,(LPVOID) &value,sizeof value, NULL);
base = value + 0x20;
ReadProcessMemory(hnd,base,(LPVOID) &value,sizeof value, NULL);
base = value + 0x44;
ReadProcessMemory(hnd,base,buf,sizeof value, NULL);
//value will now contain the number 1000.
请注意,不能保证进程的地址空间每次运行时看起来都一样;如果它分配任何内存,则入口点 (0x00F8EBE0) 的第一个偏移量将不一样。