我自己的NM二进制文件

时间:2017-06-30 15:12:41

标签: c linux

大家好,这是我在这个伟大网站上发表的第一篇文章,对不起该错误。

我是学生。我必须做我自己的nm二进制文件。我从64位开始,我有一个奇怪的问题。

我的nm和真实nm之间的nsyms数量不同。我不知道为什么......

(*nm)->fd =二进制文件中的fd

(*nm)->buff = fstat

返回的结构

(*nm)->data =返回mmap

的指针

这是64位的代码:

    #include "../incs/ft_nm.h"

static bool                 print_output(t_nm **nm, struct symtab_command *sym)
{
    if (nm == NULL || *nm == NULL || sym == NULL)
        ERROR_EXIT("Invalid arguments 2", __FILE__, NULL, NULL);
    printf("nb symbole : %d\n", sym->nsyms);
    return (true);
}

static bool                 loop_func_64(t_nm **nm, struct mach_header_64 *header, struct load_command *lc)
{
    uint32_t                i;

    if (nm == NULL || *nm == NULL || header == NULL || lc == NULL)
        ERROR_EXIT("Invalid arguments", __FILE__, NULL, NULL);
    i = 0;
    while (i++ < header->ncmds)
    {
        if (lc->cmd == LC_SYMTAB)
            return (print_output(nm, (void *)lc));
        if ((void*)(lc = (void *)lc + lc->cmdsize) > (void*)(*nm)->end)
            ERROR_EXIT("Ptr lc over the end 2", __FILE__, del_nm, nm);
    }
    return (false);
}

bool                        func_64(t_nm **nm)
{
    struct mach_header_64   *header;
    struct load_command     *lc;

    if (nm == NULL || *nm == NULL)
        ERROR_EXIT("NM = NULL", __FILE__, NULL, NULL);
    header = (struct mach_header_64*)(*nm)->data;
    if((void*)(lc = (void*)(*nm)->data + sizeof(*header)) > (void*)(*nm)->end)
        ERROR_EXIT("Ptr lc over the end", __FILE__, del_nm, nm);
    return (loop_func_64(nm, header, lc));
}

你能帮我找一下与之不同的地方吗?

全部

0 个答案:

没有答案