本文整理汇总了C++中sdb_const_get函数的典型用法代码示例。如果您正苦于以下问题:C++ sdb_const_get函数的具体用法?C++ sdb_const_get怎么用?C++ sdb_const_get使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了sdb_const_get函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: eprintf
R_API RAnalMetaItem *r_meta_find(RAnal *a, ut64 at, int type, int where) {
const char *infos, *metas;
char key[100];
Sdb *s = a->sdb_meta;
static RAnalMetaItem mi = {0};
// XXX: return allocated item? wtf
if (where != R_META_WHERE_HERE) {
eprintf ("THIS WAS NOT SUPOSED TO HAPPEN\n");
return NULL;
}
snprintf (key, sizeof (key), "meta.0x%" PFMT64x, at);
infos = sdb_const_get (s, key, 0);
if (!infos) {
return NULL;
}
for (; *infos; infos++) {
if (*infos == ',') {
continue;
}
if (type != R_META_TYPE_ANY && type != *infos) {
continue;
}
snprintf (key, sizeof (key), "meta.%c.0x%" PFMT64x, *infos, at);
metas = sdb_const_get (s, key, 0);
if (metas) {
if (!r_meta_deserialize_val (&mi, *infos, at, metas)) {
continue;
}
return &mi;
}
}
return NULL;
}
示例2: dbdiff
static int dbdiff (const char *a, const char *b) {
int n = 0;
char *k, *v;
const char *v2;
Sdb *A = sdb_new (NULL, a, 0);
Sdb *B = sdb_new (NULL, b, 0);
sdb_dump_begin (A);
while (sdb_dump_dupnext (A, &k, &v)) {
v2 = sdb_const_get (B, k, 0);
if (!v2) {
printf ("%s=\n", k);
n = 1;
}
}
sdb_dump_begin (B);
while (sdb_dump_dupnext (B, &k, &v)) {
if (!v || !*v) continue;
v2 = sdb_const_get (A, k, 0);
if (!v2 || strcmp (v, v2)) {
printf ("%s=%s\n", k, v2);
n = 1;
}
}
return n;
}
示例3: 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);
}
示例4: dbdiff
static int dbdiff (const char *a, const char *b) {
int n = 0;
char *v;
char k[SDB_MAX_KEY] = {0};
const char *v2;
Sdb *A = sdb_new (NULL, a, 0);
Sdb *B = sdb_new (NULL, b, 0);
sdb_dump_begin (A);
while (sdb_dump_dupnext (A, k, &v, NULL)) {
v2 = sdb_const_get (B, k, 0);
if (!v2) {
printf ("%s=\n", k);
n = 1;
}
}
sdb_dump_begin (B);
while (sdb_dump_dupnext (B, k, &v, NULL)) {
if (!v || !*v) {
continue;
}
v2 = sdb_const_get (A, k, 0);
if (!v2 || strcmp (v, v2)) {
printf ("%s=%s\n", k, v2);
n = 1;
}
}
sdb_free (A);
sdb_free (B);
free (v);
return n;
}
示例5: r_anal_esil_trace_show
R_API void r_anal_esil_trace_show(RAnalEsil *esil, int idx) {
PrintfCallback p = esil->anal->printf;
const char *str2;
const char *str;
int trace_idx = esil->trace_idx;
esil->trace_idx = idx;
str2 = sdb_const_get (DB, KEY ("addr"), 0);
if (!str2) {
return;
}
p ("dr pc = %s\n", str2);
/* registers */
str = sdb_const_get (DB, KEY ("reg.read"), 0);
if (str) {
char regname[32];
const char *next, *ptr = str;
if (ptr && *ptr) {
do {
const char *ztr = sdb_const_anext (ptr, &next);
int len = next? (int)(size_t)(next-ztr)-1 : strlen (ztr);
if (len <sizeof(regname)) {
memcpy (regname, ztr, len);
regname[len] = 0;
str2 = sdb_const_get (DB, KEYREG ("reg.read", regname), 0);
p ("dr %s = %s\n", regname, str2);
} else {
eprintf ("Invalid entry in reg.read\n");
}
ptr = next;
} while (next);
}
}
/* memory */
str = sdb_const_get (DB, KEY ("mem.read"), 0);
if (str) {
char addr[64];
const char *next, *ptr = str;
if (ptr && *ptr) {
do {
const char *ztr = sdb_const_anext (ptr, &next);
int len = next? (int)(size_t)(next-ztr)-1 : strlen (ztr);
if (len <sizeof(addr)) {
memcpy (addr, ztr, len);
addr[len] = 0;
str2 = sdb_const_get (DB, KEYAT ("mem.read.data",
r_num_get (NULL, addr)), 0);
p ("wx %s @ %s\n", str2, addr);
} else {
eprintf ("Invalid entry in reg.read\n");
}
ptr = next;
} while (next);
}
}
esil->trace_idx = trace_idx;
}
示例6: main
int main() {
const char *v;
Sdb *s = sdb_new0 ();
sdb_set (s, "key", "foo", 0);
v = sdb_const_get(s, "key", 0);
printf ("%p %p (assert != 0)\n", s, v);
if (!v) return 1;
sdb_drain (s, sdb_new0());
v = sdb_const_get(s, "key", 0);
printf ("%p %p (assert == 0)\n", s, v);
sdb_free (s);
return (v==0)?0:1;
}
示例7: 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;
}
示例8: snprintf
R_API char *r_meta_get_string(RAnal *a, int type, ut64 addr) {
char key[100];
const char *k, *p, *p2, *p3;
snprintf (key, sizeof (key)-1, "meta.%c.0x%"PFMT64x, type, addr);
k = sdb_const_get (DB, key, NULL);
if (!k) {
return NULL;
}
p = strchr (k, SDB_RS);
if (!p) {
return NULL;
}
k = p + 1;
p2 = strchr (k, SDB_RS);
if (!p2) {
return (char *)sdb_decode (k, NULL);
}
k = p2 + 1;
if (type == R_META_TYPE_STRING) {
p3 = strchr (k, SDB_RS);
if (p3) {
return (char *)sdb_decode (p3 + 1, NULL);
}
}
return (char *)sdb_decode (k, NULL);
}
示例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);
}
示例10: sdb_const_get
SDB_API char *sdb_array_get(Sdb *s, const char *key, int idx, ut32 *cas) {
const char *str = sdb_const_get (s, key, cas);
const char *p = str;
char *o, *n;
int i, len;
if (!str || !*str) return NULL;
if (idx<0) {
int len = sdb_alen (str);
idx = -idx;
if (idx>len)
return NULL;
idx = (len-idx);
}
if (idx==0) {
n = strchr (str, SDB_RS);
if (!n) return strdup (str);
len = n-str;
o = malloc (len+1);
memcpy (o, str, len);
o[len] = 0;
return o;
}
for (i=0; i<idx; i++) {
n = strchr (p, SDB_RS);
if (!n) return NULL;
p = n+1;
}
n = strchr (p, SDB_RS);
if (!n) return strdup (p);
len = n-p;
o = malloc (len+1);
memcpy (o, p, len);
o[len] = 0;
return o;
}
示例11: getswi
R_API const char *r_syscall_get_i(RSyscall *s, int num, int swi) {
char foo[32];
if (!s || !s->db)
return NULL;
swi = getswi (s->db, swi);
snprintf (foo, sizeof (foo), "0x%x.%d", swi, num);
return sdb_const_get (s->db, foo, 0);
}
示例12: eprintf
R_API RAnalMetaItem *r_meta_find(RAnal *a, ut64 at, int type, int where) {
const char *infos, *metas;
char key[100];
Sdb *s = a->sdb_meta;
static RAnalMetaItem mi = {0};
// XXX: return allocated item? wtf
if (where != R_META_WHERE_HERE) {
eprintf ("THIS WAS NOT SUPOSED TO HAPPEN\n");
return NULL;
}
snprintf (key, sizeof (key)-1, "meta.0x%"PFMT64x, at);
infos = sdb_const_get (s, key, 0);
if (!infos)
return NULL;
for (; *infos; infos++) {
/* XXX wtf, must use anal.meta.deserialize() */
char *p, *q;
if (*infos==',')
continue;
snprintf (key, sizeof (key) - 1, "meta.%c.0x%"PFMT64x, *infos, at);
metas = sdb_const_get (s, key, 0);
mi.size = sdb_array_get_num (s, key, 0, 0);
mi.type = *infos;
mi.from = at;
mi.to = at + mi.size;
if (type != R_META_TYPE_ANY && type != mi.type) {
continue;
}
if (metas) {
p = strchr (metas, ',');
if (!p) {
continue;
}
mi.space = atoi (p + 1);
q = strchr (p + 1, ',');
if (!q) {
continue;
}
free (mi.str);
mi.str = (char*)sdb_decode (q + 1, 0);
return &mi;
} else mi.str = NULL;
}
return NULL;
}
示例13: 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;
}
示例14: setf
R_API RAnalHint *r_anal_hint_get(RAnal *a, ut64 addr) {
char key[64];
setf (key, "hint.0x%08"PFMT64x, addr);
const char *s = sdb_const_get (DB, key, 0);
if (!s) {
return NULL;
}
return r_anal_hint_from_string (a, addr, s);
}
示例15: r_anal_type_set
R_API int r_anal_type_set(RAnal *anal, ut64 at, const char *field, ut64 val) {
Sdb *DB = anal->sdb_types;
const char *kind;
char var[128];
sprintf (var, "link.%08"PFMT64x, at);
kind = sdb_const_get (DB, var, NULL);
if (kind) {
const char *p = sdb_const_get (DB, kind, NULL);
if (p) {
snprintf (var, sizeof (var), "%s.%s.%s", p, kind, field);
int off = sdb_array_get_num (DB, var, 1, NULL);
//int siz = sdb_array_get_num (DB, var, 2, NULL);
eprintf ("wv 0x%08"PFMT64x" @ 0x%08"PFMT64x, val, at+off);
return true;
} else eprintf ("Invalid kind of type\n");
}
return false;
}