- r_bin_init splitted in r_bin_init and r_bin_set_file
* r_core
  - Fixed radare2
* r_parse
  - Fixed parse_mreplace build
* r_lib
  - Lazy dlopen by default
This commit is contained in:
Nibble 2009-03-08 18:29:21 +01:00
parent 04c9a3f5d1
commit 9ecc5775a7
7 changed files with 44 additions and 17 deletions

View File

@ -23,7 +23,7 @@
struct r_bin_t *r_bin_new(char *file, int rw)
{
struct r_bin_t *bin = MALLOC_STRUCT(struct r_bin_t);
r_bin_init(bin, file, rw);
r_bin_init(bin);
return bin;
}
@ -32,12 +32,10 @@ void r_bin_free(struct r_bin_t *bin)
free(bin);
}
int r_bin_init(struct r_bin_t *bin, const char *file, int rw)
int r_bin_init(struct r_bin_t *bin)
{
bin->user = NULL;
INIT_LIST_HEAD(&bin->bins);
bin->file = file;
bin->rw = rw;
return R_TRUE;
}
@ -105,6 +103,14 @@ int r_bin_autoset(struct r_bin_t *bin)
return R_FALSE;
}
int r_bin_set_file(struct r_bin_t *bin, const char *file, int rw)
{
bin->file = file;
bin->rw = rw;
return R_TRUE;
}
int r_bin_open(struct r_bin_t *bin)
{
if (bin->cur && bin->cur->open)

View File

@ -331,6 +331,12 @@ int main(int argc, char **argv)
const char *file = NULL, *plugin = NULL;
const char *op = NULL;
r_bin_init(&bin);
r_lib_init(&l, "radare_plugin");
r_lib_add_handler(&l, R_LIB_TYPE_BIN, "bin plugins",
&__lib_bin_cb, &__lib_bin_dt, NULL);
r_lib_opendir(&l, getenv("LIBR_PLUGINS"));
while ((c = getopt(argc, argv, "isSIeo:p:rvh")) != -1)
{
switch( c ) {
@ -370,13 +376,11 @@ int main(int argc, char **argv)
}
file = argv[optind];
r_bin_init(&bin, file, rw);
r_lib_init(&l, "radare_plugin");
r_lib_add_handler(&l, R_LIB_TYPE_BIN, "bin plugins",
&__lib_bin_cb, &__lib_bin_dt, NULL);
r_lib_opendir(&l, getenv("LIBR_PLUGINS"));
if (action == ACTION_HELP || action == ACTION_UNK || file == NULL)
return rabin_show_help();
r_bin_set_file(&bin, file, rw);
if (plugin) {
if (!r_bin_set(&bin, plugin)) {
fprintf(stderr, "Unknown plugin\n");
@ -389,9 +393,6 @@ int main(int argc, char **argv)
}
}
if (action == ACTION_HELP || action == ACTION_UNK || file == NULL)
return rabin_show_help();
if (action&ACTION_ENTRY)
rabin_show_entrypoint();
if (action&ACTION_IMPORTS)

View File

@ -104,6 +104,18 @@ int __lib_parse_cb(struct r_lib_plugin_t *pl, void *user, void *data)
int __lib_parse_dt(struct r_lib_plugin_t *pl, void *p, void *u) { return R_TRUE; }
/* bin callback */
int __lib_bin_cb(struct r_lib_plugin_t *pl, void *user, void *data)
{
struct r_bin_handle_t *hand = (struct r_bin_handle_t *)data;
struct r_core_t *core = (struct r_core_t *)user;
//printf(" * Added (dis)assembly handler\n");
r_bin_add(&core->bin, hand);
return R_TRUE;
}
int __lib_bin_dt(struct r_lib_plugin_t *pl, void *p, void *u) { return R_TRUE; }
int r_core_init(struct r_core_t *core)
{
core->oobi = NULL;
@ -121,6 +133,8 @@ int r_core_init(struct r_core_t *core)
r_asm_set_user_ptr(&core->assembler, core);
r_parse_init(&core->parser);
r_parse_set_user_ptr(&core->parser, core);
r_bin_init(&core->bin);
r_bin_set_user_ptr(&core->bin, core);
r_meta_init(&core->meta);
r_cons_init();
core->search = r_search_new(R_SEARCH_KEYWORD);
@ -151,6 +165,8 @@ int r_core_init(struct r_core_t *core)
&__lib_asm_cb, &__lib_asm_dt, core);
r_lib_add_handler(&core->lib, R_LIB_TYPE_PARSE, "parsing plugins",
&__lib_parse_cb, &__lib_parse_dt, core);
r_lib_add_handler(&core->lib, R_LIB_TYPE_BIN, "bin plugins",
&__lib_bin_cb, &__lib_bin_dt, core);
r_lib_opendir(&core->lib, getenv("LIBR_PLUGINS"));
{
char *homeplugindir = r_str_home(".radare/plugins");

View File

@ -106,12 +106,13 @@ struct r_bin_info_t {
/* bin.c */
struct r_bin_t *r_bin_new(char *file, int rw);
void r_bin_free(struct r_bin_t *bin);
int r_bin_init(struct r_bin_t *bin, const char *file, int rw);
int r_bin_init(struct r_bin_t *bin);
void r_bin_set_user_ptr(struct r_bin_t *bin, void *user);
int r_bin_add(struct r_bin_t *bin, struct r_bin_handle_t *foo);
int r_bin_list(struct r_bin_t *bin);
int r_bin_set(struct r_bin_t *bin, const char *name);
int r_bin_autoset(struct r_bin_t *bin);
int r_bin_set_file(struct r_bin_t *bin, const char *file, int rw);
int r_bin_open(struct r_bin_t *bin);
int r_bin_close(struct r_bin_t *bin);
u64 r_bin_get_baddr(struct r_bin_t *bin);

View File

@ -18,6 +18,7 @@
#include "r_debug.h"
#include "r_flags.h"
#include "r_config.h"
#include "r_bin.h"
#define R_CORE_BLOCKSIZE 64
#define R_CORE_BLOCKSIZE_MAX 0x40000 /* 4 MB */
@ -52,6 +53,7 @@ struct r_core_t {
struct r_anal_t anal;
struct r_asm_t assembler;
struct r_parse_t parser;
struct r_bin_t bin;
struct r_meta_t meta;
struct r_lang_t lang;
struct r_debug_t dbg;

View File

@ -9,7 +9,8 @@
#if __UNIX__
#include <dlfcn.h>
#define DLOPEN(x) dlopen(x, RTLD_GLOBAL | RTLD_NOW)
//#define DLOPEN(x) dlopen(x, RTLD_GLOBAL | RTLD_NOW)
#define DLOPEN(x) dlopen(x, RTLD_GLOBAL | RTLD_LAZY)
#define DLSYM(x,y) dlsym(x,y)
#define DLCLOSE(x) dlclose(x)
#elif __WINDOWS__ && !__CYGWIN__

View File

@ -12,9 +12,9 @@ parse_x86_pseudo.so: parse_x86_pseudo.o
${CC} ${CFLAGS} -o parse_x86_pseudo.so parse_x86_pseudo.o
@#strip -s parse_x86_pseudo.so
parse_mreplace.so:
parse_mreplace.so: parse_mreplace.o
${CC} ${CFLAGS_IMP} -o parse_mreplace.so \
mreplace/mreplace.c mreplace/mmemory.c
mreplace/mreplace.c mreplace/mmemory.c parse_mreplace.o
@#strip -s parse_mreplace.so
clean: