cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

hexdump.c (1734B)


      1/*
      2 * Helper to hexdump a buffer
      3 *
      4 * Copyright (c) 2013 Red Hat, Inc.
      5 * Copyright (c) 2013 Gerd Hoffmann <kraxel@redhat.com>
      6 * Copyright (c) 2013 Peter Crosthwaite <peter.crosthwaite@xilinx.com>
      7 * Copyright (c) 2013 Xilinx, Inc
      8 *
      9 * This work is licensed under the terms of the GNU GPL, version 2.  See
     10 * the COPYING file in the top-level directory.
     11 *
     12 * Contributions after 2012-01-13 are licensed under the terms of the
     13 * GNU GPL, version 2 or (at your option) any later version.
     14 */
     15
     16#include "qemu/osdep.h"
     17#include "qemu-common.h"
     18
     19void qemu_hexdump_line(char *line, unsigned int b, const void *bufptr,
     20                       unsigned int len, bool ascii)
     21{
     22    const char *buf = bufptr;
     23    int i, c;
     24
     25    if (len > QEMU_HEXDUMP_LINE_BYTES) {
     26        len = QEMU_HEXDUMP_LINE_BYTES;
     27    }
     28
     29    line += snprintf(line, 6, "%04x:", b);
     30    for (i = 0; i < QEMU_HEXDUMP_LINE_BYTES; i++) {
     31        if ((i % 4) == 0) {
     32            *line++ = ' ';
     33        }
     34        if (i < len) {
     35            line += sprintf(line, " %02x", (unsigned char)buf[b + i]);
     36        } else {
     37            line += sprintf(line, "   ");
     38        }
     39    }
     40    if (ascii) {
     41        *line++ = ' ';
     42        for (i = 0; i < len; i++) {
     43            c = buf[b + i];
     44            if (c < ' ' || c > '~') {
     45                c = '.';
     46            }
     47            *line++ = c;
     48        }
     49    }
     50    *line = '\0';
     51}
     52
     53void qemu_hexdump(FILE *fp, const char *prefix,
     54                  const void *bufptr, size_t size)
     55{
     56    unsigned int b, len;
     57    char line[QEMU_HEXDUMP_LINE_LEN];
     58
     59    for (b = 0; b < size; b += QEMU_HEXDUMP_LINE_BYTES) {
     60        len = size - b;
     61        qemu_hexdump_line(line, b, bufptr, len, true);
     62        fprintf(fp, "%s: %s\n", prefix, line);
     63    }
     64
     65}