我正在使用 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
withsegname __TEXT
开始于vmaddr 0x0000000100000000
问题是二进制大小是 2.3MB 而 0x0000000100000000 是 4 GB!
我假设 address 中间的“一个”与 64 位架构有关,0x0000000100000000
实际上是 address 0x00
。我一直在寻找有关此的一些信息,但没有发现任何有用的信息。谁能证实我的假设并解释这是如何工作的?