X-Git-Url: http://git.joshuawise.com/netwatch.git/blobdiff_plain/ea6c242bffbda5298b4def632a98b00bb6ac775d..8e7d9af004f36ed0d2dc94d1e8254e2ff5a32503:/tools/poke-rls.c?ds=inline diff --git a/tools/poke-rls.c b/tools/poke-rls.c index 01de181..557e7a9 100644 --- a/tools/poke-rls.c +++ b/tools/poke-rls.c @@ -1,3 +1,13 @@ +/* poke-rls.c + * Linux-side communication packet utility + * NetWatch system management mode administration console + * + * Copyright (c) 2008 Jacob Potter and Joshua Wise. All rights reserved. + * This program is free software; you can redistribute and/or modify it under + * the terms found in the file LICENSE in the root of this source tree. + * + */ + #include #include #include @@ -14,12 +24,22 @@ static uint16_t _get_PMBASE() return pmbase; } +typedef struct { + uint32_t signature; + uint32_t type; + uint8_t data[]; +} packet_t; -extern unsigned int poke(unsigned long addr); +extern unsigned int poke(unsigned long addr, unsigned long * value); int main(int argc, char **argv) { unsigned int res; + packet_t * packet = (packet_t *)memalign(4096, sizeof(packet_t)); + + packet->signature = 0x1BADD00D; + packet->type = 42; + strcpy(packet->data, "hello, world!"); if (iopl(3) < 0) { @@ -27,6 +47,12 @@ int main(int argc, char **argv) return 1; } - res = poke(_get_PMBASE() + 0x04); - printf("found %p\n", res); + res = poke(_get_PMBASE() + 0x04, (void *)packet); + printf("returned %p\n", res); + + if (res == 42) { + int i; + for (i = 0; i < 96; i++) + printf("%s\n", packet->data + i * 41); + } }