在观看mail list之前,我对Mach-o文件中符号表“大小”的缺乏感到困惑。而且我发现在源文件中的解决方案张贴在那封电子邮件,其中指出:如何获得Mach-O文件符号表中符号的大小?
//Mach-O symbol table does have size in it
//so need to scan ahead to find symbol with next highest address.
但是,当我在的Mach-O文件解析出符号表(我从symtab_command符号表和下面的nlists)并试图以同样的方式计算一个全局符号的大小,当我比较dwarfdump(dwarfdump -ae)输出中的符号表时,我再次感到困惑。矮人转储符号表中符号的结束地址与我程序输出的结果不同。我解析出的符号表有问题吗?或者有其他解决方法吗?
一些从我的程序的输出:
<start address> <section index> <method>
0x0006d030 1 ___arclite_objc_autoreleasePoolPop
0x0006d048 1 _patch_lazy_pointers
0x0006d1f0 1 ___arclite_objc_autoreleasePoolPush
输出从dwarfdump相应部分:
0x0014a37b: [0x0006d030 - 0x0006d046) __arclite_objc_autoreleasePoolPop
0x0014a122: [0x0006d048 - 0x0006d1ee) patch_lazy_pointers
0x0014a3a0: [0x0006d1f0 - 0x0006d212) __arclite_objc_autoreleasePoolPush
所以,如果我用在“MachONormalizedFileToAtoms.cpp”的方式来计算该符号的结束地址(向前查找具有下一个最高地址的符号),结果必须与dwarfdump的输出不同。还有人知道矮人是如何计算的吗?
谢谢!
任何人都可以帮忙吗? – 2014-08-28 14:10:12