首页
社区
课程
招聘
[讨论][讨论]最近在看 64位 PE 头文件格式 有些疑问
发表于: 2015-2-4 23:52 5685

[讨论][讨论]最近在看 64位 PE 头文件格式 有些疑问

2015-2-4 23:52
5685
64 位的 PE 头文件定义和 32 位变化不大。。。
像代码段 重定位段这些段偏移地址类型是 ULONG
sizeof (ULONG) 得出是 4 字节
那假设一个可执行文件的某个段偏移地址是 0x9999999990 (超出了 (ULONG)4 字节的范围)
。。。。。- -!
这不是要出错的节奏?
还是我哪里理解错了?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 41
活跃值: (197)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不会溢出吧。。应该会转成ULONG 或者LONG
2015-2-5 00:37
0
雪    币: 39
活跃值: (2901)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你觉得一个正常的EXE文件大小会超过4G吗?
2015-2-5 00:45
0
雪    币: 101
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
typedef struct _IMAGE_SECTION_HEADER {
    UCHAR Name[IMAGE_SIZEOF_SHORT_NAME];
    union
    {
        ULONG PhysicalAddress;
        ULONG VirtualSize;
    } Misc;
    ULONG VirtualAddress;
    ULONG SizeOfRawData;
    ULONG PointerToRawData;
    ULONG PointerToRelocations;
    ULONG PointerToLinenumbers;
    USHORT NumberOfRelocations;
    USHORT NumberOfLinenumbers;
    ULONG Characteristics;
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
本来就是 ULONG 了....可 ULONG 也就 4 字节呀 大于4G 的地址还是记录不下
2015-2-5 08:55
0
雪    币: 101
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
大于 4G 的 .exe 文件确实没见到过...
只是假设出现这种情况怎么办
2015-2-5 08:58
0
雪    币: 2161
活跃值: (750)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
小伙,x64的重定位和x86的不一样,是基于当前地址的
所以x64的重定位极少

比如取一个变量的值,不论这个地址是否高于4GB:
mov  rax, [var]
编译为
mov rax, [rip+offset]
offset是基于rip而不是ImageBase
明白了?
2015-2-5 09:30
0
雪    币: 101
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
[QUOTE=sidyhe;1351884]小伙,x64的重定位和x86的不一样,是基于当前地址的
所以x64的重定位极少

比如取一个变量的值,不论这个地址是否高于4GB:
mov  rax, [var]
编译为
mov rax, [rip+offset]
offset是基于rip而不是ImageBase
明白了?[/QUOTE]
谢谢..
2015-2-5 10:26
0
游客
登录 | 注册 方可回帖
返回
//