本文整理汇总了C++中sdb_fmt函数的典型用法代码示例。如果您正苦于以下问题:C++ sdb_fmt函数的具体用法?C++ sdb_fmt怎么用?C++ sdb_fmt使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了sdb_fmt函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: disassemble
static int disassemble(RAsm *a, RAsmOp *aop, const ut8 *buf, int len) {
m68k_word bof[8] = {0};
int iaddr = (int)a->pc;
char opcode[256], operands[256];
const unsigned char *buf2;
int ilen ;
static struct DisasmPara_68k dp;
char *buf_asm;
/* initialize DisasmPara */
*operands = *opcode = 0;
memcpy (bof, buf, R_MIN(len, sizeof(bof)));
dp.opcode = opcode;
dp.operands = operands;
dp.iaddr = (m68k_word *) (size_t)iaddr;
dp.instr = bof;
buf2 = (const ut8*)M68k_Disassemble (&dp);
if (!buf2) {
// invalid instruction
return aop->size = 2;
}
ilen = (buf2-(const ut8*)bof);
if (*operands)
buf_asm = sdb_fmt ("%s %s", opcode, operands);
else
buf_asm = sdb_fmt ("%s", opcode);
r_str_rmch (buf_asm, '#');
r_asm_op_set_asm (aop, buf_asm);
aop->size = ilen;
return aop->size;
}
开发者ID:radare,项目名称:radare2-extras,代码行数:30,代码来源:asm_m68k_net.c
示例2: r_return_val_if_fail
// - name should be allocated on the heap
R_API char *r_bin_filter_name(RBinFile *bf, Sdb *db, ut64 vaddr, char *name) {
r_return_val_if_fail (db && name, NULL);
char *resname = name;
const char *uname = sdb_fmt ("%" PFMT64x ".%s", vaddr, resname);
ut32 vhash = sdb_hash (uname); // vaddr hash - unique
ut32 hash = sdb_hash (resname); // name hash - if dupped and not in unique hash must insert
int count = sdb_num_inc (db, sdb_fmt ("%x", hash), 1, 0);
if (sdb_exists (db, sdb_fmt ("%x", vhash))) {
// TODO: symbol is dupped, so symbol can be removed!
return resname;
}
sdb_num_set (db, sdb_fmt ("%x", vhash), 1, 0);
if (vaddr) {
char *p = hashify (resname, vaddr);
if (p) {
resname = p;
}
}
if (count > 1) {
char *p = r_str_appendf (resname, "_%d", count - 1);
if (p) {
resname = p;
}
// two symbols at different addresses and same name wtf
// eprintf ("Symbol '%s' dupped!\n", sym->name);
}
return resname;
}
开发者ID:brainstorm,项目名称:radare2,代码行数:32,代码来源:filter.c
示例3: stack_clean
static int stack_clean (RCore *core, ut64 addr, RAnalFunction *fcn) {
int offset, ret;
char *tmp, *str, *sig;
RAnalOp *op = r_core_anal_op (core, addr);
if (!op) {
return 0;
}
str = strdup (r_strbuf_get (&op->esil));
if (!str) {
return 0;
}
tmp = strchr (str, ',');
if (!tmp) {
free (str);
return 0;
}
*tmp++ = 0;
offset = r_num_math (core->num, str);
const char *sp = r_reg_get_name (core->anal->reg, R_REG_NAME_SP);
sig = sdb_fmt (-1, "%s,+=", sp);
ret = 0;
if (!strncmp (tmp, sig, strlen (sig))) {
const char *esil = sdb_fmt (-1, "%d,%s,-=", offset, sp);
r_anal_esil_parse (core->anal->esil, esil);
r_anal_esil_dumpstack (core->anal->esil);
r_anal_esil_stack_free (core->anal->esil);
r_core_esil_step (core, UT64_MAX, NULL);
ret = op->size;
}
r_anal_op_free (op);
free (str);
return ret;
}
开发者ID:Lukas-Dresel,项目名称:radare2,代码行数:34,代码来源:anal_tp.c
示例4: sdb_fmt
R_API char *r_type_link_at (Sdb *TDB, ut64 addr) {
char* res = NULL;
if (addr == UT64_MAX) {
return NULL;
}
char* query = sdb_fmt ("link.%08"PFMT64x, addr);
res = sdb_get (TDB, query, 0);
if (!res) { // resolve struct memb if possible for given addr
SdbKv *kv;
SdbListIter *sdb_iter;
SdbList *sdb_list = sdb_foreach_list (TDB, true);
ls_foreach (sdb_list, sdb_iter, kv) {
if (strncmp (kv->key, "link.", strlen ("link."))) {
continue;
}
const char *linkptr = sdb_fmt ("0x%s", kv->key + strlen ("link."));
ut64 baseaddr = r_num_math (NULL, linkptr);
int delta = (addr > baseaddr)? addr - baseaddr: -1;
res = r_type_get_struct_memb (TDB, kv->value, delta);
if (res) {
break;
}
}
ls_free (sdb_list);
}
开发者ID:skuater,项目名称:radare2,代码行数:26,代码来源:ctype.c
示例5: eprintf
R_API RSyscallItem *r_syscall_get(RSyscall *s, int num, int swi) {
const char *ret, *ret2, *key;
if (!s || !s->db) {
eprintf ("Syscall database not loaded\n");
return NULL;
}
swi = getswi (s, swi);
if (swi < 16) {
key = sdb_fmt (0, "%d.%d", swi, num);
} else {
key = sdb_fmt (0, "0x%02x.%d", swi, num);
}
ret = sdb_const_get (s->db, key, 0);
if (!ret) {
key = sdb_fmt (0, "0x%02x.0x%02x", swi, num); // Workaround until Syscall SDB is fixed
ret = sdb_const_get (s->db, key, 0);
if (!ret) {
return NULL;
}
}
ret2 = sdb_const_get (s->db, ret, 0);
if (!ret2) {
return NULL;
}
return r_syscall_item_new_from_string (ret, ret2);
}
开发者ID:dtrecherel,项目名称:radare2,代码行数:26,代码来源:syscall.c
示例6: addptr
static void addptr(RList *ret, const char *name, ut64 addr, const ut8 *b, int len) {
if (b && rjmp (b)) {
addsym (ret, sdb_fmt ("vector.%s", name), addr);
ut64 ptr_addr = rjmp_dest (addr, b + addr);
addsym (ret, sdb_fmt ("syscall.%s", name), ptr_addr);
}
}
开发者ID:montekki,项目名称:radare2,代码行数:7,代码来源:bin_avr.c
示例7: r_anal_type_match
R_API void r_anal_type_match(RCore *core, RAnalFunction *fcn) {
bool esil_var[STATES_SIZE] = {false};
if (!core ) {
return;
}
if (!r_anal_emul_init (core, esil_var) || !fcn ) {
r_anal_emul_restore (core, esil_var);
return;
}
const char *pc = r_reg_get_name (core->anal->reg, R_REG_NAME_PC);
ut64 addr = fcn->addr;
r_reg_setv (core->dbg->reg, pc, fcn->addr);
r_debug_reg_sync (core->dbg, -1, true);
r_cons_break (NULL, NULL);
while (!r_cons_is_breaked ()) {
RAnalOp *op = r_core_anal_op (core, addr);
int loop_count = sdb_num_get ( core->anal->esil->db_trace, sdb_fmt (-1, "0x%"PFMT64x".count", addr), 0);
if (loop_count > LOOP_MAX) {
eprintf ("Unfortunately your evilly engineered %s function trapped my most innocent `aftm` in an infinite loop.\n", fcn->name);
eprintf ("I kept trace log for you to review and find out how bad things were going to happen by yourself.\n");
eprintf ("You can view this log by `ate`. Meanwhile, I will train on how to behave with such behaviour without bothering you.\n");
return;
}
sdb_num_set (core->anal->esil->db_trace, sdb_fmt (-1, "0x%"PFMT64x".count", addr), loop_count + 1, 0);
if (!op || op->type == R_ANAL_OP_TYPE_RET) {
r_anal_emul_restore (core, esil_var);
return;
}
if (op->type == R_ANAL_OP_TYPE_CALL) {
RAnalFunction *fcn_call = r_anal_get_fcn_in (core->anal, op->jump, -1);
//eprintf ("in the middle of %s\n", fcn_call->name);
if (fcn_call) {
type_match (core, addr, fcn_call->name);
} else {
eprintf ("Cannot find function at 0x%08"PFMT64x"\n", op->jump);
}
addr += op->size;
r_anal_op_free (op);
r_reg_setv (core->dbg->reg, pc, addr);
r_debug_reg_sync (core->dbg, -1, true);
r_anal_esil_set_pc (core->anal->esil, addr);
addr += stack_clean (core, addr, fcn);
r_reg_setv (core->dbg->reg, pc, addr);
r_debug_reg_sync (core->dbg, -1, true);
r_anal_esil_set_pc (core->anal->esil, addr);
continue;
} else {
r_core_esil_step (core, UT64_MAX, NULL);
r_anal_op_free (op);
}
r_core_cmd0 (core, ".ar*");
addr = r_reg_getv (core->anal->reg, pc);
}
r_cons_break_end ();
r_anal_emul_restore (core, esil_var);
}
开发者ID:Lukas-Dresel,项目名称:radare2,代码行数:57,代码来源:anal_tp.c
示例8: r_anal_var_access
// avr
R_API int r_anal_var_access (RAnal *a, ut64 var_addr, char kind, int scope, int delta, int xs_type, ut64 xs_addr) {
const char *var_global;
const char *xs_type_str = xs_type? "writes": "reads";
// TODO: kind is not used
if (scope>0) { // local
char *var_local = sdb_fmt (0, "var.0x%"PFMT64x".%d.%d.%s",
var_addr, scope, delta, xs_type_str);
return sdb_array_add_num (DB, var_local, xs_addr, 0);
}
// global
sdb_add (DB, sdb_fmt (0,"var.0x%"PFMT64x, var_addr), "a,", 0);
var_global = sdb_fmt (0, "var.0x%"PFMT64x".%s", var_addr, xs_type_str);
return sdb_array_add_num (DB, var_global, xs_addr, 0);
}
开发者ID:earada,项目名称:radare2,代码行数:15,代码来源:var.c
示例9: r_syscall_sysreg
R_API const char* r_syscall_sysreg(RSyscall *s, const char *type, ut64 num) {
if (!s || !s->db) {
return NULL;
}
const char *key = sdb_fmt (0, "%s,%"PFMT64d, type, num);
return sdb_const_get (s->db, key, 0);
}
开发者ID:dtrecherel,项目名称:radare2,代码行数:7,代码来源:syscall.c
示例10: r_str_appendf
R_API char *r_type_enum_getbitfield(Sdb *TDB, const char *name, ut64 val) {
char *q, *ret = NULL;
const char *res;
int i;
if (r_type_kind (TDB, name) != R_TYPE_ENUM) {
return NULL;
}
bool isFirst = true;
ret = r_str_appendf (ret, "0x%08"PFMT64x" : ", val);
for (i = 0; i < 32; i++) {
if (!(val & (1 << i))) {
continue;
}
q = sdb_fmt ("enum.%s.0x%x", name, (1<<i));
res = sdb_const_get (TDB, q, 0);
if (isFirst) {
isFirst = false;
} else {
ret = r_str_append (ret, " | ");
}
if (res) {
ret = r_str_append (ret, res);
} else {
ret = r_str_appendf (ret, "0x%x", (1<<i));
}
}
return ret;
}
开发者ID:skuater,项目名称:radare2,代码行数:29,代码来源:ctype.c
示例11: art_header_load
static int art_header_load(ARTHeader *art, RBuffer *buf, Sdb *db) {
/* TODO: handle read errors here */
(void)r_buf_fread_at (buf, 0, (ut8*)art, "IIiiiiiiiiiii", 1);
sdb_set (db, "img.base", sdb_fmt (0, "0x%x", art->image_base), 0);
sdb_set (db, "img.size", sdb_fmt (0, "0x%x", art->image_size), 0);
sdb_set (db, "art.checksum", sdb_fmt (0, "0x%x", art->checksum), 0);
sdb_set (db, "art.version", sdb_fmt (0, "%c%c%c",
art->version[0], art->version[1], art->version[2]), 0);
sdb_set (db, "oat.begin", sdb_fmt (0, "0x%x", art->oat_begin), 0);
sdb_set (db, "oat.end", sdb_fmt (0, "0x%x", art->oat_end), 0);
sdb_set (db, "oat_data.begin", sdb_fmt (0, "0x%x", art->oat_data_begin), 0);
sdb_set (db, "oat_data.end", sdb_fmt (0, "0x%x", art->oat_data_end), 0);
sdb_set (db, "patch_delta", sdb_fmt (0, "0x%x", art->patch_delta), 0);
sdb_set (db, "image_roots", sdb_fmt (0, "0x%x", art->image_roots), 0);
return R_TRUE;
}
开发者ID:juhakivekas,项目名称:radare2,代码行数:16,代码来源:bin_art.c
示例12: r_anal_get_fcn_in
R_API RAnalVar *r_anal_var_get (RAnal *a, ut64 addr, char kind, int scope, int delta) {
RAnalVar *av;
struct VarType vt;
RAnalFunction *fcn = r_anal_get_fcn_in (a, addr, 0);
if (!fcn)
return NULL;
if (delta<0) {
kind = 'v';
delta = -delta;
}
char *vardef = sdb_get (DB,
sdb_fmt (0, "var.0x%"PFMT64x".%c.%d.%d",
fcn->addr, kind, scope, delta), 0);
if (!vardef)
return NULL;
sdb_fmt_tobin (vardef, SDB_VARTYPE_FMT, &vt);
av = R_NEW0 (RAnalVar);
av->addr = addr;
av->scope = scope;
av->delta = delta;
av->name = strdup (vt.name);
av->size = vt.size;
av->type = strdup (vt.type);
sdb_fmt_free (&vt, SDB_VARTYPE_FMT);
// TODO:
// get name from sdb
// get size from sdb
// get type from sdb
return av;
}
开发者ID:earada,项目名称:radare2,代码行数:32,代码来源:var.c
示例13: r_anal_state_search_bb
R_API RAnalBlock * r_anal_state_search_bb(RAnalState* state, ut64 addr) {
/*
* Return 0 if no rehash is needed, otherwise return 1
*/
const char *key = sdb_fmt (0, "0x%08"PFMT64x, addr);
RAnalBlock *tmp_bb = ht_find (state->ht, key, NULL);
return tmp_bb;
}
开发者ID:Maijin,项目名称:radare2,代码行数:8,代码来源:state.c
示例14: typelist
static int typelist (void *p, const char *k, const char *v) {
r_cons_printf ("tk %s = %s\n", k, v);
#if 0
if (!strcmp (v, "func")) {
const char *rv = sdb_const_get (DB,
sdb_fmt (0, "func.%s.ret", k), 0);
r_cons_printf ("# %s %s(", rv, k);
for (i = 0; i < 16; i++) {
char *av = sdb_get (DB,
sdb_fmt (0, "func.%s.arg.%d", k, i), 0);
if (!av) break;
r_str_replace_char (av, ',', ' ');
r_cons_printf ("%s%s", i? ", ": "", av);
free (av);
}
r_cons_printf (");\n");
// signature in pf for asf
r_cons_printf ("asf %s=", k);
// formats
for (i = 0; i < 16; i++) {
const char *fmt;
char *comma, *av = sdb_get (DB,
sdb_fmt (0, "func.%s.arg.%d", k, i), 0);
if (!av) break;
comma = strchr (av, ',');
if (comma) *comma = 0;
fmt = sdb_const_get (DB, sdb_fmt (0, "type.%s", av), 0);
r_cons_printf ("%s", fmt);
if (comma) *comma = ',';
free (av);
}
// names
for (i = 0; i < 16; i++) {
char *comma, *av = sdb_get (DB,
sdb_fmt (0, "func.%s.arg.%d", k, i), 0);
if (!av) break;
comma = strchr (av, ',');
if (comma) *comma++ = 0;
r_cons_printf (" %s", comma);
free (av);
}
r_cons_newline ();
}
#endif
return 1;
}
开发者ID:HKingz,项目名称:radare2,代码行数:46,代码来源:cmd_type.c
示例15: disassemble
static int disassemble(RAsm *a, RAsmOp *op, const ut8 *buf, int len) {
ebc_command_t cmd = { {0}, {0} };
int ret = ebc_decode_command (buf, &cmd);
const char *buf_asm = (cmd.operands[0])
? sdb_fmt ("%s %s", cmd.instr, cmd.operands): cmd.instr;
r_asm_op_set_asm (op, buf_asm);
return op->size = ret;
}
开发者ID:aronsky,项目名称:radare2,代码行数:8,代码来源:asm_ebc.c
示例16: pair_str
static void pair_str (const char *a, const char *b, int mode, int last) {
if (IS_MODE_JSON (mode)) {
if (!b) b = "";
pair (a, sdb_fmt (0, "\"%s\"", b), mode, last);
} else {
pair (a, b, mode, last);
}
}
开发者ID:hidd3ncod3s,项目名称:radare2,代码行数:8,代码来源:bin.c
示例17: r_anal_var_add
R_API int r_anal_var_add (RAnal *a, ut64 addr, int scope, int delta, char kind, const char *type, int size, const char *name) {
char *var_def;
if (!kind) kind ='v';
if (!type) type = "int";
//eprintf ("VAR ADD 0x%llx - %d\n", addr, delta);
switch (kind) {
case 'a':
case 'r':
case 'v':
break;
default:
eprintf ("Invalid var kind '%c'\n", kind);
return R_FALSE;
}
var_def = sdb_fmt (0,"%c,%s,%d,%s", kind, type, size, name);
if (scope>0) {
/* local variable */
char *fcn_key = sdb_fmt (1, "fcn.0x%"PFMT64x".%c", addr, kind);
char *var_key = sdb_fmt (2, "var.0x%"PFMT64x".%c.%d.%d", addr, kind, scope, delta);
char *name_key = sdb_fmt (3, "var.0x%"PFMT64x".%c.%d.%s", addr, kind, scope, name);
char *shortvar = sdb_fmt (4, "%d.%d", scope, delta);
sdb_array_add (DB, fcn_key, shortvar, 0);
sdb_set (DB, var_key, var_def, 0);
sdb_num_set (DB, name_key, delta, 0);
} else {
/* global variable */
char *var_global = sdb_fmt (1, "var.0x%"PFMT64x, addr);
char *var_def = sdb_fmt (2,"%c.%s,%d,%s", kind, type, size, name);
sdb_array_add (DB, var_global, var_def, 0);
}
// ls_sort (DB->ht->list, mystrcmp);
return R_TRUE;
}
开发者ID:earada,项目名称:radare2,代码行数:33,代码来源:var.c
示例18: set_fcn_args_info
static void set_fcn_args_info(RAnalFuncArg *arg, RAnal *anal, const char *fcn_name, const char *cc, int arg_num) {
if (!fcn_name || !arg || !anal) {
return;
}
Sdb *TDB = anal->sdb_types;
arg->name = r_type_func_args_name (TDB, fcn_name, arg_num);
arg->orig_c_type = r_type_func_args_type (TDB, fcn_name, arg_num);
if (!strncmp ("const ", arg->orig_c_type, 6)) {
arg->c_type = arg->orig_c_type + 6;
} else {
arg->c_type = arg->orig_c_type;
}
const char *query = sdb_fmt ("type.%s", arg->c_type);
arg->fmt = sdb_const_get (TDB, query, 0);
const char *t_query = sdb_fmt ("type.%s.size", arg->c_type);
arg->size = sdb_num_get (TDB, t_query, 0) / 8;
arg->cc_source = r_anal_cc_arg (anal, cc, arg_num + 1);
}
开发者ID:aronsky,项目名称:radare2,代码行数:18,代码来源:carg.c
示例19: r_bin_filter_sym
R_API void r_bin_filter_sym(RBinFile *bf, Sdb *db, ut64 vaddr, RBinSymbol *sym) {
if (!db || !sym || !sym->name) {
return;
}
char *name = sym->name;
// if (!strncmp (sym->name, "imp.", 4)) {
// demangle symbol name depending on the language specs if any
if (bf && bf->o && bf->o->lang) {
const char *lang = r_bin_lang_tostring (bf->o->lang);
char *dn = r_bin_demangle (bf, lang, sym->name, sym->vaddr);
if (dn && *dn) {
sym->dname = dn;
// XXX this is wrong but is required for this test to pass
// pmb:new pancake$ bin/r2r.js db/formats/mangling/swift
sym->name = dn;
// extract class information from demangled symbol name
char *p = strchr (dn, '.');
if (p) {
if (IS_UPPER (*dn)) {
sym->classname = strdup (dn);
sym->classname[p - dn] = 0;
} else if (IS_UPPER (p[1])) {
sym->classname = strdup (p + 1);
p = strchr (sym->classname, '.');
if (p) {
*p = 0;
}
}
}
}
}
// XXX this is very slow, must be optimized
const char *uname = sdb_fmt ("%" PFMT64x ".%s", vaddr, name);
ut32 vhash = sdb_hash (uname); // vaddr hash - unique
ut32 hash = sdb_hash (name); // name hash - if dupped and not in unique hash must insert
int count = sdb_num_inc (db, sdb_fmt ("%x", hash), 1, 0);
if (sdb_exists (db, sdb_fmt ("%x", vhash))) {
// TODO: symbol is dupped, so symbol can be removed!
return;
}
sdb_num_set (db, sdb_fmt ("%x", vhash), 1, 0);
sym->dup_count = count - 1;
}
开发者ID:brainstorm,项目名称:radare2,代码行数:44,代码来源:filter.c
示例20: sdb_fmt
static RAnalVar *get_used_var(RAnal *anal, RAnalOp *op) {
char *inst_key = sdb_fmt (0, "inst.0x%"PFMT64x".vars", op->addr);
const char *var_def = sdb_const_get (anal->sdb_fcns, inst_key, 0);
struct VarUsedType vut;
RAnalVar *res;
if (sdb_fmt_tobin (var_def, SDB_VARUSED_FMT, &vut) != 4) {
return NULL;
}
res = r_anal_var_get (anal, vut.fcn_addr, vut.type[0], vut.scope, vut.delta);
sdb_fmt_free (&vut, SDB_VARUSED_FMT);
return res;
}
开发者ID:m-emerson,项目名称:radare2,代码行数:13,代码来源:op.c
注:本文中的sdb_fmt函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论