mirror of
https://github.com/radareorg/radare2.git
synced 2024-10-11 04:44:37 +00:00
* Rename r_array to r_flist (RArray to RFList)
* Add ruby test for r_bin * Remove old r_array stuff from r_types.h * Fix swig/Makefile to install ruby libs into ruby1.8 libdir too --HG-- rename : libr/include/r_array.h => libr/include/r_flist.h
This commit is contained in:
parent
18b1b24065
commit
3d3bf594af
@ -27,14 +27,14 @@ extern RBinHandle r_bin_plugin_dummy;
|
||||
|
||||
static RBinHandle *bin_static_plugins[] = { R_BIN_STATIC_PLUGINS };
|
||||
|
||||
static RArray get_strings(RBin *bin, int min) {
|
||||
RArray ret;
|
||||
static RFList get_strings(RBin *bin, int min) {
|
||||
RFList ret;
|
||||
RBinString *ptr = NULL;
|
||||
char str[R_BIN_SIZEOF_STRINGS];
|
||||
int i, matches = 0, ctr = 0, max_str = 0;
|
||||
|
||||
max_str = (int)(bin->size/min);
|
||||
if (!(ret = r_array_new (max_str))) {
|
||||
if (!(ret = r_flist_new (max_str))) {
|
||||
ERR ("Error allocating array\n");
|
||||
return NULL;
|
||||
}
|
||||
@ -55,7 +55,7 @@ static RArray get_strings(RBin *bin, int min) {
|
||||
ptr->ordinal = ctr;
|
||||
memcpy (ptr->string, str, R_BIN_SIZEOF_STRINGS);
|
||||
ptr->string[R_BIN_SIZEOF_STRINGS-1] = '\0';
|
||||
r_array_set (ret, ctr, ptr);
|
||||
r_flist_set (ret, ctr, ptr);
|
||||
ctr++;
|
||||
}
|
||||
matches = 0;
|
||||
@ -88,19 +88,19 @@ static void r_bin_init_items(RBin *bin) {
|
||||
|
||||
static void r_bin_free_items(RBin *bin) {
|
||||
if (bin->entries)
|
||||
r_array_free (bin->entries);
|
||||
r_flist_free (bin->entries);
|
||||
if (bin->fields)
|
||||
r_array_free (bin->fields);
|
||||
r_flist_free (bin->fields);
|
||||
if (bin->imports)
|
||||
r_array_free (bin->imports);
|
||||
r_flist_free (bin->imports);
|
||||
if (bin->info)
|
||||
free (bin->info);
|
||||
if (bin->sections)
|
||||
r_array_free (bin->sections);
|
||||
r_flist_free (bin->sections);
|
||||
if (bin->strings)
|
||||
r_array_free (bin->strings);
|
||||
r_flist_free (bin->strings);
|
||||
if (bin->symbols)
|
||||
r_array_free (bin->symbols);
|
||||
r_flist_free (bin->symbols);
|
||||
}
|
||||
|
||||
R_API int r_bin_add(RBin *bin, RBinHandle *foo) {
|
||||
@ -169,15 +169,15 @@ R_API ut64 r_bin_get_baddr(RBin *bin) {
|
||||
return bin->baddr;
|
||||
}
|
||||
|
||||
R_API RArray r_bin_get_entries(RBin *bin) {
|
||||
R_API RFList r_bin_get_entries(RBin *bin) {
|
||||
return bin->entries;
|
||||
}
|
||||
|
||||
R_API RArray r_bin_get_fields(RBin *bin) {
|
||||
R_API RFList r_bin_get_fields(RBin *bin) {
|
||||
return bin->fields;
|
||||
}
|
||||
|
||||
R_API RArray r_bin_get_imports(RBin *bin) {
|
||||
R_API RFList r_bin_get_imports(RBin *bin) {
|
||||
return bin->imports;
|
||||
}
|
||||
|
||||
@ -185,11 +185,11 @@ R_API RBinInfo* r_bin_get_info(RBin *bin) {
|
||||
return bin->info;
|
||||
}
|
||||
|
||||
R_API RArray r_bin_get_libs(RBin *bin) {
|
||||
R_API RFList r_bin_get_libs(RBin *bin) {
|
||||
return bin->libs;
|
||||
}
|
||||
|
||||
R_API RArray r_bin_get_sections(RBin *bin) {
|
||||
R_API RFList r_bin_get_sections(RBin *bin) {
|
||||
return bin->sections;
|
||||
}
|
||||
|
||||
@ -199,11 +199,11 @@ R_API RBinSection* r_bin_get_section_at(RBin *bin, ut64 off) {
|
||||
}
|
||||
#endif
|
||||
|
||||
R_API RArray r_bin_get_strings(RBin *bin) {
|
||||
R_API RFList r_bin_get_strings(RBin *bin) {
|
||||
return bin->strings;
|
||||
}
|
||||
|
||||
R_API RArray r_bin_get_symbols(RBin *bin) {
|
||||
R_API RFList r_bin_get_symbols(RBin *bin) {
|
||||
return bin->symbols;
|
||||
}
|
||||
|
||||
|
@ -26,32 +26,32 @@ static ut64 baddr(RBin *bin)
|
||||
return Elf_(r_bin_elf_get_baddr) (bin->bin_obj);
|
||||
}
|
||||
|
||||
static RArray entries(RBin *bin)
|
||||
static RFList entries(RBin *bin)
|
||||
{
|
||||
RArray ret;
|
||||
RFList ret;
|
||||
RBinEntry *ptr = NULL;
|
||||
|
||||
if (!(ret = r_array_new (1)))
|
||||
if (!(ret = r_flist_new (1)))
|
||||
return NULL;
|
||||
if (!(ptr = MALLOC_STRUCT (RBinEntry)))
|
||||
return ret;
|
||||
memset (ptr, '\0', sizeof (RBinEntry));
|
||||
ptr->offset = ptr->rva = Elf_(r_bin_elf_get_entry_offset) (bin->bin_obj);
|
||||
r_array_set (ret, 0, ptr);
|
||||
r_flist_set (ret, 0, ptr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static RArray sections(RBin *bin)
|
||||
static RFList sections(RBin *bin)
|
||||
{
|
||||
int sections_count, i;
|
||||
RArray ret = NULL;
|
||||
RFList ret = NULL;
|
||||
RBinSection *ptr = NULL;
|
||||
struct r_bin_elf_section_t *section = NULL;
|
||||
|
||||
if (!(section = Elf_(r_bin_elf_get_sections) (bin->bin_obj)))
|
||||
return NULL;
|
||||
for (sections_count = 0; !section[sections_count].last; sections_count++);
|
||||
if (!(ret = r_array_new (sections_count))) {
|
||||
if (!(ret = r_flist_new (sections_count))) {
|
||||
free (section);
|
||||
return NULL;
|
||||
}
|
||||
@ -70,23 +70,23 @@ static RArray sections(RBin *bin)
|
||||
ptr->characteristics |= 0x2;
|
||||
if (R_BIN_ELF_SCN_IS_READABLE (section[i].flags))
|
||||
ptr->characteristics |= 0x4;
|
||||
r_array_set (ret, i, ptr);
|
||||
r_flist_set (ret, i, ptr);
|
||||
}
|
||||
free (section);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static RArray symbols(RBin *bin)
|
||||
static RFList symbols(RBin *bin)
|
||||
{
|
||||
int symbols_count, i;
|
||||
RArray ret = NULL;
|
||||
RFList ret = NULL;
|
||||
RBinSymbol *ptr = NULL;
|
||||
struct r_bin_elf_symbol_t *symbol = NULL;
|
||||
|
||||
if (!(symbol = Elf_(r_bin_elf_get_symbols) (bin->bin_obj, R_BIN_ELF_SYMBOLS)))
|
||||
return NULL;
|
||||
for (symbols_count = 0; !symbol[symbols_count].last; symbols_count++);
|
||||
if (!(ret = r_array_new (symbols_count))) {
|
||||
if (!(ret = r_flist_new (symbols_count))) {
|
||||
free (symbol);
|
||||
return NULL;
|
||||
}
|
||||
@ -101,23 +101,23 @@ static RArray symbols(RBin *bin)
|
||||
ptr->offset = symbol[i].offset;
|
||||
ptr->size = symbol[i].size;
|
||||
ptr->ordinal = 0;
|
||||
r_array_set (ret, i, ptr);
|
||||
r_flist_set (ret, i, ptr);
|
||||
}
|
||||
free (symbol);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static RArray imports(RBin *bin)
|
||||
static RFList imports(RBin *bin)
|
||||
{
|
||||
int imports_count, i;
|
||||
RArray ret = NULL;
|
||||
RFList ret = NULL;
|
||||
RBinImport *ptr = NULL;
|
||||
struct r_bin_elf_symbol_t *import = NULL;
|
||||
|
||||
if (!(import = Elf_(r_bin_elf_get_symbols) (bin->bin_obj, R_BIN_ELF_IMPORTS)))
|
||||
return NULL;
|
||||
for (imports_count = 0; !import[imports_count].last; imports_count++);
|
||||
if (!(ret = r_array_new (imports_count))) {
|
||||
if (!(ret = r_flist_new (imports_count))) {
|
||||
free (import);
|
||||
return NULL;
|
||||
}
|
||||
@ -131,7 +131,7 @@ static RArray imports(RBin *bin)
|
||||
ptr->offset = import[i].offset;
|
||||
ptr->ordinal = 0;
|
||||
ptr->hint = 0;
|
||||
r_array_set (ret, i, ptr);
|
||||
r_flist_set (ret, i, ptr);
|
||||
}
|
||||
free (import);
|
||||
return ret;
|
||||
@ -182,9 +182,9 @@ static RBinInfo* info(RBin *bin)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static RArray fields(RBin *bin)
|
||||
static RFList fields(RBin *bin)
|
||||
{
|
||||
RArray ret = NULL;
|
||||
RFList ret = NULL;
|
||||
RBinField *ptr = NULL;
|
||||
struct r_bin_elf_field_t *field = NULL;
|
||||
int i, fields_count;
|
||||
@ -192,7 +192,7 @@ static RArray fields(RBin *bin)
|
||||
if (!(field = Elf_(r_bin_elf_get_fields) (bin->bin_obj)))
|
||||
return NULL;
|
||||
for (fields_count = 0; !field[fields_count].last; fields_count++);
|
||||
if (!(ret = r_array_new (fields_count))) {
|
||||
if (!(ret = r_flist_new (fields_count))) {
|
||||
free (field);
|
||||
return NULL;
|
||||
}
|
||||
@ -202,7 +202,7 @@ static RArray fields(RBin *bin)
|
||||
strncpy (ptr->name, field[i].name, R_BIN_SIZEOF_STRINGS);
|
||||
ptr->rva = field[i].offset;
|
||||
ptr->offset = field[i].offset;
|
||||
r_array_set (ret, i, ptr);
|
||||
r_flist_set (ret, i, ptr);
|
||||
}
|
||||
free (field);
|
||||
return ret;
|
||||
|
@ -21,18 +21,18 @@ static int destroy(RBin *bin)
|
||||
return R_TRUE;
|
||||
}
|
||||
|
||||
static RArray entries(RBin *bin)
|
||||
static RFList entries(RBin *bin)
|
||||
{
|
||||
RArray ret;
|
||||
RFList ret;
|
||||
RBinEntry *ptr = NULL;
|
||||
|
||||
if (!(ret = r_array_new (1)))
|
||||
if (!(ret = r_flist_new (1)))
|
||||
return NULL;
|
||||
if (!(ptr = MALLOC_STRUCT (RBinEntry)))
|
||||
return ret;
|
||||
memset (ptr, '\0', sizeof (RBinEntry));
|
||||
ptr->offset = ptr->rva = r_bin_java_get_entrypoint (bin->bin_obj);
|
||||
r_array_set (ret, 0, ptr);
|
||||
r_flist_set (ret, 0, ptr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -41,9 +41,9 @@ static ut64 baddr(RBin *bin)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static RArray symbols(RBin *bin)
|
||||
static RFList symbols(RBin *bin)
|
||||
{
|
||||
RArray ret = NULL;
|
||||
RFList ret = NULL;
|
||||
RBinSymbol *ptr = NULL;
|
||||
struct r_bin_java_sym_t *symbols = NULL;
|
||||
int count, i;
|
||||
@ -51,7 +51,7 @@ static RArray symbols(RBin *bin)
|
||||
if (!(symbols = r_bin_java_get_symbols ((struct r_bin_java_obj_t*)bin->bin_obj)))
|
||||
return NULL;
|
||||
for (count = 0; !symbols[count].last; count++);
|
||||
if (!(ret = r_array_new (count))) {
|
||||
if (!(ret = r_flist_new (count))) {
|
||||
free (symbols);
|
||||
return NULL;
|
||||
}
|
||||
@ -65,15 +65,15 @@ static RArray symbols(RBin *bin)
|
||||
ptr->rva = ptr->offset = symbols[i].offset;
|
||||
ptr->size = symbols[i].size;
|
||||
ptr->ordinal = 0;
|
||||
r_array_set (ret, i, ptr);
|
||||
r_flist_set (ret, i, ptr);
|
||||
}
|
||||
free (symbols);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static RArray strings(RBin *bin)
|
||||
static RFList strings(RBin *bin)
|
||||
{
|
||||
RArray ret = NULL;
|
||||
RFList ret = NULL;
|
||||
RBinString *ptr = NULL;
|
||||
struct r_bin_java_str_t *strings = NULL;
|
||||
int count, i;
|
||||
@ -81,7 +81,7 @@ static RArray strings(RBin *bin)
|
||||
if (!(strings = r_bin_java_get_strings((struct r_bin_java_obj_t*)bin->bin_obj)))
|
||||
return NULL;
|
||||
for (count = 0; !strings[count].last; count++);
|
||||
if (!(ret = r_array_new (count))) {
|
||||
if (!(ret = r_flist_new (count))) {
|
||||
free (strings);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -40,17 +40,17 @@ static int check(RBin *bin)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static RArray sections(RBin *bin)
|
||||
static RFList sections(RBin *bin)
|
||||
{
|
||||
int count, i;
|
||||
RArray ret = NULL;
|
||||
RFList ret = NULL;
|
||||
RBinSection *ptr = NULL;
|
||||
struct r_bin_mach0_section_t *sections = NULL;
|
||||
|
||||
if (!(sections = r_bin_mach0_get_sections ((struct r_bin_mach0_obj_t*)bin->bin_obj)))
|
||||
return NULL;
|
||||
for (count = 0; !sections[count].last; count++);
|
||||
if (!(ret = r_array_new (count))) {
|
||||
if (!(ret = r_flist_new (count))) {
|
||||
free (sections);
|
||||
return NULL;
|
||||
}
|
||||
@ -63,23 +63,23 @@ static RArray sections(RBin *bin)
|
||||
ptr->offset = sections[i].offset;
|
||||
ptr->rva = sections[i].addr;
|
||||
ptr->characteristics = 0;
|
||||
r_array_set (ret, i, ptr);
|
||||
r_flist_set (ret, i, ptr);
|
||||
}
|
||||
free (sections);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static RArray symbols(RBin *bin)
|
||||
static RFList symbols(RBin *bin)
|
||||
{
|
||||
int count, i;
|
||||
RArray ret = NULL;
|
||||
RFList ret = NULL;
|
||||
RBinSymbol *ptr = NULL;
|
||||
struct r_bin_mach0_symbol_t *symbols = NULL;
|
||||
|
||||
if (!(symbols = r_bin_mach0_get_symbols ((struct r_bin_mach0_obj_t*)bin->bin_obj)))
|
||||
return NULL;
|
||||
for (count = 0; !symbols[count].last; count++);
|
||||
if (!(ret = r_array_new (count))) {
|
||||
if (!(ret = r_flist_new (count))) {
|
||||
free (symbols);
|
||||
return NULL;
|
||||
}
|
||||
@ -94,23 +94,23 @@ static RArray symbols(RBin *bin)
|
||||
ptr->offset = symbols[i].offset;
|
||||
ptr->size = symbols[i].size;
|
||||
ptr->ordinal = 0;
|
||||
r_array_set (ret, i, ptr);
|
||||
r_flist_set (ret, i, ptr);
|
||||
}
|
||||
free (symbols);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static RArray imports(RBin *bin)
|
||||
static RFList imports(RBin *bin)
|
||||
{
|
||||
int count, i;
|
||||
RArray ret = NULL;
|
||||
RFList ret = NULL;
|
||||
RBinImport *ptr = NULL;
|
||||
struct r_bin_mach0_import_t *imports = NULL;
|
||||
|
||||
if (!(imports = r_bin_mach0_get_imports((struct r_bin_mach0_obj_t*)bin->bin_obj)))
|
||||
return NULL;
|
||||
for (count = 0; !imports[count].last; count++);
|
||||
if (!(ret = r_array_new (count))) {
|
||||
if (!(ret = r_flist_new (count))) {
|
||||
free (imports);
|
||||
return NULL;
|
||||
}
|
||||
@ -124,7 +124,7 @@ static RArray imports(RBin *bin)
|
||||
ptr->offset = imports[i].offset;
|
||||
ptr->ordinal = 0;
|
||||
ptr->hint = 0;
|
||||
r_array_set (ret, i, ptr);
|
||||
r_flist_set (ret, i, ptr);
|
||||
}
|
||||
free (imports);
|
||||
return ret;
|
||||
|
@ -26,28 +26,28 @@ static ut64 baddr(RBin *bin)
|
||||
return PE_(r_bin_pe_get_image_base) (bin->bin_obj);
|
||||
}
|
||||
|
||||
static RArray entries(RBin *bin)
|
||||
static RFList entries(RBin *bin)
|
||||
{
|
||||
RArray ret;
|
||||
RFList ret;
|
||||
RBinEntry *ptr = NULL;
|
||||
struct r_bin_pe_entrypoint_t *entry = NULL;
|
||||
|
||||
if (!(entry = PE_(r_bin_pe_get_entrypoint) (bin->bin_obj)))
|
||||
return NULL;
|
||||
if (!(ret = r_array_new (1)))
|
||||
if (!(ret = r_flist_new (1)))
|
||||
return NULL;
|
||||
if (!(ptr = MALLOC_STRUCT (RBinEntry)))
|
||||
return ret;
|
||||
ptr->offset = entry->offset;
|
||||
ptr->rva = entry->rva;
|
||||
r_array_set (ret, 0, ptr);
|
||||
r_flist_set (ret, 0, ptr);
|
||||
free (entry);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static RArray sections(RBin *bin)
|
||||
static RFList sections(RBin *bin)
|
||||
{
|
||||
RArray ret = NULL;
|
||||
RFList ret = NULL;
|
||||
RBinSection *ptr = NULL;
|
||||
struct r_bin_pe_section_t *sections = NULL;
|
||||
int i, count;
|
||||
@ -55,7 +55,7 @@ static RArray sections(RBin *bin)
|
||||
if (!(sections = PE_(r_bin_pe_get_sections)(bin->bin_obj)))
|
||||
return NULL;
|
||||
for (count = 0; !sections[count].last; count++);
|
||||
if (!(ret = r_array_new (count))) {
|
||||
if (!(ret = r_flist_new (count))) {
|
||||
free (sections);
|
||||
return NULL;
|
||||
}
|
||||
@ -76,15 +76,15 @@ static RArray sections(RBin *bin)
|
||||
ptr->characteristics |= 0x4;
|
||||
if (R_BIN_PE_SCN_IS_SHAREABLE (sections[i].characteristics))
|
||||
ptr->characteristics |= 0x8;
|
||||
r_array_set (ret, i, ptr);
|
||||
r_flist_set (ret, i, ptr);
|
||||
}
|
||||
free (sections);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static RArray symbols(RBin *bin)
|
||||
static RFList symbols(RBin *bin)
|
||||
{
|
||||
RArray ret = NULL;
|
||||
RFList ret = NULL;
|
||||
RBinSymbol *ptr = NULL;
|
||||
struct r_bin_pe_export_t *symbols = NULL;
|
||||
int i, count;
|
||||
@ -92,7 +92,7 @@ static RArray symbols(RBin *bin)
|
||||
if (!(symbols = PE_(r_bin_pe_get_exports)(bin->bin_obj)))
|
||||
return NULL;
|
||||
for (count = 0; !symbols[count].last; count++);
|
||||
if (!(ret = r_array_new (count))) {
|
||||
if (!(ret = r_flist_new (count))) {
|
||||
free (symbols);
|
||||
return NULL;
|
||||
}
|
||||
@ -107,15 +107,15 @@ static RArray symbols(RBin *bin)
|
||||
ptr->offset = symbols[i].offset;
|
||||
ptr->size = 0;
|
||||
ptr->ordinal = symbols[i].ordinal;
|
||||
r_array_set (ret, i, ptr);
|
||||
r_flist_set (ret, i, ptr);
|
||||
}
|
||||
free (symbols);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static RArray imports(RBin *bin)
|
||||
static RFList imports(RBin *bin)
|
||||
{
|
||||
RArray ret = NULL;
|
||||
RFList ret = NULL;
|
||||
RBinImport *ptr = NULL;
|
||||
struct r_bin_pe_import_t *imports = NULL;
|
||||
int i, count;
|
||||
@ -123,7 +123,7 @@ static RArray imports(RBin *bin)
|
||||
if (!(imports = PE_(r_bin_pe_get_imports)(bin->bin_obj)))
|
||||
return NULL;
|
||||
for (count = 0; !imports[count].last; count++);
|
||||
if (!(ret = r_array_new (count))) {
|
||||
if (!(ret = r_flist_new (count))) {
|
||||
free (imports);
|
||||
return NULL;
|
||||
}
|
||||
@ -137,7 +137,7 @@ static RArray imports(RBin *bin)
|
||||
ptr->offset = imports[i].offset;
|
||||
ptr->ordinal = imports[i].ordinal;
|
||||
ptr->hint = imports[i].hint;
|
||||
r_array_set (ret, i, ptr);
|
||||
r_flist_set (ret, i, ptr);
|
||||
}
|
||||
free (imports);
|
||||
return ret;
|
||||
|
@ -55,7 +55,7 @@ static int rabin_show_help() {
|
||||
}
|
||||
|
||||
static int rabin_show_entrypoints() {
|
||||
RArray entries;
|
||||
RFList entries;
|
||||
RBinEntry *entry;
|
||||
const char *env;
|
||||
int i = 0;
|
||||
@ -72,7 +72,7 @@ static int rabin_show_entrypoints() {
|
||||
printf ("fs symbols\n");
|
||||
} else printf ("[Entrypoints]\n");
|
||||
|
||||
r_array_foreach (entries, entry) {
|
||||
r_flist_foreach (entries, entry) {
|
||||
if (rad) {
|
||||
printf ("f entry%i @ 0x%08llx\n", i, baddr+entry->rva);
|
||||
printf ("s entry%i\n", i);
|
||||
@ -90,7 +90,7 @@ static int rabin_show_entrypoints() {
|
||||
}
|
||||
|
||||
static int rabin_show_imports(ut64 at) {
|
||||
RArray imports;
|
||||
RFList imports;
|
||||
RBinImport *import;
|
||||
ut64 baddr;
|
||||
int i = 0;
|
||||
@ -105,7 +105,7 @@ static int rabin_show_imports(ut64 at) {
|
||||
else printf ("[Imports]\n");
|
||||
}
|
||||
|
||||
r_array_foreach (imports, import) {
|
||||
r_flist_foreach (imports, import) {
|
||||
if (at) {
|
||||
if (baddr+import->rva == at || import->offset == at)
|
||||
printf ("%s\n", import->name);
|
||||
@ -129,7 +129,7 @@ static int rabin_show_imports(ut64 at) {
|
||||
}
|
||||
|
||||
static int rabin_show_symbols(ut64 at) {
|
||||
RArray symbols;
|
||||
RFList symbols;
|
||||
RBinSymbol *symbol;
|
||||
ut64 baddr;
|
||||
int i = 0;
|
||||
@ -144,7 +144,7 @@ static int rabin_show_symbols(ut64 at) {
|
||||
else printf ("[Symbols]\n");
|
||||
}
|
||||
|
||||
r_array_foreach (symbols, symbol) {
|
||||
r_flist_foreach (symbols, symbol) {
|
||||
if (at) {
|
||||
if ((symbol->size != 0 &&
|
||||
((baddr+symbol->rva <= at && baddr+symbol->rva+symbol->size > at) ||
|
||||
@ -182,7 +182,7 @@ static int rabin_show_symbols(ut64 at) {
|
||||
}
|
||||
|
||||
static int rabin_show_strings() {
|
||||
RArray strings;
|
||||
RFList strings;
|
||||
RBinString *string;
|
||||
ut64 baddr;
|
||||
int i = 0;
|
||||
@ -195,7 +195,7 @@ static int rabin_show_strings() {
|
||||
if (rad) printf ("fs strings\n");
|
||||
else printf ("[strings]\n");
|
||||
|
||||
r_array_foreach (strings, string) {
|
||||
r_flist_foreach (strings, string) {
|
||||
if (rad) {
|
||||
r_flag_name_filter (string->string);
|
||||
printf ("f str.%s %lli @ 0x%08llx\n"
|
||||
@ -215,7 +215,7 @@ static int rabin_show_strings() {
|
||||
}
|
||||
|
||||
static int rabin_show_sections(ut64 at) {
|
||||
RArray sections;
|
||||
RFList sections;
|
||||
RBinSection *section;
|
||||
ut64 baddr;
|
||||
int i = 0;
|
||||
@ -230,7 +230,7 @@ static int rabin_show_sections(ut64 at) {
|
||||
else printf ("[Sections]\n");
|
||||
}
|
||||
|
||||
r_array_foreach (sections, section) {
|
||||
r_flist_foreach (sections, section) {
|
||||
if (at) {
|
||||
if ((section->size != 0 &&
|
||||
((baddr+section->rva <= at && baddr+section->rva+section->size > at) ||
|
||||
@ -308,7 +308,7 @@ static int rabin_show_info() {
|
||||
}
|
||||
|
||||
static int rabin_show_fields() {
|
||||
RArray fields;
|
||||
RFList fields;
|
||||
RBinField *field;
|
||||
ut64 baddr;
|
||||
int i = 0;
|
||||
@ -321,7 +321,7 @@ static int rabin_show_fields() {
|
||||
if (rad) printf ("fs header\n");
|
||||
else printf ("[Header fields]\n");
|
||||
|
||||
r_array_foreach (fields, field) {
|
||||
r_flist_foreach (fields, field) {
|
||||
if (rad) {
|
||||
r_flag_name_filter (field->name);
|
||||
printf ("f header.%s @ 0x%08llx\n",
|
||||
@ -339,7 +339,7 @@ static int rabin_show_fields() {
|
||||
}
|
||||
|
||||
static int rabin_dump_symbols(int len) {
|
||||
RArray symbols;
|
||||
RFList symbols;
|
||||
RBinSymbol *symbol;
|
||||
ut8 *buf;
|
||||
char *ret;
|
||||
@ -348,7 +348,7 @@ static int rabin_dump_symbols(int len) {
|
||||
if ((symbols = r_bin_get_symbols (bin)) == NULL)
|
||||
return R_FALSE;
|
||||
|
||||
r_array_foreach (symbols, symbol) {
|
||||
r_flist_foreach (symbols, symbol) {
|
||||
if (symbol->size != 0 && (olen > symbol->size || olen == 0))
|
||||
len = symbol->size;
|
||||
else if (symbol->size == 0 && olen == 0)
|
||||
@ -368,7 +368,7 @@ static int rabin_dump_symbols(int len) {
|
||||
}
|
||||
|
||||
static int rabin_dump_sections(char *name) {
|
||||
RArray sections;
|
||||
RFList sections;
|
||||
RBinSection *section;
|
||||
ut8 *buf;
|
||||
char *ret;
|
||||
@ -376,7 +376,7 @@ static int rabin_dump_sections(char *name) {
|
||||
if ((sections = r_bin_get_sections (bin)) == NULL)
|
||||
return R_FALSE;
|
||||
|
||||
r_array_foreach (sections, section) {
|
||||
r_flist_foreach (sections, section) {
|
||||
if (!strcmp (name, section->name)) {
|
||||
if (!(buf = malloc (section->size)) ||
|
||||
!(ret = malloc (section->size*2+1)))
|
||||
|
@ -1,58 +0,0 @@
|
||||
/* radare - LGPL - Copyright 2010 nibble <.ds@gmail.com> */
|
||||
|
||||
#ifndef _INCLUDE_R_ARRAY_H_
|
||||
#define _INCLUDE_R_ARRAY_H_
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define r_array_t void**
|
||||
#define RArray void**
|
||||
#define r_array_rewind(it) for (; it!=*it; it--); it++
|
||||
#define r_array_next(it) *it!=0
|
||||
#define r_array_get(it) *(it++)
|
||||
#define r_array_iterator(x) x
|
||||
#define r_array_unref(x) x
|
||||
|
||||
static inline void **r_array_init(void **it, int n) {
|
||||
*it = it;
|
||||
memset (++it, 0, (n+1) * sizeof (void*));
|
||||
return it;
|
||||
}
|
||||
|
||||
static inline void **r_array_new(int n) {
|
||||
void **it;
|
||||
if (!(it = (void **)malloc ((n+2) * sizeof (void*))))
|
||||
return NULL;
|
||||
return r_array_init (it, n);
|
||||
}
|
||||
|
||||
static inline void **r_array_prev(void **it) {
|
||||
void **p = it--;
|
||||
return (it==*it)?p:it;
|
||||
}
|
||||
|
||||
static inline void r_array_set(void **it, int idx, void *data) {
|
||||
r_array_rewind (it);
|
||||
it[idx] = data;
|
||||
}
|
||||
|
||||
static inline void r_array_delete(void **it, int idx) {
|
||||
r_array_rewind (it);
|
||||
free (it[idx]);
|
||||
for(it += idx; *it; it++) *it = *(it+1);
|
||||
}
|
||||
|
||||
#define r_array_foreach(it, pos) \
|
||||
r_array_rewind(it); \
|
||||
while (r_array_next (it) && (pos = r_array_get (it)))
|
||||
|
||||
static inline void r_array_free(void **it) {
|
||||
void *pos;
|
||||
r_array_foreach (it, pos)
|
||||
free (pos);
|
||||
r_array_rewind (it);
|
||||
free (--it);
|
||||
}
|
||||
|
||||
#endif
|
@ -5,7 +5,7 @@
|
||||
|
||||
#include <r_util.h>
|
||||
#include <r_types.h>
|
||||
#include <r_array.h>
|
||||
#include <r_flist.h>
|
||||
#include <r_list.h>
|
||||
#include <list.h>
|
||||
|
||||
@ -28,13 +28,13 @@ typedef struct r_bin_t {
|
||||
void *bin_obj;
|
||||
ut64 baddr;
|
||||
struct r_bin_info_t *info;
|
||||
RArray entries;
|
||||
RArray sections;
|
||||
RArray symbols;
|
||||
RArray imports;
|
||||
RArray strings;
|
||||
RArray fields;
|
||||
RArray libs;
|
||||
RFList entries;
|
||||
RFList sections;
|
||||
RFList symbols;
|
||||
RFList imports;
|
||||
RFList strings;
|
||||
RFList fields;
|
||||
RFList libs;
|
||||
RBuffer *buf;
|
||||
void *user;
|
||||
struct r_bin_handle_t *cur;
|
||||
@ -50,14 +50,14 @@ typedef struct r_bin_handle_t {
|
||||
int (*destroy)(RBin *bin);
|
||||
int (*check)(RBin *bin);
|
||||
ut64 (*baddr)(RBin *bin);
|
||||
RArray (*entries)(RBin *bin);
|
||||
RArray (*sections)(RBin *bin);
|
||||
RArray (*symbols)(RBin *bin);
|
||||
RArray (*imports)(RBin *bin);
|
||||
RArray (*strings)(RBin *bin);
|
||||
RFList (*entries)(RBin *bin);
|
||||
RFList (*sections)(RBin *bin);
|
||||
RFList (*symbols)(RBin *bin);
|
||||
RFList (*imports)(RBin *bin);
|
||||
RFList (*strings)(RBin *bin);
|
||||
struct r_bin_info_t* (*info)(RBin *bin);
|
||||
RArray (*fields)(RBin *bin);
|
||||
RArray (*libs)(RBin *bin);
|
||||
RFList (*fields)(RBin *bin);
|
||||
RFList (*libs)(RBin *bin);
|
||||
struct list_head list;
|
||||
} RBinHandle;
|
||||
|
||||
@ -129,17 +129,17 @@ R_API int r_bin_init(RBin *bin);
|
||||
R_API int r_bin_list(RBin *bin);
|
||||
R_API int r_bin_load(RBin *bin, const char *file, const char *plugin_name);
|
||||
R_API ut64 r_bin_get_baddr(RBin *bin);
|
||||
R_API RArray r_bin_get_entries(RBin *bin);
|
||||
R_API RArray r_bin_get_fields(RBin *bin);
|
||||
R_API RArray r_bin_get_imports(RBin *bin);
|
||||
R_API RFList r_bin_get_entries(RBin *bin);
|
||||
R_API RFList r_bin_get_fields(RBin *bin);
|
||||
R_API RFList r_bin_get_imports(RBin *bin);
|
||||
R_API RBinInfo* r_bin_get_info(RBin *bin);
|
||||
R_API RArray r_bin_get_libs(RBin *bin);
|
||||
R_API RArray r_bin_get_sections(RBin *bin);
|
||||
R_API RFList r_bin_get_libs(RBin *bin);
|
||||
R_API RFList r_bin_get_sections(RBin *bin);
|
||||
#if 0
|
||||
R_API RBinSection* r_bin_get_section_at(RBin *bin, ut64 off);
|
||||
#endif
|
||||
R_API RArray r_bin_get_strings(RBin *bin);
|
||||
R_API RArray r_bin_get_symbols(RBin *bin);
|
||||
R_API RFList r_bin_get_strings(RBin *bin);
|
||||
R_API RFList r_bin_get_symbols(RBin *bin);
|
||||
R_API RBin* r_bin_new();
|
||||
R_API void r_bin_set_user_ptr(RBin *bin, void *user);
|
||||
#endif
|
||||
|
@ -70,7 +70,7 @@ typedef struct r_debug_handle_t {
|
||||
int (*attach)(int pid);
|
||||
int (*detach)(int pid);
|
||||
int (*select)(int pid, int tid);
|
||||
RArray (*backtrace)(int count);
|
||||
RFList (*backtrace)(int count);
|
||||
/* flow */
|
||||
int (*step)(int pid); // if step() is NULL; reimplement it with traps
|
||||
int (*cont)(int pid, int sig);
|
||||
|
58
libr/include/r_flist.h
Normal file
58
libr/include/r_flist.h
Normal file
@ -0,0 +1,58 @@
|
||||
/* radare - LGPL - Copyright 2010 nibble <.ds@gmail.com> */
|
||||
|
||||
#ifndef _INCLUDE_R_FLIST_H_
|
||||
#define _INCLUDE_R_FLIST_H_
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define r_flist_t void**
|
||||
#define RFList void**
|
||||
#define r_flist_rewind(it) for (; it!=*it; it--); it++
|
||||
#define r_flist_next(it) *it!=0
|
||||
#define r_flist_get(it) *(it++)
|
||||
#define r_flist_iterator(x) x
|
||||
#define r_flist_unref(x) x
|
||||
|
||||
static inline void **r_flist_init(void **it, int n) {
|
||||
*it = it;
|
||||
memset (++it, 0, (n+1) * sizeof (void*));
|
||||
return it;
|
||||
}
|
||||
|
||||
static inline void **r_flist_new(int n) {
|
||||
void **it;
|
||||
if (!(it = (void **)malloc ((n+2) * sizeof (void*))))
|
||||
return NULL;
|
||||
return r_flist_init (it, n);
|
||||
}
|
||||
|
||||
static inline void **r_flist_prev(void **it) {
|
||||
void **p = it--;
|
||||
return (it==*it)?p:it;
|
||||
}
|
||||
|
||||
static inline void r_flist_set(void **it, int idx, void *data) {
|
||||
r_flist_rewind (it);
|
||||
it[idx] = data;
|
||||
}
|
||||
|
||||
static inline void r_flist_delete(void **it, int idx) {
|
||||
r_flist_rewind (it);
|
||||
free (it[idx]);
|
||||
for(it += idx; *it; it++) *it = *(it+1);
|
||||
}
|
||||
|
||||
#define r_flist_foreach(it, pos) \
|
||||
r_flist_rewind(it); \
|
||||
while (r_flist_next (it) && (pos = r_flist_get (it)))
|
||||
|
||||
static inline void r_flist_free(void **it) {
|
||||
void *pos;
|
||||
r_flist_foreach (it, pos)
|
||||
free (pos);
|
||||
r_flist_rewind (it);
|
||||
free (--it);
|
||||
}
|
||||
|
||||
#endif
|
@ -164,19 +164,4 @@ static inline int ERR(char *str, ...)
|
||||
#define ralist_next(x) (x=x->next, (x != head))
|
||||
#define ralist_free(x) (x)
|
||||
|
||||
#if 1
|
||||
#define rarray_get(x,y) x; x=((y)x)+1;
|
||||
#define rarray_next(x,y) (( ((y)x)->last ) ?free(x),x=0,0:1)
|
||||
#define rarray_iterator(x) x
|
||||
#define rarray_free(x) x
|
||||
//free(x)
|
||||
#else
|
||||
typedef struct { void* head; void *cur; } rarray_t;
|
||||
#define rarray_get(x,y) (x)->cur; (x)->cur=((y)(x)->cur)+1
|
||||
#define rarray_next(x,y) !((y)(x)->cur)->last
|
||||
#define rarray_iterator(x,y) (y)->cur=(x),(y)->head=(y)->cur,*(y)
|
||||
//{.cur=(void*)x,.head=(void*)x}
|
||||
#define rarray_free(x) (free((x)->head))
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include "r_types.h"
|
||||
#include <btree.h>
|
||||
#include "r_list.h" // radare linked list
|
||||
#include "r_array.h" // radare fixed pointer array iterators
|
||||
#include "r_flist.h" // radare fixed pointer array iterators
|
||||
#include "list.h" // kernel linked list
|
||||
/* profiling */
|
||||
#include <sys/time.h>
|
||||
|
@ -2,20 +2,20 @@
|
||||
#include "r_util.h"
|
||||
|
||||
int main() {
|
||||
void **it = r_array_new (3);
|
||||
void **it = r_flist_new (3);
|
||||
char *pos = NULL;
|
||||
|
||||
r_array_set(it, 0, strdup ("foo"));
|
||||
r_array_set(it, 1, strdup ("bar"));
|
||||
r_array_set(it, 2, strdup ("cow"));
|
||||
r_flist_set(it, 0, strdup ("foo"));
|
||||
r_flist_set(it, 1, strdup ("bar"));
|
||||
r_flist_set(it, 2, strdup ("cow"));
|
||||
|
||||
r_array_delete (it, 1);
|
||||
r_flist_delete (it, 1);
|
||||
|
||||
r_array_foreach(it, pos) {
|
||||
r_flist_foreach(it, pos) {
|
||||
printf("%s\n", pos);
|
||||
}
|
||||
|
||||
r_array_free(it);
|
||||
r_flist_free(it);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* radare - LGPL - Copyright 2009 nibble<.ds@gmail.com> */
|
||||
|
||||
[CCode (cheader_filename="r_bin.h,r_array.h,r_types.h", cprefix="r_bin_", lower_case_cprefix="r_bin_")]
|
||||
[CCode (cheader_filename="r_bin.h,r_flist.h,r_types.h", cprefix="r_bin_", lower_case_cprefix="r_bin_")]
|
||||
namespace Radare {
|
||||
[Compact]
|
||||
[CCode (cname="RBin", free_function="r_bin_free", cprefix="r_bin_")]
|
||||
@ -14,12 +14,12 @@ namespace Radare {
|
||||
public int load(string file, string? plugin_name = null);
|
||||
public int list();
|
||||
public uint64 get_baddr();
|
||||
public RArray<RBin.Entry> get_entries();
|
||||
public RArray<RBin.Field> get_fields();
|
||||
public RArray<RBin.Import> get_imports();
|
||||
public RArray<RBin.Section> get_sections();
|
||||
public RArray<RBin.String> get_strings();
|
||||
public RArray<RBin.Symbol> get_symbols();
|
||||
public RFList<RBin.Entry> get_entries();
|
||||
public RFList<RBin.Field> get_fields();
|
||||
public RFList<RBin.Import> get_imports();
|
||||
public RFList<RBin.Section> get_sections();
|
||||
public RFList<RBin.String> get_strings();
|
||||
public RFList<RBin.Symbol> get_symbols();
|
||||
public RBin.Info get_info();
|
||||
|
||||
[CCode (cname="RBinEntry", free_function="", ref_function="", unref_function="")]
|
||||
|
@ -49,7 +49,7 @@ public class Radare.RRegister {
|
||||
public bool set_profile(string file);
|
||||
public bool set_profile_string(string profile);
|
||||
public Item get(string name, int type = -1);
|
||||
/* TODO: use r_array or r_list here */
|
||||
/* TODO: use r_flist or r_list here */
|
||||
//public KernelList<RRegister.Item*> get_list(RRegister.Type type);
|
||||
|
||||
public uint64 get_value(Item item);
|
||||
|
@ -48,16 +48,16 @@ public class RBuffer {
|
||||
/* ... */
|
||||
}
|
||||
|
||||
/* Generic Iterator interfaced with r_array */
|
||||
[CCode (cprefix="r_array_", cheader_filename="r_array.h", cname="void*")]
|
||||
public static class RArray<G> {
|
||||
[CCode (cname="r_array_iterator")]
|
||||
public RArray<G> iterator();
|
||||
[CCode (cname="r_array_unref")]
|
||||
/* Generic Iterator interfaced with r_flist */
|
||||
[CCode (cprefix="r_flist_", cheader_filename="r_flist.h", cname="void*")]
|
||||
public static class RFList<G> {
|
||||
[CCode (cname="r_flist_iterator")]
|
||||
public RFList<G> iterator();
|
||||
[CCode (cname="r_flist_unref")]
|
||||
public void unref(G *arg);
|
||||
[CCode (cname="r_array_next")]
|
||||
[CCode (cname="r_flist_next")]
|
||||
public bool next();
|
||||
[CCode (cname="r_array_get")]
|
||||
[CCode (cname="r_flist_get")]
|
||||
public unowned G @get();
|
||||
}
|
||||
|
||||
|
@ -31,7 +31,7 @@ install-python:
|
||||
|
||||
install-ruby:
|
||||
@if [ "`grep ruby supported.langs`" ]; then \
|
||||
for a in 1.9.0 1.9.1; do \
|
||||
for a in 1.8 1.9.1; do \
|
||||
mkdir -p /usr/lib/ruby/$$a/r2 ; \
|
||||
echo "Installing ruby$$a r2 modules..." ; \
|
||||
cp -rf ruby/* /usr/lib/ruby/$$a/r2 ; \
|
||||
|
@ -11,7 +11,3 @@ tri:
|
||||
|
||||
bis:
|
||||
valaswig-cc python r_io -I../../libr/include r_io `pkg-config --libs r_io`
|
||||
|
||||
bin:
|
||||
swig -python -c++ -o r_bin.cpp -Wall -DR_API -I../../libr/include r_bin.i.experimental
|
||||
g++ -shared -fPIC -I../../libr/include -I/usr/include/python2.5 -lr_bin -lr_util -o _r_bin.so r_bin.cpp
|
||||
|
@ -16,6 +16,6 @@ test:
|
||||
-${LANG} test-r_hash.${LANG_EXT}
|
||||
|
||||
clean:
|
||||
rm -f *.so r_*
|
||||
rm -f *.so r_* libr*
|
||||
|
||||
.PHONY: all test clean
|
||||
|
12
swig/test/ruby/bin.rb
Normal file
12
swig/test/ruby/bin.rb
Normal file
@ -0,0 +1,12 @@
|
||||
#!/usr/bin/ruby
|
||||
|
||||
require 'r_bin'
|
||||
|
||||
bin = R_bin::RBin.new
|
||||
bin.load("/bin/ls", nil)
|
||||
baddr = bin.get_baddr
|
||||
puts "-> Sections"
|
||||
for i in bin.get_sections()
|
||||
printf("offset=0x%08x va=0x%08x size=%05i %s\n",
|
||||
i.offset, baddr+i.rva, i.size, i.name)
|
||||
end
|
Loading…
Reference in New Issue
Block a user