* 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:
Nibble 2010-02-12 11:45:22 +01:00
parent 18b1b24065
commit 3d3bf594af
20 changed files with 211 additions and 218 deletions

View File

@ -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;
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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;

View File

@ -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;

View File

@ -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)))

View File

@ -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

View File

@ -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

View File

@ -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
View 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

View File

@ -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

View File

@ -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>

View File

@ -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;
}

View File

@ -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="")]

View File

@ -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);

View File

@ -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();
}

View File

@ -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 ; \

View File

@ -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

View File

@ -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
View 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