61 lines
1.4 KiB
C
61 lines
1.4 KiB
C
//
|
|
// hexdump.c
|
|
// darksword-kexploit-fun
|
|
//
|
|
// Created by seo on 3/26/26.
|
|
//
|
|
|
|
#include <stdio.h>
|
|
#include <fcntl.h>
|
|
#include <unistd.h>
|
|
#include <stdlib.h>
|
|
|
|
#include "hexdump.h"
|
|
|
|
|
|
void hexdump(const void* data, size_t size) {
|
|
char ascii[17];
|
|
size_t i, j;
|
|
ascii[16] = '\0';
|
|
for (i = 0; i < size; ++i) {
|
|
if ((i % 16) == 0)
|
|
{
|
|
printf("[0x%016llx+0x%03zx] ", &data, i);
|
|
}
|
|
|
|
printf("%02X ", ((unsigned char*)data)[i]);
|
|
if (((unsigned char*)data)[i] >= ' ' && ((unsigned char*)data)[i] <= '~') {
|
|
ascii[i % 16] = ((unsigned char*)data)[i];
|
|
}
|
|
else
|
|
ascii[i % 16] = '.';
|
|
|
|
if ((i + 1) % 8 == 0 || i + 1 == size) {
|
|
printf(" ");
|
|
if ((i + 1) % 16 == 0)
|
|
printf("| %s \n", ascii);
|
|
else if (i + 1 == size) {
|
|
ascii[(i + 1) % 16] = '\0';
|
|
if ((i + 1) % 16 <= 8) {
|
|
printf(" ");
|
|
}
|
|
for (j = (i + 1) % 16; j < 16; ++j)
|
|
printf(" ");
|
|
|
|
printf("| %s \n", ascii);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void hexdump_file(const char *path, size_t size)
|
|
{
|
|
int fd = open(path, O_RDONLY);
|
|
void *buf = malloc(size);
|
|
ssize_t n = read(fd, buf, size);
|
|
close(fd);
|
|
if (n > 0)
|
|
hexdump(buf, n);
|
|
free(buf);
|
|
}
|