大家好,这是我在这个伟大网站上发表的第一篇文章,对不起该错误。
我是学生。我必须做我自己的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));
}
你能帮我找一下与之不同的地方吗?
全部