trimmed hexdump.c down
This commit is contained in:
parent
d8fe7600a2
commit
79234f9ed9
4 changed files with 14 additions and 72 deletions
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/02/20 14:36:10 by jhalford #+# #+# */
|
||||
/* Updated: 2017/02/20 15:33:32 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/02/20 16:10:27 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -28,6 +28,6 @@
|
|||
# define IS_FAT(x) (x == FAT_MAGIC || x == FAT_CIGAM)
|
||||
|
||||
void dump_symtab(struct symtab_command *sym, void *file);
|
||||
void *hexdump(void *addr, unsigned int size, int option);
|
||||
void *hexdump(void *addr, unsigned int offset, unsigned int size);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/02/19 03:09:12 by jhalford #+# #+# */
|
||||
/* Updated: 2017/02/20 15:18:30 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/02/20 16:45:26 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/02/20 14:08:14 by jhalford #+# #+# */
|
||||
/* Updated: 2017/02/20 15:27:00 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/02/20 16:27:56 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -46,15 +46,16 @@ void otool(void *file)
|
|||
int is_64 = IS_MAGIC_64(magic);
|
||||
struct section_64 *sect;
|
||||
|
||||
sect = NULL;
|
||||
if (is_fat)
|
||||
ft_printf("fat binary: not supported yet.\n");
|
||||
else if (is_64)
|
||||
{
|
||||
sect = get_text_section(file);
|
||||
ft_printf("Contents of (__TEXT,__text) section\n");
|
||||
hexdump(file, sect->offset, sect->size);
|
||||
}
|
||||
else
|
||||
ft_printf("{red}unsupported architecture:{eoc} magic = %#x\n", magic);
|
||||
ft_printf("Contents of (__TEXT,__text) section\n");
|
||||
hexdump(file + sect->offset, sect->size, 0);
|
||||
}
|
||||
|
||||
int main(int ac, char **av)
|
||||
|
|
|
|||
|
|
@ -6,101 +6,42 @@
|
|||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2017/02/20 15:14:33 by jhalford #+# #+# */
|
||||
/* Updated: 2017/02/20 15:47:08 by jhalford ### ########.fr */
|
||||
/* Updated: 2017/02/20 16:52:26 by jhalford ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "ft_nm_otool.h"
|
||||
|
||||
void ft_putnbr_base16(int nbr, int format)
|
||||
{
|
||||
int base_size;
|
||||
int i;
|
||||
int result[100];
|
||||
|
||||
base_size = 16;
|
||||
i = 0;
|
||||
if (base_size > 1)
|
||||
{
|
||||
if (nbr < 0)
|
||||
{
|
||||
ft_putchar('-');
|
||||
nbr = -nbr;
|
||||
}
|
||||
while (nbr)
|
||||
{
|
||||
result[i] = nbr % base_size;
|
||||
nbr = nbr / base_size;
|
||||
i++;
|
||||
}
|
||||
while (format-- > i)
|
||||
ft_putchar('0');
|
||||
while (--i >= 0)
|
||||
ft_putchar("0123456789abcdef"[result[i]]);
|
||||
}
|
||||
}
|
||||
|
||||
static void print_contents(void *addr, unsigned int size)
|
||||
static void print_hex_contents(void *addr, unsigned int size)
|
||||
{
|
||||
void *a;
|
||||
|
||||
a = addr;
|
||||
ft_putstr(" |");
|
||||
while (a - addr < 16)
|
||||
{
|
||||
if ((a - addr) >= size)
|
||||
break ;
|
||||
else if (*(char *)a < 32 || *(char *)a > 126)
|
||||
ft_putchar('.');
|
||||
else
|
||||
ft_putchar(*(char *)a);
|
||||
a++;
|
||||
}
|
||||
ft_putchar('|');
|
||||
}
|
||||
|
||||
static void print_hex_contents(void *addr, unsigned int size, int option)
|
||||
{
|
||||
void *a;
|
||||
|
||||
a = addr;
|
||||
(void)option;
|
||||
while (a - addr < 16)
|
||||
{
|
||||
if ((a - addr) >= size)
|
||||
break ;
|
||||
if (option && FT_IS_DIV((a - addr), 8))
|
||||
ft_putchar(' ');
|
||||
else
|
||||
/* ft_putnbr_base16(*(unsigned char *)a, 2); */
|
||||
ft_printf("%02x", *(unsigned char*)a);
|
||||
ft_putchar(' ');
|
||||
a++;
|
||||
}
|
||||
}
|
||||
|
||||
void *hexdump(void *addr, unsigned int size, int option)
|
||||
void *hexdump(void *addr, unsigned int offset, unsigned int size)
|
||||
{
|
||||
void *a;
|
||||
|
||||
addr += offset;
|
||||
a = addr;
|
||||
if (addr == NULL)
|
||||
return (addr);
|
||||
while ((a - addr) < size)
|
||||
{
|
||||
/* ft_putnbr_base16((int)(a - addr), 7 + option); */
|
||||
ft_printf("%0*x\t", 16, (a - addr));
|
||||
print_hex_contents(a, (size - (a - addr)), option);
|
||||
if (option)
|
||||
print_contents(a, (size - (a - addr)));
|
||||
ft_printf("%0*llx\t", 16, (a - addr) + (unsigned long)offset);
|
||||
print_hex_contents(a, (size - (a - addr)));
|
||||
ft_putchar('\n');
|
||||
a += 16;
|
||||
/* if (!ft_strncmp((char *)a, (char *)(a - 16), 16)) */
|
||||
/* { */
|
||||
/* ft_putstr("*\n"); */
|
||||
/* while (!ft_strncmp((char *)a, (char *)(a - 16), 16)) */
|
||||
/* a += 16; */
|
||||
/* } */
|
||||
}
|
||||
return (addr);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue