PE文件格式(3)
2007-01-14 20:15:00 来源:WEB开发网核心提示: IMAGE_REL_BASED_ABSOLUTE(0)使块按照32位对齐,位置为0,PE文件格式(3)(3),IMAGE_REL_BASED_HIGH(1)高16位必须应用于偏移量所指高字16位,IMAGE_REL_BASED_LOW(2)低16位必须应用于偏移量所指低字16位,第一个重定
IMAGE_REL_BASED_ABSOLUTE(0)使块按照32位对齐,位置为0。
IMAGE_REL_BASED_HIGH(1)高16位必须应用于偏移量所指高字16位。
IMAGE_REL_BASED_LOW(2) 低16位必须应用于偏移量所指低字16位。
IMAGE_REL_BASED_HIGHLOW(3)全部32位应用于所有32位。.
IMAGE_REL_BASED_HIGHADJ(4)需要32位,高16位位于偏移量,低16位位于下一个偏移量数组元素,组合为一个带符号数,加上32位的一个数,然后加上8000然后把高16位保存在偏移量的16位域内。
IMAGE_REL_BASED_MIPS_JMPADDR(5) Unknown
IMAGE_REL_BASED_SECTION(6) Unknown
IMAGE_REL_BASED_REL32(7) Unknown
举例:
0x00004000 (32bits,startingRVA)
0x00000010 (32bits,sizeofchunk)
0x3012 (16bitsrelocdata)
0x3080 (16bitsrelocdata)
0x30f6 (16bitsrelocdata)
0x0000 (16bitsrelocdata)
0x00000000 (nextchunk'sRVA)
0xff341234
第一块描述重定位起始于RVA0x4000长度16字节。因为头用去8字节,一个重定位用2个字节,总共(16-8)/2=4个重定位,第一个重定位被用于0x4012,下一个重定位于4080,第三个定位于0x40f6.最后一个无用。最后一个结束。
附录:Appendix:helloworld
---------------------
Theprogramwillbetheequivalentof
#include<stdio.h>
intmain(void)
{
puts(hello,world);
return0;
}
用Win32函数代替Cruntime:
更多精彩
赞助商链接