mirror of
https://github.com/radareorg/radare2.git
synced 2024-10-06 18:13:46 +00:00
* Add some missing methods in some vapis for valaswig
* Merge r_macro inside r_cmd - Rename RCommand to RCmd * Propagate LIL_ENDIAN in userconf.h.acr * Simplify configure script in swig/ - valaswig is now mandatory * Add 'st.fastcall' examples. --HG-- rename : libr/macro/macro.c => libr/cmd/macro.c
This commit is contained in:
parent
49f977a696
commit
d6125712b5
3
TODO
3
TODO
@ -7,6 +7,9 @@
|
||||
|
||||
<{include libr/TODO}>
|
||||
|
||||
|
||||
* Honor fs from f
|
||||
|
||||
* Write manpages
|
||||
|
||||
* ALL threads must be stopped when a breakpoint is handled..
|
||||
|
@ -6,7 +6,7 @@ PFX=${DESTDIR}${PREFIX}
|
||||
#PREFIX=${PFX}
|
||||
|
||||
# Libraries
|
||||
LIBLIST=util line cons line lib io meta lang flags bin macro hash print config syscall socket cmd asm anal parse search diff bp reg debug core sign vm th db
|
||||
LIBLIST=util line cons line lib io meta lang flags bin hash print config syscall socket cmd asm anal parse search diff bp reg debug core sign vm th db
|
||||
|
||||
# Under development
|
||||
#LIBLIST+=print
|
||||
|
@ -1,5 +1,5 @@
|
||||
NAME=r_cmd
|
||||
OBJ=cmd.o handle.o
|
||||
OBJ=cmd.o handle.o macro.o
|
||||
DEPS=r_util
|
||||
|
||||
include ../config.mk
|
||||
|
@ -3,7 +3,7 @@
|
||||
#include <r_cmd.h>
|
||||
#include <r_util.h>
|
||||
|
||||
R_API RCommand *r_cmd_init(struct r_cmd_t *cmd) {
|
||||
R_API RCmd *r_cmd_init(RCmd *cmd) {
|
||||
int i;
|
||||
if (cmd) {
|
||||
INIT_LIST_HEAD (&cmd->lcmds);
|
||||
@ -11,12 +11,13 @@ R_API RCommand *r_cmd_init(struct r_cmd_t *cmd) {
|
||||
cmd->cmds[i] = NULL;
|
||||
cmd->data = NULL;
|
||||
}
|
||||
r_cmd_handle_init(cmd);
|
||||
r_cmd_handle_init (cmd);
|
||||
r_cmd_macro_init (&cmd->macro);
|
||||
return cmd;
|
||||
}
|
||||
|
||||
R_API RCommand *r_cmd_new () {
|
||||
return r_cmd_init (R_NEW (RCommand));
|
||||
R_API RCmd *r_cmd_new () {
|
||||
return r_cmd_init (R_NEW (RCmd));
|
||||
}
|
||||
|
||||
R_API int r_cmd_set_data(struct r_cmd_t *cmd, void *data) {
|
||||
@ -24,8 +25,8 @@ R_API int r_cmd_set_data(struct r_cmd_t *cmd, void *data) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
R_API int r_cmd_add_long(RCommand *cmd, const char *lcmd, const char *scmd, const char *desc) {
|
||||
RCommandLongItem *item = R_NEW (RCommandLongItem);
|
||||
R_API int r_cmd_add_long(RCmd *cmd, const char *lcmd, const char *scmd, const char *desc) {
|
||||
RCmdLongItem *item = R_NEW (RCmdLongItem);
|
||||
if (item == NULL)
|
||||
return R_FALSE;
|
||||
strncpy (item->cmd, lcmd, sizeof (item->cmd));
|
||||
@ -36,13 +37,13 @@ R_API int r_cmd_add_long(RCommand *cmd, const char *lcmd, const char *scmd, cons
|
||||
return R_TRUE;
|
||||
}
|
||||
|
||||
R_API int r_cmd_add(RCommand *c, const char *cmd, const char *desc, r_cmd_callback(cb)) {
|
||||
R_API int r_cmd_add(RCmd *c, const char *cmd, const char *desc, r_cmd_callback(cb)) {
|
||||
struct r_cmd_item_t *item;
|
||||
int idx = (ut8)cmd[0];
|
||||
|
||||
item = c->cmds[idx];
|
||||
if (item == NULL) {
|
||||
item = R_NEW (RCommandItem);
|
||||
item = R_NEW (RCmdItem);
|
||||
c->cmds[idx] = item;
|
||||
}
|
||||
strncpy (item->cmd, cmd, sizeof (item->cmd));
|
||||
@ -62,11 +63,11 @@ R_API int r_cmd_call(struct r_cmd_t *cmd, const char *input) {
|
||||
struct r_cmd_item_t *c;
|
||||
int ret = -1;
|
||||
RListIter *iter;
|
||||
RCommandHandle *cp;
|
||||
RCmdHandle *cp;
|
||||
|
||||
iter = r_list_iterator (cmd->plist);
|
||||
while (r_list_iter_next (iter)) {
|
||||
cp = (RCommandHandle*) r_list_iter_get (iter);
|
||||
cp = (RCmdHandle*) r_list_iter_get (iter);
|
||||
if (cp->call (NULL, input))
|
||||
return R_TRUE;
|
||||
}
|
||||
@ -89,7 +90,7 @@ R_API int r_cmd_call_long(struct r_cmd_t *cmd, const char *input) {
|
||||
int inplen = strlen(input)+1;
|
||||
|
||||
list_for_each_prev (pos, &cmd->lcmds) {
|
||||
RCommandLongItem *c = list_entry (pos, struct r_cmd_long_item_t, list);
|
||||
RCmdLongItem *c = list_entry (pos, struct r_cmd_long_item_t, list);
|
||||
if (inplen>=c->cmd_len && !r_str_cmp (input, c->cmd, c->cmd_len)) {
|
||||
inp = alloca(inplen);
|
||||
strcpy (inp, c->cmd_short);
|
||||
|
@ -28,11 +28,11 @@ R_API int r_cmd_handle_init(struct r_cmd_t *cmd) {
|
||||
|
||||
R_API int r_cmd_handle_check(struct r_cmd_t *cmd, const char *a0) {
|
||||
RListIter *iter;
|
||||
RCommandHandle *cp;
|
||||
RCmdHandle *cp;
|
||||
|
||||
iter = r_list_iterator (cmd->plist);
|
||||
while (r_list_iter_next (iter)) {
|
||||
cp = (RCommandHandle*) r_list_iter_get (iter);
|
||||
cp = (RCmdHandle*) r_list_iter_get (iter);
|
||||
if (cp->call (NULL, a0))
|
||||
return R_TRUE;
|
||||
}
|
||||
|
@ -1,9 +1,8 @@
|
||||
/* radare - LGPL - Copyright 2008-2009 pancake<nopcode.org> */
|
||||
/* radare - LGPL - Copyright 2008-2010 pancake<nopcode.org> */
|
||||
|
||||
#include <stdio.h>
|
||||
#include "r_macro.h"
|
||||
#include "r_cmd.h"
|
||||
#include "r_util.h"
|
||||
#include "r_core.h"
|
||||
|
||||
#if 0
|
||||
static ut64 _macro_break_value = 0;
|
||||
@ -13,8 +12,7 @@ int macro_counter = 0;
|
||||
static struct list_head macros;
|
||||
#endif
|
||||
|
||||
void r_macro_init(struct r_macro_t *mac)
|
||||
{
|
||||
void r_cmd_macro_init(RCmdMacro *mac) {
|
||||
mac->counter = 0;
|
||||
mac->_brk_value = 0;
|
||||
mac->brk_value = &mac->_brk_value;
|
||||
@ -22,15 +20,14 @@ void r_macro_init(struct r_macro_t *mac)
|
||||
mac->num = NULL;
|
||||
mac->user = NULL;
|
||||
mac->cmd = NULL;
|
||||
INIT_LIST_HEAD(&mac->macros);
|
||||
INIT_LIST_HEAD (&mac->macros);
|
||||
}
|
||||
|
||||
// XXX add support single line function definitions
|
||||
// XXX add support for single name multiple nargs macros
|
||||
int r_macro_add(struct r_macro_t *mac, const char *oname)
|
||||
{
|
||||
int r_cmd_macro_add(RCmdMacro *mac, const char *oname) {
|
||||
struct list_head *pos;
|
||||
struct r_macro_item_t *macro;
|
||||
struct r_cmd_macro_item_t *macro;
|
||||
char buf[1024];
|
||||
char *bufp;
|
||||
char *pbody;
|
||||
@ -40,12 +37,12 @@ int r_macro_add(struct r_macro_t *mac, const char *oname)
|
||||
char *name, *args = NULL;
|
||||
|
||||
if (oname[0]=='\0')
|
||||
return r_macro_list(mac);
|
||||
return r_cmd_macro_list(mac);
|
||||
|
||||
name = alloca(strlen(oname)+1);
|
||||
strcpy(name, oname);
|
||||
name = alloca (strlen(oname)+1);
|
||||
strcpy (name, oname);
|
||||
|
||||
pbody = strchr(name, ',');
|
||||
pbody = strchr (name, ',');
|
||||
if (pbody) {
|
||||
pbody[0]='\0';
|
||||
pbody = pbody + 1;
|
||||
@ -58,13 +55,13 @@ int r_macro_add(struct r_macro_t *mac, const char *oname)
|
||||
|
||||
macro = NULL;
|
||||
macro_update = 0;
|
||||
ptr = strchr(name, ' ');
|
||||
ptr = strchr (name, ' ');
|
||||
if (ptr) {
|
||||
*ptr='\0';
|
||||
args = ptr +1;
|
||||
}
|
||||
list_for_each_prev(pos, &mac->macros) {
|
||||
struct r_macro_item_t *m = list_entry(pos, struct r_macro_item_t, list);
|
||||
list_for_each_prev (pos, &mac->macros) {
|
||||
RCmdMacroItem *m = list_entry(pos, struct r_cmd_macro_item_t, list);
|
||||
if (!strcmp(name, m->name)) {
|
||||
macro = m;
|
||||
// free(macro->name);
|
||||
@ -75,7 +72,7 @@ int r_macro_add(struct r_macro_t *mac, const char *oname)
|
||||
}
|
||||
}
|
||||
if (macro == NULL) {
|
||||
macro = (struct r_macro_item_t *)malloc(sizeof(struct r_macro_item_t));
|
||||
macro = (struct r_cmd_macro_item_t *)malloc(sizeof(struct r_cmd_macro_item_t));
|
||||
macro->name = strdup(name);
|
||||
}
|
||||
if (pbody) macro->code = (char *)malloc(strlen(pbody)+2);
|
||||
@ -117,33 +114,31 @@ int r_macro_add(struct r_macro_t *mac, const char *oname)
|
||||
lidx = strlen(buf)-2;
|
||||
if (buf[lidx]==')' && buf[lidx-1]!='(') {
|
||||
buf[lidx]='\0';
|
||||
strcat(macro->code, bufp);
|
||||
strcat (macro->code, bufp);
|
||||
break;
|
||||
}
|
||||
if (buf[0] != '\n')
|
||||
strcat(macro->code, bufp);
|
||||
strcat (macro->code, bufp);
|
||||
}
|
||||
}
|
||||
if (macro_update == 0)
|
||||
list_add_tail(&(macro->list), &(mac->macros));
|
||||
|
||||
list_add_tail (&(macro->list), &(mac->macros));
|
||||
return 0;
|
||||
}
|
||||
|
||||
int r_macro_rm(struct r_macro_t *mac, const char *_name)
|
||||
{
|
||||
char *name = alloca(strlen(_name));
|
||||
int r_cmd_macro_rm(struct r_cmd_macro_t *mac, const char *_name) {
|
||||
char *name = alloca (strlen(_name));
|
||||
struct list_head *pos;
|
||||
char *ptr = strchr(name, ')');
|
||||
char *ptr = strchr (name, ')');
|
||||
if (ptr) *ptr='\0';
|
||||
list_for_each_prev(pos, &mac->macros) {
|
||||
struct r_macro_item_t *mac = list_entry(pos, struct r_macro_item_t, list);
|
||||
if (!strcmp(mac->name, name)) {
|
||||
free(mac->name);
|
||||
free(mac->code);
|
||||
list_del(&(mac->list));
|
||||
free(mac);
|
||||
fprintf(stderr, "Macro '%s' removed.\n", name);
|
||||
RCmdMacroItem *mac = list_entry(pos, RCmdMacroItem, list);
|
||||
if (!strcmp (mac->name, name)) {
|
||||
free (mac->name);
|
||||
free (mac->code);
|
||||
list_del (&(mac->list));
|
||||
free (mac);
|
||||
eprintf ("Macro '%s' removed.\n", name);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@ -151,19 +146,18 @@ int r_macro_rm(struct r_macro_t *mac, const char *_name)
|
||||
}
|
||||
|
||||
// TODO: use mac->printf which is r_cons_printf at the end
|
||||
int r_macro_list(struct r_macro_t *mac)
|
||||
{
|
||||
int r_cmd_macro_list(RCmdMacro *mac) {
|
||||
int j, idx = 0;
|
||||
struct list_head *pos;
|
||||
list_for_each_prev(pos, &mac->macros) {
|
||||
struct r_macro_item_t *m = list_entry(pos, struct r_macro_item_t, list);
|
||||
/* mac-> */ printf("%d (%s %s, ", idx, m->name, m->args);
|
||||
for(j=0;m->code[j];j++) {
|
||||
list_for_each_prev (pos, &mac->macros) {
|
||||
RCmdMacroItem *m = list_entry (pos, RCmdMacroItem, list);
|
||||
/* mac-> */ printf ("%d (%s %s, ", idx, m->name, m->args);
|
||||
for (j=0; m->code[j]; j++) {
|
||||
if (m->code[j]=='\n')
|
||||
/* mac-> */ printf(", ");
|
||||
else /* mac->*/ printf("%c", m->code[j]);
|
||||
/* mac-> */ printf (", ");
|
||||
else /* mac->*/ printf ("%c", m->code[j]);
|
||||
}
|
||||
/* mac->*/ printf(")\n");
|
||||
/* mac->*/ printf (")\n");
|
||||
idx++;
|
||||
}
|
||||
return 0;
|
||||
@ -182,8 +176,7 @@ int r_macro_list(struct r_macro_t *mac)
|
||||
.(define patata 3)
|
||||
#endif
|
||||
|
||||
int r_macro_cmd_args(struct r_macro_t *mac, const char *ptr, const char *args, int nargs)
|
||||
{
|
||||
int r_cmd_macro_cmd_args(RCmdMacro *mac, const char *ptr, const char *args, int nargs) {
|
||||
int i,j;
|
||||
char *cmd = alloca(strlen(ptr)+1024);
|
||||
char *arg = args?strdup(args):strdup("");
|
||||
@ -220,11 +213,9 @@ int r_macro_cmd_args(struct r_macro_t *mac, const char *ptr, const char *args, i
|
||||
return (*cmd==')')?0:mac->cmd(mac->user, cmd);
|
||||
}
|
||||
|
||||
char *r_macro_label_process(struct r_macro_t *mac, struct r_macro_label_t *labels, int *labels_n, char *ptr)
|
||||
{
|
||||
char *r_cmd_macro_label_process(RCmdMacro *mac, RCmdMacroLabel *labels, int *labels_n, char *ptr) {
|
||||
int i;
|
||||
for(;ptr[0]==' ';ptr=ptr+1);
|
||||
|
||||
for (;ptr[0]==' ';ptr=ptr+1);
|
||||
if (ptr[strlen(ptr)-1]==':') {
|
||||
/* label detected */
|
||||
if (ptr[0]=='.') {
|
||||
@ -265,9 +256,9 @@ char *r_macro_label_process(struct r_macro_t *mac, struct r_macro_label_t *label
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
for(i=0;i<*labels_n;i++) {
|
||||
for (i=0; i<*labels_n; i++) {
|
||||
// eprintf("---| chk '%s'\n", labels[i].name);
|
||||
if (!strcmp(ptr+1, labels[i].name)) {
|
||||
if (!strcmp (ptr+1, labels[i].name)) {
|
||||
i = 0;
|
||||
break;
|
||||
}
|
||||
@ -275,20 +266,19 @@ char *r_macro_label_process(struct r_macro_t *mac, struct r_macro_label_t *label
|
||||
/* Add label */
|
||||
// eprintf("===> ADD LABEL(%s)\n", ptr);
|
||||
if (i == 0) {
|
||||
strncpy(labels[*labels_n].name, ptr, 64);
|
||||
strncpy (labels[*labels_n].name, ptr, 64);
|
||||
labels[*labels_n].ptr = ptr+strlen(ptr)+1;
|
||||
*labels_n = *labels_n + 1;
|
||||
}
|
||||
}
|
||||
return ptr + strlen(ptr)+1;
|
||||
return ptr + strlen (ptr)+1;
|
||||
}
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
/* TODO: add support for spaced arguments */
|
||||
int r_macro_call(struct r_macro_t *mac, const char *name)
|
||||
{
|
||||
int r_cmd_macro_call(RCmdMacro *mac, const char *name) {
|
||||
char *args;
|
||||
int nargs = 0;
|
||||
char *str, *ptr, *ptr2;
|
||||
@ -296,39 +286,39 @@ int r_macro_call(struct r_macro_t *mac, const char *name)
|
||||
static int macro_level = 0;
|
||||
/* labels */
|
||||
int labels_n = 0;
|
||||
struct r_macro_label_t labels[MACRO_LABELS];
|
||||
struct r_cmd_macro_label_t labels[MACRO_LABELS];
|
||||
|
||||
str = alloca(strlen(name)+1);
|
||||
strcpy(str, name);
|
||||
ptr = strchr(str, ')');
|
||||
str = alloca (strlen (name)+1);
|
||||
strcpy (str, name);
|
||||
ptr = strchr (str, ')');
|
||||
if (ptr == NULL) {
|
||||
fprintf(stderr, "Missing end ')' parenthesis.\n");
|
||||
eprintf ("Missing end ')' parenthesis.\n");
|
||||
return R_FALSE;
|
||||
} else *ptr='\0';
|
||||
|
||||
args = strchr(str, ' ');
|
||||
args = strchr (str, ' ');
|
||||
if (args) {
|
||||
*args='\0';
|
||||
args = args +1;
|
||||
nargs = r_str_word_set0(args);
|
||||
args = args+1;
|
||||
nargs = r_str_word_set0 (args);
|
||||
}
|
||||
|
||||
macro_level ++;
|
||||
if (macro_level > MACRO_LIMIT) {
|
||||
fprintf(stderr, "Maximum macro recursivity reached.\n");
|
||||
eprintf ("Maximum macro recursivity reached.\n");
|
||||
macro_level --;
|
||||
return 0;
|
||||
}
|
||||
|
||||
list_for_each_prev(pos, &mac->macros) {
|
||||
struct r_macro_item_t *m = list_entry(pos, struct r_macro_item_t, list);
|
||||
list_for_each_prev (pos, &mac->macros) {
|
||||
RCmdMacroItem *m = list_entry (pos, RCmdMacroItem, list);
|
||||
|
||||
if (!strcmp(str, m->name)) {
|
||||
if (!strcmp (str, m->name)) {
|
||||
char *ptr = m->code;
|
||||
char *end = strchr(ptr, '\n');
|
||||
char *end = strchr (ptr, '\n');
|
||||
|
||||
if (m->nargs != 0 && nargs != m->nargs) {
|
||||
eprintf("Macro '%s' expects %d args\n", m->name, m->nargs);
|
||||
eprintf ("Macro '%s' expects %d args\n", m->name, m->nargs);
|
||||
macro_level --;
|
||||
return R_FALSE;
|
||||
}
|
||||
@ -338,9 +328,9 @@ int r_macro_call(struct r_macro_t *mac, const char *name)
|
||||
if (end) *end='\0';
|
||||
|
||||
/* Label handling */
|
||||
ptr2 = r_macro_label_process(mac, &(labels[0]), &labels_n, ptr);
|
||||
ptr2 = r_cmd_macro_label_process (mac, &(labels[0]), &labels_n, ptr);
|
||||
if (ptr2 == NULL) {
|
||||
eprintf("Oops. invalid label name\n");
|
||||
eprintf ("Oops. invalid label name\n");
|
||||
break;
|
||||
} else
|
||||
if (ptr != ptr2 && end) {
|
||||
@ -352,7 +342,7 @@ int r_macro_call(struct r_macro_t *mac, const char *name)
|
||||
|
||||
/* Command execution */
|
||||
if (*ptr)
|
||||
r_macro_cmd_args(mac, ptr, args, nargs);
|
||||
r_cmd_macro_cmd_args (mac, ptr, args, nargs);
|
||||
if (end) {
|
||||
*end='\n';
|
||||
ptr = end + 1;
|
||||
@ -362,25 +352,24 @@ int r_macro_call(struct r_macro_t *mac, const char *name)
|
||||
}
|
||||
|
||||
/* Fetch next command */
|
||||
end = strchr(ptr, '\n');
|
||||
} while(!mac->brk);
|
||||
end = strchr (ptr, '\n');
|
||||
} while (!mac->brk);
|
||||
|
||||
if (mac->brk) {
|
||||
macro_level --;
|
||||
macro_level--;
|
||||
return R_TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
eprintf("No macro named '%s'\n", str);
|
||||
macro_level --;
|
||||
eprintf ("No macro named '%s'\n", str);
|
||||
macro_level--;
|
||||
return R_TRUE;
|
||||
}
|
||||
|
||||
int r_macro_break(struct r_macro_t *mac, const char *value)
|
||||
{
|
||||
int r_cmd_macro_break(RCmdMacro *mac, const char *value) {
|
||||
mac->brk = 1;
|
||||
mac->brk_value= NULL;
|
||||
mac->_brk_value = (ut64)r_num_math(mac->num, value);
|
||||
mac->_brk_value = (ut64)r_num_math (mac->num, value);
|
||||
if (value && *value)
|
||||
mac->brk_value = &mac->_brk_value;
|
||||
return 0;
|
@ -303,7 +303,7 @@ static int cmd_interpret(void *data, const char *input) {
|
||||
break;
|
||||
case '(':
|
||||
//eprintf ("macro call (%s)\n", input+1);
|
||||
r_macro_call (&core->macro, input+1);
|
||||
r_cmd_macro_call (&core->cmd.macro, input+1);
|
||||
break;
|
||||
case '?':
|
||||
r_cons_printf (
|
||||
@ -1704,13 +1704,13 @@ static int cmd_macro(void *data, const char *input) {
|
||||
RCore *core = (RCore*)data;
|
||||
switch(input[0]) {
|
||||
case ')':
|
||||
r_macro_break (&core->macro, input+1);
|
||||
r_cmd_macro_break (&core->cmd.macro, input+1);
|
||||
break;
|
||||
case '-':
|
||||
r_macro_rm (&core->macro, input+1);
|
||||
r_cmd_macro_rm (&core->cmd.macro, input+1);
|
||||
break;
|
||||
case '\0':
|
||||
r_macro_list (&core->macro);
|
||||
r_cmd_macro_list (&core->cmd.macro);
|
||||
break;
|
||||
case '?':
|
||||
eprintf (
|
||||
@ -1729,7 +1729,7 @@ static int cmd_macro(void *data, const char *input) {
|
||||
);
|
||||
break;
|
||||
default:
|
||||
r_macro_add (&core->macro, input);
|
||||
r_cmd_macro_add (&core->cmd.macro, input);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
@ -1973,12 +1973,12 @@ R_API int r_core_cmd_foreach(RCore *core, const char *cmd, char *each) {
|
||||
char cmd2[1024];
|
||||
// TODO: use controlc() here
|
||||
// XXX whats this 999 ?
|
||||
for(core->macro.counter=0;i<999;core->macro.counter++) {
|
||||
r_macro_call (&core->macro, each+2);
|
||||
if (core->macro.brk_value == NULL)
|
||||
for(core->cmd.macro.counter=0;i<999;core->cmd.macro.counter++) {
|
||||
r_cmd_macro_call (&core->cmd.macro, each+2);
|
||||
if (core->cmd.macro.brk_value == NULL)
|
||||
break;
|
||||
|
||||
addr = core->macro._brk_value;
|
||||
addr = core->cmd.macro._brk_value;
|
||||
sprintf (cmd2, "%s @ 0x%08llx", cmd, addr);
|
||||
eprintf ("0x%08llx (%s)\n", addr, cmd2);
|
||||
r_core_seek (core, addr, 1);
|
||||
@ -1990,7 +1990,7 @@ R_API int r_core_cmd_foreach(RCore *core, const char *cmd, char *each) {
|
||||
char cmd2[1024];
|
||||
FILE *fd = fopen (each+1, "r");
|
||||
if (fd) {
|
||||
core->macro.counter=0;
|
||||
core->cmd.macro.counter=0;
|
||||
while (!feof (fd)) {
|
||||
buf[0] = '\0';
|
||||
if (fgets (buf, 1024, fd) == NULL)
|
||||
@ -2000,14 +2000,14 @@ R_API int r_core_cmd_foreach(RCore *core, const char *cmd, char *each) {
|
||||
sprintf (cmd2, "%s @ 0x%08llx", cmd, addr);
|
||||
r_core_seek (core, addr, 1); // XXX
|
||||
r_core_cmd (core, cmd2, 0);
|
||||
core->macro.counter++;
|
||||
core->cmd.macro.counter++;
|
||||
}
|
||||
fclose (fd);
|
||||
} else eprintf ("Cannot open file '%s' to read offsets\n", each+1);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
core->macro.counter = 0;
|
||||
core->cmd.macro.counter = 0;
|
||||
//while(str[i]) && !core->interrupted) {
|
||||
while (str[i]) {
|
||||
j = i;
|
||||
@ -2067,7 +2067,7 @@ R_API int r_core_cmd_foreach(RCore *core, const char *cmd, char *each) {
|
||||
#endif
|
||||
r_cons_break (NULL, NULL);
|
||||
|
||||
core->macro.counter++ ;
|
||||
core->cmd.macro.counter++ ;
|
||||
free (word);
|
||||
word = NULL;
|
||||
}
|
||||
@ -2473,6 +2473,9 @@ R_API char *r_core_cmd_str(struct r_core_t *core, const char *cmd) {
|
||||
|
||||
int r_core_cmd_init(struct r_core_t *core) {
|
||||
r_cmd_init (&core->cmd);
|
||||
core->cmd.macro.num = &core->num;
|
||||
core->cmd.macro.user = core;
|
||||
core->cmd.macro.cmd = r_core_cmd0;
|
||||
r_cmd_set_data (&core->cmd, core);
|
||||
r_cmd_add (&core->cmd, "x", "alias for px", &cmd_hexdump);
|
||||
r_cmd_add (&core->cmd, "analysis", "analysis", &cmd_anal);
|
||||
|
@ -134,10 +134,7 @@ R_API int r_core_init(struct r_core_t *core) {
|
||||
|
||||
core->search = r_search_new(R_SEARCH_KEYWORD);
|
||||
r_io_init (&core->io);
|
||||
r_macro_init (&core->macro);
|
||||
core->macro.num = &core->num;
|
||||
core->macro.user = core;
|
||||
core->macro.cmd = r_core_cmd0;
|
||||
//r_cmd_macro_init (&core->macro);
|
||||
core->file = NULL;
|
||||
INIT_LIST_HEAD (&core->files);
|
||||
core->offset = 0LL;
|
||||
|
@ -2,7 +2,7 @@ include ../../config.mk
|
||||
|
||||
OBJ=radare2.o
|
||||
BIN=radare2${EXT_EXE}
|
||||
BINDEPS=r_core r_cons r_macro r_util r_flags r_lib r_io r_hash r_cmd r_config r_asm r_anal
|
||||
BINDEPS=r_core r_cons r_util r_flags r_lib r_io r_hash r_cmd r_config r_asm r_anal
|
||||
BINDEPS+=r_parse r_lang r_debug r_print r_line r_bin r_search r_meta r_reg r_bp r_util r_syscall
|
||||
|
||||
CFLAGS+=-DVERSION=\"${VERSION}\"
|
||||
|
@ -152,7 +152,7 @@ typedef struct r_anal_bb_t {
|
||||
typedef struct r_anal_fcn_t {
|
||||
char *name;
|
||||
ut64 addr;
|
||||
int size;
|
||||
ut64 size;
|
||||
RList *vars;
|
||||
RList *refs;
|
||||
RList *xrefs;
|
||||
|
@ -5,14 +5,45 @@
|
||||
#include <r_util.h>
|
||||
#include "list.h"
|
||||
|
||||
#define MACRO_LIMIT 4096
|
||||
#define MACRO_LABELS 20
|
||||
|
||||
#define r_cmd_callback(x) int (*x)(void *data, const char *input)
|
||||
#define r_cmd_nullcallback(x) int (*x)(void *data);
|
||||
|
||||
typedef struct r_cmd_macro_label_t {
|
||||
char name[80];
|
||||
char *ptr;
|
||||
} RCmdMacroLabel;
|
||||
|
||||
typedef struct r_cmd_macro_item_t {
|
||||
char *name;
|
||||
char *args;
|
||||
char *code;
|
||||
int nargs;
|
||||
struct list_head list;
|
||||
} RCmdMacroItem;
|
||||
|
||||
typedef struct r_cmd_macro_t {
|
||||
int counter;
|
||||
ut64 *brk_value;
|
||||
ut64 _brk_value;
|
||||
int brk;
|
||||
int (*cmd)(void *user, const char *cmd);
|
||||
int (*printf)(const char str, ...);
|
||||
void *user;
|
||||
struct r_num_t *num;
|
||||
int labels_n;
|
||||
struct r_cmd_macro_label_t labels[MACRO_LABELS];
|
||||
struct list_head macros;
|
||||
} RCmdMacro;
|
||||
|
||||
|
||||
typedef struct r_cmd_item_t {
|
||||
char cmd[64];
|
||||
char desc[128];
|
||||
r_cmd_callback(callback);
|
||||
} RCommandItem;
|
||||
} RCmdItem;
|
||||
|
||||
typedef struct r_cmd_long_item_t {
|
||||
char cmd[64]; /* long command */
|
||||
@ -20,24 +51,33 @@ typedef struct r_cmd_long_item_t {
|
||||
char cmd_short[32]; /* short command */
|
||||
char desc[128];
|
||||
struct list_head list;
|
||||
} RCommandLongItem;
|
||||
} RCmdLongItem;
|
||||
|
||||
typedef struct r_cmd_t {
|
||||
void *data;
|
||||
r_cmd_nullcallback(nullcallback);
|
||||
struct list_head lcmds;
|
||||
struct r_cmd_item_t *cmds[255];
|
||||
RCmdMacro macro;
|
||||
RList *plist;
|
||||
} RCommand;
|
||||
} RCmd;
|
||||
|
||||
typedef struct r_cmd_handle_t {
|
||||
char *name;
|
||||
int (*call)(void *user, const char *cmd);
|
||||
} RCommandHandle;
|
||||
} RCmdHandle;
|
||||
|
||||
#ifdef R_API
|
||||
R_API RCommand *r_cmd_new();
|
||||
R_API RCommand * r_cmd_init(struct r_cmd_t *cmd);
|
||||
|
||||
R_API void r_cmd_macro_init(struct r_cmd_macro_t *mac);
|
||||
R_API int r_cmd_macro_add(struct r_cmd_macro_t *mac, const char *name);
|
||||
R_API int r_cmd_macro_rm(struct r_cmd_macro_t *mac, const char *_name);
|
||||
R_API int r_cmd_macro_list(struct r_cmd_macro_t *mac);
|
||||
R_API int r_cmd_macro_call(struct r_cmd_macro_t *mac, const char *name);
|
||||
R_API int r_cmd_macro_break(struct r_cmd_macro_t *mac, const char *value);
|
||||
|
||||
R_API RCmd *r_cmd_new();
|
||||
R_API RCmd * r_cmd_init(struct r_cmd_t *cmd);
|
||||
R_API int r_cmd_set_data(struct r_cmd_t *cmd, void *data);
|
||||
R_API int r_cmd_add(struct r_cmd_t *cmd, const char *command, const char *desc, r_cmd_callback(callback));
|
||||
R_API int r_cmd_add_long(struct r_cmd_t *cmd, const char *longcmd, const char *shortcmd, const char *desc);
|
||||
@ -52,5 +92,14 @@ R_API int r_cmd_handle_check(struct r_cmd_t *cmd, const char *a0);
|
||||
|
||||
/* plugins */
|
||||
extern struct r_cmd_handle_t r_cmd_plugin_dummy;
|
||||
|
||||
/* r_cmd_macro */
|
||||
R_API void r_cmd_macro_init(struct r_cmd_macro_t *mac);
|
||||
R_API int r_cmd_macro_add(struct r_cmd_macro_t *mac, const char *name);
|
||||
R_API int r_cmd_macro_rm(struct r_cmd_macro_t *mac, const char *_name);
|
||||
R_API int r_cmd_macro_list(struct r_cmd_macro_t *mac);
|
||||
R_API int r_cmd_macro_call(struct r_cmd_macro_t *mac, const char *name);
|
||||
R_API int r_cmd_macro_break(struct r_cmd_macro_t *mac, const char *value);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
@ -13,7 +13,6 @@
|
||||
#include "r_cons.h"
|
||||
#include "r_line.h"
|
||||
#include "r_print.h"
|
||||
#include "r_macro.h"
|
||||
#include "r_search.h"
|
||||
#include "r_debug.h"
|
||||
#include "r_flags.h"
|
||||
@ -63,7 +62,6 @@ typedef struct r_core_t {
|
||||
struct r_lang_t lang;
|
||||
struct r_debug_t dbg;
|
||||
struct r_flag_t flags;
|
||||
struct r_macro_t macro;
|
||||
struct r_config_t config;
|
||||
struct r_search_t *search;
|
||||
} RCore;
|
||||
@ -82,11 +80,11 @@ R_API char *r_core_cmd_str(struct r_core_t *core, const char *cmd);
|
||||
R_API int r_core_cmd_file(struct r_core_t *core, const char *file);
|
||||
R_API int r_core_cmd_command(struct r_core_t *core, const char *command);
|
||||
R_API int r_core_seek(struct r_core_t *core, ut64 addr, int rb);
|
||||
R_API int r_core_seek_align(struct r_core_t *core, ut64 align, int times);
|
||||
R_API int r_core_seek_align(struct r_core_t *core, ut64 align, int count);
|
||||
R_API int r_core_block_read(struct r_core_t *core, int next);
|
||||
R_API int r_core_block_size(struct r_core_t *core, ut32 bsize);
|
||||
R_API int r_core_read_at(struct r_core_t *core, ut64 addr, ut8 *buf, int size);
|
||||
R_API int r_core_cmd_init(struct r_core_t *core);
|
||||
R_API int r_core_cmd_init(struct r_core_t *core); // MUST BE STATIC
|
||||
R_API int r_core_visual(struct r_core_t *core, const char *input);
|
||||
R_API int r_core_visual_cmd(struct r_core_t *core, int ch);
|
||||
|
||||
|
@ -1,47 +0,0 @@
|
||||
#ifndef _INCLUDE_R_MACRO_H_
|
||||
#define _INCLUDE_R_MACRO_H_
|
||||
|
||||
#include "r_types.h"
|
||||
#include "r_util.h"
|
||||
#include "list.h"
|
||||
|
||||
#define MACRO_LIMIT 4096
|
||||
#define MACRO_LABELS 20
|
||||
|
||||
typedef struct r_macro_label_t {
|
||||
char name[80];
|
||||
char *ptr;
|
||||
} RMacrolabel;
|
||||
|
||||
typedef struct r_macro_item_t {
|
||||
char *name;
|
||||
char *args;
|
||||
char *code;
|
||||
int nargs;
|
||||
struct list_head list;
|
||||
} RMacroItem;
|
||||
|
||||
typedef struct r_macro_t {
|
||||
int counter;
|
||||
ut64 *brk_value;
|
||||
ut64 _brk_value;
|
||||
int brk;
|
||||
int (*cmd)(void *user, const char *cmd);
|
||||
int (*printf)(const char str, ...);
|
||||
void *user;
|
||||
struct r_num_t *num;
|
||||
int labels_n;
|
||||
struct r_macro_label_t labels[MACRO_LABELS];
|
||||
struct list_head macros;
|
||||
} RMacro;
|
||||
|
||||
#ifdef R_API
|
||||
R_API void r_macro_init(struct r_macro_t *mac);
|
||||
R_API int r_macro_add(struct r_macro_t *mac, const char *name);
|
||||
R_API int r_macro_rm(struct r_macro_t *mac, const char *_name);
|
||||
R_API int r_macro_list(struct r_macro_t *mac);
|
||||
R_API int r_macro_call(struct r_macro_t *mac, const char *name);
|
||||
R_API int r_macro_break(struct r_macro_t *mac, const char *value);
|
||||
#endif
|
||||
|
||||
#endif
|
@ -1,8 +1,7 @@
|
||||
#ifndef _INCLUDE_R_CONFIGURE_H_
|
||||
#define _INCLUDE_R_CONFIGURE_H_
|
||||
|
||||
// TO BE DEPRECATED //
|
||||
#define DEBUGGER @DEBUGGER@
|
||||
#define LIL_ENDIAN @LIL_ENDIAN@
|
||||
|
||||
#ifdef PREFIX
|
||||
#undef PREFIX
|
||||
|
@ -1,5 +0,0 @@
|
||||
NAME=r_macro
|
||||
DEPS=r_util
|
||||
OBJ=macro.o
|
||||
|
||||
include ../rules.mk
|
15
mk/rapi-list
Executable file
15
mk/rapi-list
Executable file
@ -0,0 +1,15 @@
|
||||
#!/bin/sh
|
||||
if [ -z "$1" ]; then
|
||||
echo "Usage: rapi-list [modname] # modname can be 'r_asm', 'r_bin' ..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
MOD=$1
|
||||
cat libr/include/${MOD}.h | \
|
||||
grep ^R_API | \
|
||||
sed -e 's,const ,,g' | \
|
||||
sed -e 's,struct ,,g' | \
|
||||
sed -e 's,\*,,g' | \
|
||||
cut -d '(' -f 1 | \
|
||||
awk '{ print $3 }' | \
|
||||
sed -e "s,^${MOD}_,,"
|
@ -58,10 +58,10 @@ install-python:
|
||||
|
||||
install-lua:
|
||||
@if [ "`grep lua supported.langs`" ]; then \
|
||||
for a in 5.1; do \
|
||||
for a in 5.1 ; do \
|
||||
mkdir -p ${DESTDIR}${PREFIX}/lib/lua/$$a/r2 ; \
|
||||
echo "Installing lua$$a r2 modules..." ; \
|
||||
cp -rf lua/* ${DESTDIR}${PREFIX}/lib/lua/$$a/r2 ; \
|
||||
cp -rf lua/*.so ${DESTDIR}${PREFIX}/lib/lua/$$a/r2 ; \
|
||||
cp -rf lua/*libr* ${DESTDIR}${PREFIX}/lib/lua/$$a ; \
|
||||
done ; \
|
||||
fi
|
||||
|
83
swig/configure
vendored
83
swig/configure
vendored
@ -17,9 +17,6 @@ control_c() {
|
||||
exit 1
|
||||
}
|
||||
trap control_c 2
|
||||
DEBUGGER=1
|
||||
WANT_VALASWIG=1
|
||||
WANT_VALA=1
|
||||
split_host() {
|
||||
S="$"
|
||||
while : ; do
|
||||
@ -138,10 +135,6 @@ System types:
|
||||
--target=TARGET configure for building compilers for TARGET [HOST]
|
||||
EOF2
|
||||
|
||||
printf "\nOptional Features:
|
||||
--without-debugger disable native debugger features
|
||||
--without-valaswig disables the build of the valaswig bindings for python, perl, ruby
|
||||
--without-vala disables the build of all the vala-dependant parts \n"
|
||||
printf "\nSome influential environment variables:
|
||||
CC C compiler command
|
||||
CFLAGS C compiler flags
|
||||
@ -187,9 +180,6 @@ case $flag in
|
||||
echo "PKGNAME: radare2-swig"
|
||||
echo "VERSION: 0.4b"
|
||||
echo "LANGS: c c++"
|
||||
echo "REQUIRED: lib>=vala-1.0 libvala-1.0>=0.7.0"
|
||||
echo "OPTIONAL: liblua5.1"
|
||||
echo "FLAGS: --without-debugger --without-valaswig --without-vala"
|
||||
exit 0
|
||||
;;
|
||||
"--cache-file")
|
||||
@ -231,9 +221,6 @@ echo "FLAGS: --without-debugger --without-valaswig --without-vala"
|
||||
"--mandir")
|
||||
MANDIR="$value"; ;;
|
||||
|
||||
"--without-debugger") DEBUGGER="0"; ;;
|
||||
"--without-valaswig") WANT_VALASWIG="0"; ;;
|
||||
"--without-vala") WANT_VALA="0"; ;;
|
||||
*) if [ "$value" ]; then eval "`echo $flag2=$value`" ;
|
||||
else echo ; echo "WARNING: Unknown flag '$flag'." >&2 ; echo ; fi ;;
|
||||
esac
|
||||
@ -251,7 +238,7 @@ parse_options $1
|
||||
shift
|
||||
done
|
||||
|
||||
ENVWORDS="MANDIR INFODIR LIBDIR INCLUDEDIR LOCALSTATEDIR SYSCONFDIR DATADIR LIBEXECDIR SBINDIR BINDIR EPREFIX PREFIX SPREFIX TARGET HOST BUILD INSTALL INSTALL_LIB INSTALL_MAN INSTALL_PROGRAM INSTALL_DIR INSTALL_SCRIPT INSTALL_DATA HOST_OS HOST_CPU BUILD_OS BUILD_CPU TARGET_OS TARGET_CPU PKGNAME VPATH VERSION CONTACT CONTACT_NAME CONTACT_MAIL CC CFLAGS LDFLAGS HAVE_LANG_C CXX CXXFLAGS HAVE_LANG_CXX DEBUGGER HAVE_LIB_LUA5_1 HAVE_LIB_TCC WANT_VALASWIG HAVE_VALASWIG VALASWIG HAVE_SWIG SWIG WANT_VALA HAVE_VALAC VALAC HAVE_VALA_1_0_VERSION_0_7_0"
|
||||
ENVWORDS="MANDIR INFODIR LIBDIR INCLUDEDIR LOCALSTATEDIR SYSCONFDIR DATADIR LIBEXECDIR SBINDIR BINDIR EPREFIX PREFIX SPREFIX TARGET HOST BUILD INSTALL INSTALL_LIB INSTALL_MAN INSTALL_PROGRAM INSTALL_DIR INSTALL_SCRIPT INSTALL_DATA HOST_OS HOST_CPU BUILD_OS BUILD_CPU TARGET_OS TARGET_CPU PKGNAME VPATH VERSION CONTACT CONTACT_NAME CONTACT_MAIL CC CFLAGS LDFLAGS HAVE_LANG_C CXX CXXFLAGS HAVE_LANG_CXX HAVE_VALASWIG VALASWIG HAVE_SWIG SWIG"
|
||||
|
||||
create_environ
|
||||
|
||||
@ -267,9 +254,6 @@ echo "using prefix '${PREFIX}'"
|
||||
ACR_RMFILES=" test.c a.out a.exe test.cxx a.out a.exe"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
:
|
||||
COMPILER=CC
|
||||
printf "checking for c compiler... "
|
||||
@ -303,23 +287,6 @@ echo "ERROR: ${CXX} cannot create executables" >&2 ;
|
||||
do_remove
|
||||
exit 1
|
||||
fi
|
||||
check_library() {
|
||||
VAR=$1
|
||||
S="$"
|
||||
_REQUIRED=$3
|
||||
_CHKLIB_NAME=$2
|
||||
_CHKLIB_LIBS=$(echo "-l${_CHKLIB_NAME}" | sed 's,\+, -l,g')
|
||||
printf "checking for lib${_CHKLIB_NAME} ... "
|
||||
echo "main(){ }" > test.c
|
||||
eval ${S}${COMPILER} ${CFLAGS} ${LDFLAGS} ${_CHKLIB_LIBS} test.c >/dev/null 2>&1
|
||||
if [ $? = 0 ]; then
|
||||
eval ${VAR}=1
|
||||
echo yes
|
||||
else
|
||||
eval ${VAR}=0
|
||||
echo no ; fi }
|
||||
check_library HAVE_LIB_LUA5_1 lua5.1 0
|
||||
check_library HAVE_LIB_TCC tcc 0
|
||||
printf "checking for valaswig... "
|
||||
if [ -x "${VALASWIG}" ]; then
|
||||
FIND=${VALASWIG}
|
||||
@ -339,7 +306,9 @@ if [ -n "${FIND}" ]; then
|
||||
else
|
||||
HAVE_VALASWIG=0
|
||||
VALASWIG=valaswig
|
||||
echo no ; fi
|
||||
echo no
|
||||
echo "error: This program is required." >&2
|
||||
exit 1 ; fi
|
||||
printf "checking for swig... "
|
||||
if [ -x "${SWIG}" ]; then
|
||||
FIND=${SWIG}
|
||||
@ -359,45 +328,9 @@ if [ -n "${FIND}" ]; then
|
||||
else
|
||||
HAVE_SWIG=0
|
||||
SWIG=swig
|
||||
echo no ; fi
|
||||
if [ "$WANT_VALASWIG" = "1" ]; then
|
||||
if [ "$HAVE_SWIG" = "0" ]; then
|
||||
echo " valaswig depends on swig" >&2
|
||||
HAVE_VALASWIG="0"; fi
|
||||
else
|
||||
HAVE_VALASWIG="0"; fi
|
||||
printf "checking for valac... "
|
||||
if [ -x "${VALAC}" ]; then
|
||||
FIND=${VALAC}
|
||||
else
|
||||
FIND=""
|
||||
for A in `echo ${PATH} | sed -e 's,:, ,g'`; do
|
||||
if [ -x "${A}/valac" ]; then
|
||||
FIND="${A}/valac"
|
||||
break;
|
||||
fi
|
||||
done
|
||||
fi
|
||||
if [ -n "${FIND}" ]; then
|
||||
echo ${FIND};
|
||||
HAVE_VALAC=1
|
||||
VALAC=${FIND}
|
||||
else
|
||||
HAVE_VALAC=0
|
||||
VALAC=valac
|
||||
echo no ; fi
|
||||
if [ "$WANT_VALA" = "1" ]; then
|
||||
HAVE_VALA_1_0_VERSION_0_7_0=0
|
||||
printf "checking version of library vala-1.0 >= 0.7.0... "
|
||||
pkg-config --atleast-version=0.7.0 vala-1.0 >/dev/null 2>&1
|
||||
if [ $? = 0 ]; then HAVE_VALA_1_0_VERSION_0_7_0=1 ; echo ok; else
|
||||
echo "no" ; fi
|
||||
if [ "$HAVE_VALA_1_0_VERSION_0_7_0" = "0" ]; then
|
||||
echo " Needs vala 0.7.0 at least" >&2
|
||||
HAVE_VALAC="0"
|
||||
VALAC=""; fi
|
||||
else
|
||||
HAVE_VALAC="0"; fi
|
||||
echo no
|
||||
echo "error: This program is required." >&2
|
||||
exit 1 ; fi
|
||||
SEDFLAGS=" -e '"
|
||||
COUNT=0
|
||||
for A in ${ENVWORDS} ; do
|
||||
@ -444,7 +377,7 @@ done
|
||||
do_remove
|
||||
echo
|
||||
echo "Final report:"
|
||||
for A in PREFIX HAVE_VALASWIG HAVE_LIB_TCC HAVE_VALAC ; do # REPORT
|
||||
for A in PREFIX HAVE_VALASWIG ; do # REPORT
|
||||
eval VAL="\$${A}"
|
||||
[ -z "${VAL}" ] && VAL="(null)"
|
||||
echo " - ${A} = ${VAL}"
|
||||
|
@ -4,40 +4,9 @@ CONTACT pancake ; pancake@nopcode.org
|
||||
|
||||
LANG_C!
|
||||
LANG_CXX!
|
||||
|
||||
ARG_WITHOUT DEBUGGER debugger disable native debugger features ;
|
||||
|
||||
CHKLIB lua5.1
|
||||
CHKLIB tcc
|
||||
|
||||
ARG_WITHOUT WANT_VALASWIG valaswig disables the build of the valaswig bindings for python, perl, ruby ;
|
||||
CHKPRG VALASWIG valaswig
|
||||
CHKPRG SWIG swig
|
||||
|
||||
IF WANT_VALASWIG {
|
||||
IFNOT HAVE_SWIG {
|
||||
ECHO valaswig depends on swig ;
|
||||
HAVE_VALASWIG = 0 ;
|
||||
}
|
||||
}{
|
||||
HAVE_VALASWIG = 0 ;
|
||||
}
|
||||
|
||||
ARG_WITHOUT WANT_VALA vala disables the build of all the vala-dependant parts ;
|
||||
CHKPRG VALAC valac
|
||||
|
||||
(( temporary fix to avoid vala ))
|
||||
IF WANT_VALA {
|
||||
CHKVER vala-1.0 0.7.0
|
||||
IFNOT HAVE_VALA_1_0_VERSION_0_7_0 {
|
||||
ECHO Needs vala 0.7.0 at least ;
|
||||
HAVE_VALAC = 0 ;
|
||||
VALAC = '' ;
|
||||
}
|
||||
}{
|
||||
HAVE_VALAC = 0 ;
|
||||
}
|
||||
CHKPRG! VALASWIG valaswig
|
||||
CHKPRG! SWIG swig
|
||||
|
||||
SUBDIRS ./config.mk ;
|
||||
|
||||
REPORT PREFIX HAVE_VALASWIG HAVE_LIB_TCC HAVE_VALAC ;
|
||||
REPORT PREFIX HAVE_VALASWIG ;
|
||||
|
@ -34,7 +34,6 @@ public class Radare.RAsm {
|
||||
public string buf_asm;
|
||||
public string buf_hex;
|
||||
public string buf_err;
|
||||
//pointer
|
||||
}
|
||||
|
||||
[CCode (cname="struct r_asm_code_t", destroy_function="" )]
|
||||
@ -64,15 +63,12 @@ public class Radare.RAsm {
|
||||
public bool set_syntax(Syntax syntax);
|
||||
public bool set_pc(uint64 addr);
|
||||
public bool set_big_endian(bool big);
|
||||
//public bool set_parser(RAsm.Parser parser, parse_cb cb, void *aux);
|
||||
public int disassemble(out Aop aop, uint8 *buf, uint64 length);
|
||||
public int assemble(out Aop aop, string buf);
|
||||
public Code? mdisassemble(uint8 *buf, uint64 length);
|
||||
public Code? massemble(string buf);
|
||||
// public weak string fastcall(int idx, int num);
|
||||
//public int parse();
|
||||
// This is the destructor
|
||||
public void free();
|
||||
public weak string fastcall(int idx, int num);
|
||||
|
||||
public delegate int parse_cb();
|
||||
/* TODO: not directy defined here */
|
||||
public void free();
|
||||
}
|
||||
|
@ -9,16 +9,21 @@ public class Radare.RCore {
|
||||
public bool loadlibs();
|
||||
/* commands */
|
||||
public int prompt();
|
||||
[CCode (PrintfFormat)]
|
||||
public int cmdf(...);
|
||||
public int cmd(string cmd, bool log);
|
||||
public int cmd0(string cmd);
|
||||
public int cmd_file(string file);
|
||||
public int cmd_command(string cmd);
|
||||
public unowned string cmd_str(string cmd);
|
||||
|
||||
/* io */
|
||||
public int read_at(uint64 addr, out uint8 *buf, int size);
|
||||
public int write_at(uint64 addr, uint8 *buf, int size);
|
||||
public int block_read(bool next);
|
||||
public int block_size(int size);
|
||||
public int seek(uint64 addr, bool rb);
|
||||
public int seek_align(uint64 addr, int count);
|
||||
|
||||
/* files */
|
||||
public File file_open(string file, int mode);
|
||||
|
@ -43,7 +43,14 @@ namespace Radare {
|
||||
public uint64 size(int fd);
|
||||
|
||||
|
||||
public void cache_enable(bool rd, bool wr);
|
||||
public void cache_init();
|
||||
public void cache_write(uint64 addr, weak string buf, int len);
|
||||
public void cache_read(uint64 addr, ref string buf, int len);
|
||||
|
||||
/* undo */
|
||||
// TODO: Implement seek and write undo apis..they must be unified..
|
||||
public boolundo_init();
|
||||
public void undo_enable(bool set, bool write);
|
||||
//public uint64 undo_seek();
|
||||
//public void undo_redo();
|
||||
@ -58,10 +65,11 @@ namespace Radare {
|
||||
// TODO: lot of missing stuff here :)
|
||||
}
|
||||
|
||||
/* TODO: make them methods */
|
||||
/* TODO: make them methods of Handle class ? */
|
||||
public bool handle_open(int fd, Handle plugin);
|
||||
public bool handle_close(int fd, Handle plugin);
|
||||
public bool handle_add(Handle plugin);
|
||||
//public int handle_generate();
|
||||
public int handle_generate();
|
||||
public void handle_list();
|
||||
|
||||
/* maps */
|
||||
@ -79,8 +87,9 @@ namespace Radare {
|
||||
public int map_write_at(uint64 addr, uint8 *buf, uint64 len);
|
||||
|
||||
/* sections */
|
||||
[Compact]
|
||||
[CCode (cname="RIOSection")]
|
||||
public struct Section {
|
||||
public class Section {
|
||||
string comment;
|
||||
uint64 from;
|
||||
uint64 to;
|
||||
@ -89,6 +98,16 @@ namespace Radare {
|
||||
int rwx; // TODO: use perms
|
||||
}
|
||||
|
||||
public void section_list(uint64 addr, bool rad);
|
||||
public void section_list_visual(uint64 addr, uint64 len);
|
||||
public Section section_get(uint64 addr);
|
||||
public uint64 section_get_offset(uint64 addr);
|
||||
public uint64 section_get_vaddr(uint64 addr);
|
||||
public int section_get_rwx(uint64 addr);
|
||||
public bool section_get_overlaps(Section refsec);
|
||||
public uint64 section_vaddr_to_offset(uint64 vaddr);
|
||||
public uint64 section_offset_to_vaddr(uint64 offset);
|
||||
|
||||
/* desc */
|
||||
[CCode (cname="RIODesc")]
|
||||
public struct Desc {
|
||||
|
@ -75,11 +75,7 @@ search:
|
||||
-g -o search
|
||||
|
||||
asm:
|
||||
valac -C --vapidir=${PWD}/.. asm.vala --pkg r_asm
|
||||
gcc asm.c `pkg-config gobject-2.0 --libs --cflags` -I../../include/ \
|
||||
-lr_asm -Wl,-R../../asm -L../../asm \
|
||||
-lr_util -Wl,-R../../util -L../../util \
|
||||
-g -o asm
|
||||
valac --vapidir=.. --pkg r_asm asm.vala
|
||||
|
||||
bin:
|
||||
valac -C --vapidir=${PWD}/.. bin.vala --pkg r_bin --pkg r_util
|
||||
|
@ -35,6 +35,9 @@ public class RAsmExample
|
||||
stdout.printf("asm: %s\n", code.buf_hex);
|
||||
}
|
||||
|
||||
print ("arg0: %s\n", st.fastcall (0, 4));
|
||||
print ("arg1: %s\n", st.fastcall (1, 4));
|
||||
print ("arg2: %s\n", st.fastcall (2, 4));
|
||||
/*
|
||||
stdout.printf("Enumerate fastcall arguments:\n");
|
||||
for(int i=0;i<4;i++) {
|
||||
|
Loading…
Reference in New Issue
Block a user