rendered paste body#include "revm.h"
#include "libe2dbg.h"
#include "gdbwrapper.h"
#define ERROR_CONNECTION "problem when connecting... exiting\n"
#define USAGE "Usage: ./netgdb <server> <port> <file>\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;
}