mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-11 05:52:36 +02:00
util/nvmutil: better hexdump
this is a more generic one that i implemented for "lottery.c" (which is really just a tester of my rset function in lib/rand.c) i could probably actually write a full hexdump program in libreboot-utils to be honest. Signed-off-by: Leah Rowe <leah@libreboot.org>
This commit is contained in:
@@ -395,6 +395,7 @@ int dcat(const char *s, size_t n,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
unsigned short hextonum(char ch_s);
|
unsigned short hextonum(char ch_s);
|
||||||
|
void spew_hex(const void *data, size_t len);
|
||||||
void *mkrbuf(size_t n);
|
void *mkrbuf(size_t n);
|
||||||
void rset(void *buf, size_t n);
|
void rset(void *buf, size_t n);
|
||||||
void *mkrbuf(size_t n);
|
void *mkrbuf(size_t n);
|
||||||
@@ -406,7 +407,6 @@ size_t rsize(size_t n);
|
|||||||
|
|
||||||
void cmd_helper_dump(void);
|
void cmd_helper_dump(void);
|
||||||
void print_mac_from_nvm(size_t partnum);
|
void print_mac_from_nvm(size_t partnum);
|
||||||
void hexdump(size_t partnum);
|
|
||||||
|
|
||||||
/* Helper functions for command: swap
|
/* Helper functions for command: swap
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -364,8 +364,7 @@ cmd_helper_dump(void)
|
|||||||
(size_t)p);
|
(size_t)p);
|
||||||
|
|
||||||
print_mac_from_nvm(p);
|
print_mac_from_nvm(p);
|
||||||
|
spew_hex(f->buf + (p * GBE_PART_SIZE), NVM_SIZE);
|
||||||
hexdump(p);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -390,35 +389,6 @@ print_mac_from_nvm(size_t partnum)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
hexdump(size_t partnum)
|
|
||||||
{
|
|
||||||
size_t c;
|
|
||||||
size_t row;
|
|
||||||
unsigned short val16;
|
|
||||||
|
|
||||||
for (row = 0; row < 8; row++) {
|
|
||||||
|
|
||||||
printf("%08lx ",
|
|
||||||
(size_t)((size_t)row << 4));
|
|
||||||
|
|
||||||
for (c = 0; c < 8; c++) {
|
|
||||||
|
|
||||||
val16 = nvm_word((row << 3) + c, partnum);
|
|
||||||
|
|
||||||
if (c == 4)
|
|
||||||
printf(" ");
|
|
||||||
|
|
||||||
printf(" %02x %02x",
|
|
||||||
(unsigned int)(val16 & 0xff),
|
|
||||||
(unsigned int)(val16 >> 8));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
cmd_helper_swap(void)
|
cmd_helper_swap(void)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,8 +16,10 @@
|
|||||||
defined(__NetBSD__) || defined(__APPLE__))
|
defined(__NetBSD__) || defined(__APPLE__))
|
||||||
#include <fcntl.h> /* if not arc4random: /dev/urandom */
|
#include <fcntl.h> /* if not arc4random: /dev/urandom */
|
||||||
#endif
|
#endif
|
||||||
|
#include <ctype.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
@@ -47,6 +49,48 @@ hextonum(char ch_s)
|
|||||||
return 16;
|
return 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* basically hexdump -C */
|
||||||
|
void
|
||||||
|
spew_hex(const void *data, size_t len)
|
||||||
|
{
|
||||||
|
const unsigned char *buf = (const unsigned char *)data;
|
||||||
|
unsigned char c;
|
||||||
|
size_t i;
|
||||||
|
size_t j;
|
||||||
|
|
||||||
|
if (buf == NULL ||
|
||||||
|
len == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (i = 0; i < len; i += 16) {
|
||||||
|
|
||||||
|
printf("%08zx ", i);
|
||||||
|
|
||||||
|
for (j = 0; j < 16; j++) {
|
||||||
|
|
||||||
|
if (i + j < len)
|
||||||
|
printf("%02x ", buf[i + j]);
|
||||||
|
else
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
|
if (j == 7)
|
||||||
|
printf(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
printf(" |");
|
||||||
|
|
||||||
|
for (j = 0; j < 16 && i + j < len; j++) {
|
||||||
|
|
||||||
|
c = buf[i + j];
|
||||||
|
printf("%c", isprint(c) ? c : '.');
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("|\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%08zx\n", len);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
check_bin(size_t a, const char *a_name)
|
check_bin(size_t a, const char *a_name)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,9 +13,6 @@
|
|||||||
static void
|
static void
|
||||||
exit_cleanup(void);
|
exit_cleanup(void);
|
||||||
|
|
||||||
static void
|
|
||||||
spew_buf(const void *data, size_t len);
|
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
@@ -35,53 +32,13 @@ main(int argc, char **argv)
|
|||||||
same = 1;
|
same = 1;
|
||||||
|
|
||||||
if (argc < 2) /* no spew */
|
if (argc < 2) /* no spew */
|
||||||
spew_buf(buf, BUFSIZ);
|
spew_hex(buf, BUFSIZ);
|
||||||
free(buf);
|
free(buf);
|
||||||
|
|
||||||
fprintf(stderr, "\n%s\n", same ? "You win!" : "You lose!");
|
fprintf(stderr, "\n%s\n", same ? "You win!" : "You lose!");
|
||||||
return same ^ 1;
|
return same ^ 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
spew_buf(const void *data, size_t len)
|
|
||||||
{
|
|
||||||
const unsigned char *buf = data;
|
|
||||||
unsigned char c;
|
|
||||||
size_t i, j;
|
|
||||||
|
|
||||||
if (buf == NULL ||
|
|
||||||
len == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (i = 0; i < len; i += 16) {
|
|
||||||
|
|
||||||
printf("%08zx ", i);
|
|
||||||
|
|
||||||
for (j = 0; j < 16; j++) {
|
|
||||||
|
|
||||||
if (i + j < len)
|
|
||||||
printf("%02x ", buf[i + j]);
|
|
||||||
else
|
|
||||||
printf(" ");
|
|
||||||
|
|
||||||
if (j == 7)
|
|
||||||
printf(" ");
|
|
||||||
}
|
|
||||||
|
|
||||||
printf(" |");
|
|
||||||
|
|
||||||
for (j = 0; j < 16 && i + j < len; j++) {
|
|
||||||
|
|
||||||
c = buf[i + j];
|
|
||||||
printf("%c", isprint(c) ? c : '.');
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("|\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("%08zx\n", len);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
exit_cleanup(void)
|
exit_cleanup(void)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user