#include "revm.h" #include "libe2dbg.h" #include "gdbwrapper.h" #define ERROR_CONNECTION "problem when connecting... exiting\n" #define USAGE "Usage: ./netgdb \n" #define KEDBGNAME "kedbg" /* The commands are for internal debuging purpose. */ #define COM1 "youpla" #define HELPCOM1 "Not much to say..." /**************** Command definition and registration ****************/ /* Dummy function, for compatibility with e2dbg. */ int cmd_linkmap(void) { return 0; } /* Dummy function, for compatibility with e2dbg. */ int e2dbg_linkmap_load(char *name) { name = NULL; return 0; } /* Debugging purpose. */ void cmd_com1(void) { fprintf(stderr, "YOUPLA: %d\n", dbgworld.mode); } void cmd_kedbgstart(void) { fprintf(stderr, "Rasta root :)\n"); } void cmd_kedbgcont(void) { fprintf(stderr, "Rasta root 2 :)\n"); } void kedbg_register_command(void) { revm_command_add(COM1, cmd_com1, revm_getvarparams, 0, HELPCOM1); /* These commands are overwritten. */ revm_command_add(CMD_START, cmd_kedbgstart, NULL, 1, HLP_START); revm_command_add(CMD_CONTINUE, cmd_kedbgcont, NULL, 1, HLP_CONTINUE); revm_command_add(CMD_CONTINUE2, cmd_kedbgcont, NULL, 1, HLP_CONTINUE); } /**************** Vector stuff ****************/ /**************** Vector initialization ****************/ void kedbg_register_vector(void) { /* e2dbg_register_gregshook(ELFSH_ARCH_IA32, E2DBG_HOST_PROC, */ /* ELFSH_OS_FREEBSD, e2dbg_get_regvars_ia32_bsd); */ } /**************** Main stuff ****************/ void kedbg_create_prompt(char *buf, unsigned int size) { snprintf(buf, size - 1, "%s%s%s%s%s%s%s%s%s%s%s ", revm_colorget("%s", "pspecial", "("), revm_colorget("%s", "psname" , KEDBGNAME), revm_colorget("%s", "pspecial", "-"), revm_colorget("%s", "pversion", REVM_VERSION), revm_colorget("%s", "pspecial", "-"), revm_colorget("%s", "prelease", REVM_RELEASE), revm_colorget("%s", "pspecial", "-"), revm_colorget("%s", "pedition", REVM_EDITION), revm_colorget("%s", "pspecial", "@"), revm_colorget("%s", "psname", world.curjob->ws.name), revm_colorget("%s", "pspecial", ")")); revm_endline(); } int kedbg_main(int argc, char **argv) { int ret; /* The "1" stands for interactive. */ revm_setup(1, argv, REVM_STATE_CMDLINE, REVM_SIDE_CLIENT); revm_config(".kedbgrc"); revm_set_prompt(kedbg_create_prompt); e2dbg_register_command(); /* Overwrite of some commands. */ kedbg_register_command(); /* file = elfsh_map_obj(argv[3]); */ /* ASSERT(file != NULL); */ /* fprintf(stderr, "trouxtt: %p\n", file); */ /* fflush(stderr); */ ret = revm_file_load(argv[3], 0, NULL); ASSERT(!ret); elfsh_set_debug_mode(); revm_run(argc, argv); fprintf(stderr, "Double mouche"); fflush(stderr); return 0; } int main(int argc, char **argv) { int ret; if (argc != 4) { printf(USAGE); return -1; } ret = gdbwrap_simpleconnect(argv[1], atoi(argv[2])); if (ret == -1) { fprintf(stderr, ERROR_CONNECTION); return -1; } kedbg_main(argc, argv); return 0; }