【发布时间】:2016-08-14 05:28:45
【问题描述】:
我正在使用 otool 来获取有关我的二进制文件的信息。这是我的输出的一部分:
Load command 0
cmd LC_SEGMENT_64
cmdsize 72
segname __PAGEZERO
vmaddr 0x0000000000000000
vmsize 0x0000000100000000
fileoff 0
filesize 0
maxprot 0x00000000
initprot 0x00000000
nsects 0
flags 0x0
Load command 1
cmd LC_SEGMENT_64
cmdsize 952
segname __TEXT
vmaddr 0x0000000100000000
vmsize 0x0000000000268000
fileoff 0
filesize 2523136
maxprot 0x00000005
initprot 0x00000005
nsects 11
flags 0x0
我们可以在这里看到command 1 和segname __TEXT 从vmaddr 0x0000000100000000 开始
问题是二进制大小是 2.3MB 而 0x0000000100000000 是 4 GB!
我假设地址中间的“一”与64位架构有关,0x0000000100000000实际上是地址0x00。我一直在寻找有关此的一些信息,但没有发现任何有用的信息。谁能证实我的假设并解释这究竟是如何运作的?
【问题讨论】:
标签: virtual-memory segments otool executable-format