如何理解Mach-O符号表

时间:2017-06-26 23:40:43

标签: disassembly mach-o

我目前正在学习如何拆解Mach-O二进制文件,我正在试图弄清楚如何理解符号表' (在载荷cmd LC_SYMTAB中)。

如何读取/解释符号表及其条目? 我不是100%,但看起来每个条目都是8个字节? (如果我错了,请纠正我)

我知道字符串表是一组由空字节分隔的字符串,但什么是符号表及其用途?

感谢。

1 个答案:

答案 0 :(得分:2)

直接来自<mach-o/nlist.h>

struct nlist {
    union {
        uint32_t n_strx;    /* index into the string table */
    } n_un;
    uint8_t n_type;         /* type flag, see below */
    uint8_t n_sect;         /* section number or NO_SECT */
    int16_t n_desc;         /* see <mach-o/stab.h> */
    uint32_t n_value;       /* value of this symbol (or stab offset) */
};

struct nlist_64 {
    union {
        uint32_t  n_strx;   /* index into the string table */
    } n_un;
    uint8_t n_type;         /* type flag, see below */
    uint8_t n_sect;         /* section number or NO_SECT */
    uint16_t n_desc;        /* see <mach-o/stab.h> */
    uint64_t n_value;       /* value of this symbol (or stab offset) */
};

所以不,那不应该是8个字节,而是32位的12个字节和64位二进制的16个字节。