问题描述
我想为 PE 格式编写一个加载程序。一个 binary 包含在虚拟地址空间中重叠的两个部分。
5 sections:
name virtual-size | virtual-address | sizeOfRawData | ptrToRawData | characteristics
[ 0] ".text" 0x00116e/ 4462 | 0x001000/ 4096 | 0x001200/ 4608 | 0x000400/ 1024 | 0x60000020 R-X CODE
[ 1] ".rdata" 0x000e42/ 3650 | 0x003000/ 12288 | 0x001000/ 4096 | 0x001600/ 5632 | 0x40000040 R-- IDATA
[ 2] ".data" 0x015011/ 86033 | 0x004000/ 16384 | 0x005200/ 20992 | 0x002600/ 9728 | 0xc0000040 RW- IDATA
[ 3] ".rsrc" 0x003000/ 12288 | 0x01a000/106496 | 0x002800/ 10240 | 0x007800/ 30720 | 0x40000040 R-- IDATA
[ 4] ".reloc" 0x000474/ 1140 | 0x01b000/110592 | 0x000000/ 0 | 0x007c00/ 31744 | 0x50000000 R-- MEM_SHARED
此处 .rsrc
的范围为 0x01a000-0x01d000,而 .reloc
的范围为 0x01b000-0x01b474,这是一个明显的重叠。
问题:
- 这个二进制文件有什么特别之处,以便这些部分不重叠吗?
- 因为 spec 没有说明重叠:这样的二进制文件对 Windows 有效吗?
- 哪个部分控制 0x01b000-0x01b474 范围内字节的实际内容?
- 范围 0x01b000-0x01b474 有什么特征?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)