mirror of
https://github.com/radareorg/radare2.git
synced 2025-02-24 16:23:49 +00:00
* r_bin
- 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:
parent
04c9a3f5d1
commit
9ecc5775a7
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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");
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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__
|
||||
|
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user