cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

dmesg.c (1656B)


      1/*
      2 *  linux/arch/m68k/tools/amiga/dmesg.c -- Retrieve the kernel messages stored
      3 *					   in Chip RAM with the kernel command
      4 *					   line option `debug=mem'.
      5 *
      6 *  © Copyright 1996 by Geert Uytterhoeven <geert@linux-m68k.org>
      7 *
      8 *
      9 *  Usage:
     10 *
     11 *	dmesg
     12 *	dmesg <CHIPMEM_END>
     13 *
     14 *
     15 *  This file is subject to the terms and conditions of the GNU General Public
     16 *  License.  See the file COPYING in the main directory of the Linux
     17 *  distribution for more details.
     18 */
     19
     20
     21#include <stdio.h>
     22#include <stdlib.h>
     23#include <unistd.h>
     24
     25
     26#define CHIPMEM_START	0x00000000
     27#define CHIPMEM_END	0x00200000	/* overridden by argv[1] */
     28
     29#define SAVEKMSG_MAGIC1	0x53415645	/* 'SAVE' */
     30#define SAVEKMSG_MAGIC2	0x4B4D5347	/* 'KMSG' */
     31
     32struct savekmsg {
     33    u_long magic1;	/* SAVEKMSG_MAGIC1 */
     34    u_long magic2;	/* SAVEKMSG_MAGIC2 */
     35    u_long magicptr;	/* address of magic1 */
     36    u_long size;
     37    char data[];
     38};
     39
     40
     41int main(int argc, char *argv[])
     42{
     43    u_long start = CHIPMEM_START, end = CHIPMEM_END, p;
     44    int found = 0;
     45    struct savekmsg *m = NULL;
     46
     47    if (argc >= 2)
     48	end = strtoul(argv[1], NULL, 0);
     49    printf("Searching for SAVEKMSG magic...\n");
     50    for (p = start; p <= end-sizeof(struct savekmsg); p += 4) {
     51	m = (struct savekmsg *)p;
     52	if ((m->magic1 == SAVEKMSG_MAGIC1) && (m->magic2 == SAVEKMSG_MAGIC2) &&
     53	    (m->magicptr == p)) {
     54	    found = 1;
     55	    break;
     56	}
     57    }
     58    if (!found)
     59	printf("Not found\n");
     60    else {
     61	printf("Found %ld bytes at 0x%08lx\n", m->size, (u_long)&m->data);
     62	puts(">>>>>>>>>>>>>>>>>>>>");
     63	fflush(stdout);
     64	write(1, &m->data, m->size);
     65	fflush(stdout);
     66	puts("<<<<<<<<<<<<<<<<<<<<");
     67    }
     68    return(0);
     69}