系统崩了,想重装系统,进PE后检测不到硬盘,驱动也是正常的。
重装系统或者进入bios重置硬盘
【相关推荐】
在系统中的定义,如下所示:
typedef struct _IMAGE_BASE_RELOCATION {
DWORD VirtualAddress;//4字节
DWORD SizeOfBlock;//4字节
// WORD TypeOffset[1];
} IMAGE_BASE_RELOCATION;
typedef IMAGE_BASE_RELOCATION UNALIGNED * PIMAGE_BASE_RELOCATION;
该结构体有两个成员:一个是地址,一个是大小。一个重定位表的字节数由SizeOfBlock表示,(不同块的SizeOfBlock大小不一)。每一个块记录了1000H即4KB大小的内存中需要重定位信息的地址(一页大小),这些地址以VirtualAdress为该页的基址,偏移地址占两个字节(1000H最多需要12bit即可:0~FFFH)。所以两个字节的低12位为偏移地址,而高4位就是一个标记,当此标记为0011(3)时低12为才有效,否则该2个字节可能是为了对齐而产生的,并且为对齐而产生的字节其值全为0,在64位系统中,这个值为10。由于重定位表的SizeOfBlock大小不确定,新的Block的重定位信息的结构体接着上一个Block,4字节对齐后开始,而当出现一个_IMAGE_BASE_RELOCATION结构体的值全为0时,表明重定位表结束。
这里只提出一部分比较短的Block信息,可以很明显地看到当需要重定位信息的记录长度是4Byte的倍数时,不存在高四位为0000的情况,当其不为4的倍数时,就有一个因对齐而产生的数据。
在SizeBlock后面紧跟着的就是一个TypeOffset数组,一个大小是2字节,其中高4位代表修正的类型,低12位是修正的偏移。它的大小与VirtualAddress相加就是要修正的RVA地址。当出现一个_IMAGE_BASE_RELOCATION结构体的值全为0时,表明重定位表结束。