15 #define NESTEDSTRUCT 1
16 #define STRUCTFLAG 10000
18 #define ARRAYINDEX_COEF 10000
20 #define MUSTSEE (mode & RZ_PRINT_MUSTSEE && mode & RZ_PRINT_ISFIELD && !(mode & RZ_PRINT_JSON))
21 #define ISQUIET (mode & RZ_PRINT_QUIET)
22 #define MUSTSET (mode & RZ_PRINT_MUSTSET && mode & RZ_PRINT_ISFIELD && setval)
23 #define SEEVALUE (mode & RZ_PRINT_VALUE)
24 #define MUSTSEEJSON (mode & RZ_PRINT_JSON && mode & RZ_PRINT_ISFIELD)
25 #define MUSTSEESTRUCT (mode & RZ_PRINT_STRUCT)
29 #define THRESHOLD (-4444)
45 if (
len >=
sizeof(
float)) {
52 if (addr64 &&
len > 7) {
60 if (
s[0] ==
'*' &&
len >= 4) {
87 const char *
end = endian ?
"big" :
"little";
106 seeki + ((elem >= 0) ? elem * 8 : 0));
120 if (elem == -1 || elem == 0) {
126 if (
size != 0 && elem == -1) {
145 if (elem == -1 || elem == 0) {
151 if (
size != 0 && elem == -1) {
187 if (elem == -1 || elem == 0) {
193 if (
size != 0 && elem == -1) {
210 const char *
comma =
"";
212 if (elem == -1 || elem == 0) {
268 if (elem == -1 || elem == 0) {
277 if (
size != 0 && elem == -1) {
295 if (elem == -1 || elem == 0) {
304 if (
size != 0 && elem == -1) {
340 if (elem == -1 || elem == 0) {
346 if (
size != 0 && elem == -1) {
364 if (elem == -1 || elem == 0) {
370 if (
size != 0 && elem == -1) {
406 if (elem == -1 || elem == 0) {
412 if (
size != 0 && elem == -1) {
430 if (elem == -1 || elem == 0) {
436 if (
size != 0 && elem == -1) {
486 if (res > 0 &&
buffer[0] != 0xff &&
buffer[1] != 0xff) {
496 struct tm timestruct;
511 *(timestr + 24) =
'\0';
524 *(timestr + 24) =
'\0';
525 if (elem == -1 || elem == 0) {
531 if (
size != 0 && elem == -1) {
550 *(timestr + 24) =
'\0';
558 *(timestr + 24) =
'\0';
559 if (elem == -1 || elem == 0) {
565 if (
size != 0 && elem == -1) {
612 if (elem == -1 || elem == 0) {
626 if (
size != 0 && elem == -1) {
645 if (elem == -1 || elem == 0) {
651 if (
size != 0 && elem == -1) {
690 if (elem == -1 || elem == 0) {
696 if (
size != 0 && elem == -1) {
715 if (elem == -1 || elem == 0) {
721 if (
size != 0 && elem == -1) {
781 if (elem == -1 || elem == 0) {
787 if (
size != 0 && elem == -1) {
806 if (elem == -1 || elem == 0) {
812 if (
size != 0 && elem == -1) {
856 if (elem == -1 || elem == 0) {
862 if (
size != 0 && elem == -1) {
881 if (elem == -1 || elem == 0) {
887 if (
size != 0 && elem == -1) {
907 }
else if (
mode & RZ_PRINT_DOT) {
908 for (j = 0; j < 10; j++) {
916 for (j = 0; j < 10; j++) {
922 for (j = 0; j < 10; j++) {
938 for (; j < 10; j++) {
953 }
else if (
mode & RZ_PRINT_DOT) {
954 for (j = 0; j <
size; j++) {
962 for (j = 0; j <
size; j++) {
968 for (j = 0; j <
size; j++) {
982 for (; j < 10; j++) {
1006 seeki + ((elem >= 0) ? elem * 4 : 0));
1013 seeki + ((elem >= 0) ? elem * 4 : 0));
1024 if (elem == -1 || elem == 0) {
1030 if (
size != 0 && elem == -1) {
1061 seeki + ((elem >= 0) ? elem * 8 : 0));
1068 seeki + ((elem >= 0) ? elem * 8 : 0));
1081 if (elem == -1 || elem == 0) {
1087 if (
size != 0 && elem == -1) {
1120 while ((
size -= 2) > 0) {
1122 if (elem == -1 || elem == 0) {
1128 if (
size != 0 && elem == -1) {
1148 if (elem == -1 || elem == 0) {
1154 if (
size != 0 && elem == -1) {
1171 while ((
size -= 2) > 0) {
1173 if (elem == -1 || elem == 0) {
1179 if (
size != 0 && elem == -1) {
1207 if (typedb->
iob.
read_at(typedb->
iob.
io, seeki, &ch, 1) != 1 && ch != 0xff) {
1213 ut64 total_map_left = 0;
1217 if (!
map->itv.size) {
1222 addr += total_map_left;
1224 if (total_map_left <
len) {
1225 len = total_map_left;
1231 int buflen = strlen((
const char *)
buf + seeki);
1232 int vallen = strlen(setval);
1233 char *ons, *newstring = ons =
strdup(setval);
1234 if ((newstring[0] ==
'\"' && newstring[vallen - 1] ==
'\"') || (newstring[0] ==
'\'' && newstring[vallen - 1] ==
'\'')) {
1235 newstring[vallen - 1] =
'\0';
1240 eprintf(
"Warning: new string is longer than previous one\n");
1243 for (
i = 0;
i < vallen;
i++) {
1244 if (
i < vallen - 3 && newstring[
i] ==
'\\' && newstring[
i + 1] ==
'x') {
1274 char esc_str[5] = { 0 };
1275 char *ptr = esc_str;
1281 char *utf_encoded_buf =
NULL;
1285 if (utf_encoded_buf) {
1287 free(utf_encoded_buf);
1300 int vallen = strlen(setval);
1301 char *newstring, *ons;
1302 newstring = ons =
strdup(setval);
1303 if ((newstring[0] ==
'\"' && newstring[vallen - 1] ==
'\"') || (newstring[0] ==
'\'' && newstring[vallen - 1] ==
'\'')) {
1304 newstring[vallen - 1] =
'\0';
1309 eprintf(
"Warning: new string is longer than previous one\n");
1318 for (; j <
len && ((
size == -1 ||
size-- > 0) &&
buf[j]); j += 2) {
1328 for (; j <
len && ((
size == -1 ||
size-- > 0) &&
buf[j]); j += 2) {
1358 fieldname, fmtname,
addr);
1366 const char *enumvalue =
NULL;
1372 if (enumvalue && *enumvalue) {
1373 if (
mode & RZ_PRINT_DOT) {
1377 addr, enumvalue, fmtname);
1380 fieldname, fmtname,
addr, enumvalue);
1389 fieldname, fmtname,
addr);
1395 const char *
name,
const char *setval) {
1396 if (!
p || !
p->get_register || !
p->reg) {
1418 #define EXT(T) (sign ? (signed T)(addr) : (unsigned T)(addr))
1420 const char *fs = sign ?
"%d" :
"%u";
1423 }
else if (
bytes == 2) {
1425 }
else if (
bytes == 4) {
1427 }
else if (
bytes == 8) {
1465 if (elem == -1 || elem == 0) {
1471 if (
size != 0 && elem == -1) {
1494 if (elem == -1 || elem == 0) {
1500 if (
size != 0 && elem == -1) {
1517 int size = 0, tabsize = 0,
i,
idx = 0, biggest = 0, fmt_len = 0,
times = 1;
1518 bool tabsize_set =
false;
1533 end = strchr(o,
' ');
1535 if (!
end && !(
end = strchr(o,
'\0'))) {
1546 if (fmt[0] ==
'{') {
1547 char *
end = strchr(fmt + 1,
'}');
1558 if (fmt[0] ==
'0') {
1559 mode |= RZ_PRINT_UNIONMODE;
1562 mode &= ~RZ_PRINT_UNIONMODE;
1566 fmt_len = strlen(fmt);
1567 for (
i = 0;
i < fmt_len;
i++) {
1568 if (fmt[
i] ==
'[') {
1569 char *
end = strchr(fmt +
i,
']');
1578 while (fmt[
i++] !=
']') {
1592 size += tabsize * 1;
1595 size += tabsize * 2;
1607 size += tabsize * 4;
1612 size += tabsize * 8;
1615 size += tabsize * 16;
1629 if (tabsize < 1 || tabsize > 8) {
1630 RZ_LOG_ERROR(
"Unknown enum format size: %d\n", tabsize);
1639 const char *wordAtIndex =
NULL;
1640 const char *format =
NULL;
1641 char *endname =
NULL, *structname =
NULL;
1651 structname =
strdup(wordAtIndex);
1652 if (*structname ==
'(') {
1661 format = strchr(structname,
' ');
1664 while (
tmp ==
' ') {
1670 if (format && !strncmp(format,
f, strlen(format) - 1)) {
1680 RZ_LOG_ERROR(
"Cannot find format for struct `%s'\n", structname + 1);
1693 size += tabsize * newsize;
1698 while (fmt[
i] !=
'}') {
1718 if (fmt[
i + 1] ==
'2') {
1719 size += tabsize * 2;
1720 }
else if (fmt[
i + 1] ==
'4') {
1721 size += tabsize * 4;
1722 }
else if (fmt[
i + 1] ==
'8') {
1723 size += tabsize * 8;
1734 if (fmt[
i + 1] ==
'1') {
1735 size += tabsize * 1;
1736 }
else if (fmt[
i + 1] ==
'2') {
1737 size += tabsize * 2;
1738 }
else if (fmt[
i + 1] ==
'4') {
1739 size += tabsize * 4;
1740 }
else if (fmt[
i + 1] ==
'8') {
1741 size += tabsize * 8;
1743 RZ_LOG_ERROR(
"Invalid '%c' format in (%s)\n", fmt[
i + 1], fmt);
1759 if (
mode & RZ_PRINT_UNIONMODE) {
1760 if (
size > biggest) {
1769 return (
mode & RZ_PRINT_UNIONMODE) ? biggest :
size;
1773 const char *formatname,
int mode,
const char *setval,
char *ofield);
1776 int slide,
int mode,
const char *setval,
char *field,
int anon) {
1782 eprintf(
"Too much nested struct, recursion too deep...\n");
1801 if (fmt[0] ==
'0') {
1817 char *
args = strchr(
arg,
' ');
1818 char *sq_bracket = strchr(
arg,
'[');
1820 if (
args && sq_bracket) {
1821 char *csq_bracket = strchr(
arg,
']');
1822 while (
args && csq_bracket && csq_bracket >
args &&
max--) {
1823 args = strchr(csq_bracket,
' ');
1881 type =
strdup(fmt ==
'n' ?
"int8_t" :
"uint8_t");
1884 type =
strdup(fmt ==
'n' ?
"int16_t" :
"uint16_t");
1887 type =
strdup(fmt ==
'n' ?
"int32_t" :
"uint32_t");
1890 type =
strdup(fmt ==
'n' ?
"int64_t" :
"uint64_t");
1898 #define MINUSONE ((void *)(size_t)-1)
1899 #define ISSTRUCT (tmp == '?' || (tmp == '*' && *(arg + 1) == '?'))
1905 if (!
found || !result) {
1920 char *fmt =
rz_str_newf(
"%s %s", (
const char *)
k, (
const char *)
v);
1938 const char *formatname,
int mode,
const char *setval,
char *ofield) {
1939 int nargs,
i, invalid, nexti,
idx,
times, otimes, endian, isptr = 0;
1942 ut64 addr = 0, addr64 = 0, seeki = 0;
1943 static int slide = 0, oldslide = 0, ident = 4;
1944 char namefmt[32], *field =
NULL;
1946 const char *fmt =
NULL;
1950 char *internal_format =
NULL;
1960 internal_format =
strdup(fmt);
1961 fmt = internal_format;
1965 argend = fmt + strlen(fmt);
1971 free(internal_format);
1978 free(internal_format);
1984 if (ofield && ofield !=
MINUSONE) {
1995 bracket = strchr(
arg,
'{');
1997 char *
end = strchr(
arg,
'}');
1999 eprintf(
"No end bracket. Try pf {ecx}b @ esi\n");
2014 int l = 0, maxl = 0;
2017 while (
tmp ==
' ') {
2029 int len = strlen(nm ? nm + 1 :
tmp);
2035 const char *ends =
" ";
2036 snprintf(namefmt,
sizeof(namefmt),
"%%%ds :%s",
2037 ((maxl + 1) * (1 + slide)) %
STRUCTPTR, ends);
2039 #define ISPOINTED ((slide % STRUCTFLAG) / STRUCTPTR <= (oldslide % STRUCTFLAG) / STRUCTPTR)
2040 #define ISNESTED ((slide % STRUCTPTR) <= (oldslide % STRUCTPTR))
2041 if (
mode == RZ_PRINT_JSON && slide == 0) {
2044 if (
mode == RZ_PRINT_STRUCT) {
2045 if (formatname && *formatname) {
2046 if (strchr(formatname,
' ')) {
2056 mode |= RZ_PRINT_UNIONMODE;
2059 mode &= ~RZ_PRINT_UNIONMODE;
2061 if (
mode & RZ_PRINT_DOT) {
2063 if (formatname && *formatname) {
2064 if (strchr(formatname,
' ')) {
2067 fmtname =
strdup(formatname);
2082 const char *orig =
arg;
2085 if (
mode & RZ_PRINT_JSON) {
2086 if (otimes >
times) {
2096 int size = 0, elem = 0;
2097 char *fieldname =
NULL, *fmtname =
NULL;
2098 if (
mode & RZ_PRINT_UNIONMODE) {
2105 if (
arg[0] ==
'[') {
2106 char *
end = strchr(
arg,
']');
2126 if (
i + fs - 1 <
len) {
2144 mode |= RZ_PRINT_ISFIELD;
2146 if (!(
mode & RZ_PRINT_QUIET)) {
2147 if (
mode & RZ_PRINT_MUSTSEE && otimes > 1) {
2154 dot = strchr(field,
'.');
2162 if (*fieldname ==
'(') {
2163 fmtname = fieldname + 1;
2166 *fieldname++ =
'\0';
2168 eprintf(
"Missing closing parenthesis in format ')'\n");
2172 eprintf(
"Missing name (%s)\n", fieldname);
2176 if (
mode && (!
args || (!field && ofield !=
MINUSONE) || (field && !strncmp(field, fieldname, strchr(field,
'[') ? strchr(field,
'[') - field : strlen(field) + 1)))) {
2177 mode |= RZ_PRINT_ISFIELD;
2179 mode &= ~RZ_PRINT_ISFIELD;
2183 if (field && (bracket = strchr(field,
'[')) &&
mode & RZ_PRINT_ISFIELD) {
2184 char *
end = strchr(field,
']');
2186 eprintf(
"Missing closing bracket\n");
2191 for (; bracket <
end; bracket++) {
2198 if (
tmp !=
'.' &&
tmp !=
':') {
2221 if (((
i + 3) <
len) || ((
i + 7) <
len)) {
2227 eprintf(
"(cannot read at 0x%08" PFMT64x ", block: %s, blocksize: 0x%x)\n",
2241 if (
tmp == 0 && last !=
'*') {
2253 viewflags = !viewflags;
2271 if (*(
arg + 1) ==
'2') {
2274 }
else if (*(
arg + 1) ==
'4') {
2277 }
else if (*(
arg + 1) ==
'8') {
2282 case 16:
tmp =
'w';
break;
2283 case 32:
tmp =
'x';
break;
2284 default:
tmp =
'q';
break;
2291 if (
mode & RZ_PRINT_SEEFLAGS && isptr !=
NULLPTR) {
2292 char *newname =
NULL;
2296 if (
mode & RZ_PRINT_UNIONMODE) {
2300 }
else if (
tmp ==
'?') {
2302 }
else if (
tmp ==
'E') {
2316 if (
mode & RZ_PRINT_DOT) {
2319 seeki,
tmp, fieldname, fieldname);
2328 if (oldslide <= slide) {
2334 }
else if (oldslide) {
2346 if (
tmp ==
'n' ||
tmp ==
'N') {
2369 bool noline =
false;
2417 setval, seeki,
addr,
buf) == 0) {
2477 rz_type_format_nulltermstring(typedb,
p,
outbuf,
len, endian,
mode, setval, seeki,
buf,
i,
size);
2479 i += strlen((
char *)
buf +
i) + 1;
2524 eprintf(
"Unknown register\n");
2529 char *nxtfield =
NULL;
2530 char *format =
NULL;
2536 if (!(
mode & RZ_PRINT_ISFIELD)) {
2539 nxtfield = strchr(ofield,
'.');
2541 if (nxtfield !=
MINUSONE && nxtfield) {
2565 if (
mode & RZ_PRINT_SEEFLAGS) {
2571 format = strchr(fmtname,
' ');
2575 while (*fmtname ==
' ') {
2585 mode, setval, nxtfield, anon);
2588 if (!isptr && (!
arg[1] ||
arg[1] ==
' ')) {
2593 if (
mode & RZ_PRINT_ISFIELD) {
2599 if (
mode && (elem == -1 || elem == 0)) {
2600 mode |= RZ_PRINT_MUSTSEE;
2605 mode &= ~RZ_PRINT_MUSTSEE;
2608 buf +
i,
len -
i, fmtname, slide,
mode, setval, nxtfield, anon);
2621 if (
mode & RZ_PRINT_ISFIELD) {
2633 if (
mode & RZ_PRINT_SEEFLAGS) {
2642 int sign = (
tmp ==
'n') ? 1 : 0;
2643 if (
arg[1] ==
'1') {
2645 }
else if (
arg[1] ==
'2') {
2647 }
else if (
arg[1] ==
'4') {
2649 }
else if (
arg[1] ==
'8') {
2675 if (
mode & RZ_PRINT_DOT) {
2678 if (
mode & RZ_PRINT_SEEFLAGS && isptr !=
NULLPTR) {
2685 if (viewflags &&
p->offname) {
2686 const char *
s =
p->offname(
p->user, seeki);
2690 s =
p->offname(
p->user,
addr);
2695 if (!noline &&
tmp !=
'D' && !invalid && !fmtname &&
MUSTSEE) {
2703 if (
arg[0] ==
'E') {
2704 char *end_fmt = strchr(
arg,
' ');
2708 char *next_args = strchr(end_fmt + 1,
' ');
2710 while (*next_args !=
'\0') {
2711 *end_fmt++ = *next_args++;
2727 if (
mode & RZ_PRINT_JSON && slide == 0) {
2733 if (
mode & RZ_PRINT_DOT) {
2741 free(internal_format);
2750 const char *formatname,
int mode,
const char *setval,
char *ofield) {
2780 return type->identifier.name;
2786 return type->callable->name;
2797 switch (
type->kind) {
2852 switch (
type->kind) {
2858 if (!strcmp(membtype,
type->name)) {
2887 if (!strcmp(membtype,
type->name)) {
2918 if (!strcmp(ttype,
type->name)) {
3028 if (!
type->identifier.name) {
3058 if (
type->callable->name) {
const aarch64_field fields[]
static const char * arg(RzAnalysis *a, csh *handle, cs_insn *insn, char *buf, int n)
RZ_API RZ_BORROW RzBaseType * rz_type_db_get_base_type(const RzTypeDB *typedb, RZ_NONNULL const char *name)
Searches for the RzBaseType in the types database given the name.
size_t map(int syms, int left, int len)
unsigned char outbuf[SIZE]
RZ_API bool rz_type_is_identifier(RZ_NONNULL const RzType *type)
Checks if the RzType is identifier.
RZ_API bool rz_type_is_atomic(const RzTypeDB *typedb, RZ_NONNULL const RzType *type)
Checks if the RzType is atomic or derivative of it.
RZ_API bool rz_type_is_void_ptr(RZ_NONNULL const RzType *type)
Checks if the pointer RzType is abstract pointer ("void *")
RZ_API bool rz_type_is_char_ptr(RZ_NONNULL const RzType *type)
Checks if the pointer RzType is a string ("char *" or "const char *")
RZ_API void Ht_() free(HtName_(Ht) *ht)
RZ_API const KEY_TYPE bool * found
return memset(p, 0, total)
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
RZ_API RZ_OWN RzList * rz_list_newf(RzListFree f)
Returns a new initialized RzList pointer and sets the free method.
RZ_API RZ_BORROW RzListIter * rz_list_append(RZ_NONNULL RzList *list, void *data)
Appends at the end of the list a new element.
void * malloc(size_t size)
void * calloc(size_t number, size_t size)
static static fork const void static count static fd const char const char static newpath char char char static envp time_t static t const char static mode static whence const char static dir time_t static t unsigned static seconds const char struct utimbuf static buf static inc static sig const char static mode static oldfd times
static static fork const void static count static fd const char const char static newpath char char char static envp time_t static t const char static mode static whence const char static dir time_t static t unsigned static seconds const char struct utimbuf static buf static inc static sig const char static mode static oldfd struct tms static buf static getgid static geteuid const char static filename static arg static mask struct ustat static ubuf static getppid static setsid static egid sigset_t static set struct timeval struct timezone static tz fd_set fd_set fd_set struct timeval static timeout const char char static bufsiz const char static swapflags void static offset const char static length static mode static who const char struct statfs static buf unsigned unsigned num
return strdup("=SP r13\n" "=LR r14\n" "=PC r15\n" "=A0 r0\n" "=A1 r1\n" "=A2 r2\n" "=A3 r3\n" "=ZF zf\n" "=SF nf\n" "=OF vf\n" "=CF cf\n" "=SN or0\n" "gpr lr .32 56 0\n" "gpr pc .32 60 0\n" "gpr cpsr .32 64 0 ____tfiae_________________qvczn\n" "gpr or0 .32 68 0\n" "gpr tf .1 64.5 0 thumb\n" "gpr ef .1 64.9 0 endian\n" "gpr jf .1 64.24 0 java\n" "gpr qf .1 64.27 0 sticky_overflow\n" "gpr vf .1 64.28 0 overflow\n" "gpr cf .1 64.29 0 carry\n" "gpr zf .1 64.30 0 zero\n" "gpr nf .1 64.31 0 negative\n" "gpr itc .4 64.10 0 if_then_count\n" "gpr gef .4 64.16 0 great_or_equal\n" "gpr r0 .32 0 0\n" "gpr r1 .32 4 0\n" "gpr r2 .32 8 0\n" "gpr r3 .32 12 0\n" "gpr r4 .32 16 0\n" "gpr r5 .32 20 0\n" "gpr r6 .32 24 0\n" "gpr r7 .32 28 0\n" "gpr r8 .32 32 0\n" "gpr r9 .32 36 0\n" "gpr r10 .32 40 0\n" "gpr r11 .32 44 0\n" "gpr r12 .32 48 0\n" "gpr r13 .32 52 0\n" "gpr r14 .32 56 0\n" "gpr r15 .32 60 0\n" "gpr r16 .32 64 0\n" "gpr r17 .32 68 0\n")
#define rz_warn_if_reached()
#define rz_return_if_fail(expr)
#define rz_return_val_if_fail(expr, val)
static ut64 rz_read_ble64(const void *src, bool big_endian)
static ut32 rz_read_ble32(const void *src, bool big_endian)
static ut16 rz_read_ble16(const void *src, bool big_endian)
RZ_API char * rz_hex_bin2strdup(const ut8 *in, int len)
#define RZ_LOG_ERROR(fmtstr,...)
RZ_API void rz_mem_swaporcopy(ut8 *dest, const ut8 *src, int len, bool big_endian)
RZ_API ut64 rz_num_math(RzNum *num, const char *str)
#define RZ_PRINT_FLAGS_UNALLOC
RZ_API void rz_str_byte_escape(const char *p, char **dst, RzStrEscOptions *opt)
Converts unprintable characters to C-like backslash representation.
RZ_API char * rz_str_newf(const char *fmt,...) RZ_PRINTF_CHECK(1
RZ_API int rz_str_word_set0_stack(char *str)
RZ_API RZ_BORROW char * rz_str_trim_tail(RZ_NONNULL char *str)
Removes whitespace characters (space, tab, newline etc.) from the end of a string and replaces them w...
RZ_API const char * rz_str_rchr(const char *base, const char *p, int ch)
RZ_API char * rz_str_utf16_encode(const char *s, int len)
#define RZ_STR_ISEMPTY(x)
RZ_API size_t rz_str_nlen(const char *s, size_t n)
RZ_API char * rz_str_escape_utf8_for_json(const char *s, int len)
RZ_API size_t rz_wstr_clen(const char *s)
RZ_API const char * rz_str_word_get0(const char *str, int idx)
RZ_API RZ_OWN char * rz_strbuf_drain(RzStrBuf *sb)
RZ_API bool rz_strbuf_append(RzStrBuf *sb, const char *s)
RZ_API RzStrBuf * rz_strbuf_new(const char *s)
RZ_API void rz_strbuf_free(RzStrBuf *sb)
RZ_API bool rz_strbuf_appendf(RzStrBuf *sb, const char *fmt,...) RZ_PRINTF_CHECK(2
RZ_API struct tm * rz_gmtime_r(RZ_NONNULL const time_t *time, RZ_NONNULL struct tm *res)
RZ_API char * rz_asctime_r(RZ_NONNULL const struct tm *tm, RZ_NONNULL char *buf)
#define ASCTIME_BUF_MINLEN
@ RZ_BASE_TYPE_KIND_TYPEDEF
@ RZ_BASE_TYPE_KIND_ATOMIC
@ RZ_BASE_TYPE_KIND_UNION
@ RZ_BASE_TYPE_KIND_STRUCT
@ RZ_TYPE_IDENTIFIER_KIND_STRUCT
@ RZ_TYPE_IDENTIFIER_KIND_ENUM
@ RZ_TYPE_KIND_IDENTIFIER
RZ_API const ut8 * rz_uleb128_decode(const ut8 *data, int *datalen, ut64 *v)
RZ_API ut8 * rz_uleb128_encode(const ut64 s, int *len)
#define rz_vector_foreach(vec, it)
Group together some common options used by string escaping functions.
bool esc_bslash
When true, backslashes \ are quoted with \\
bool show_asciidot
When true, dots . are placed instead of unprintable characters.
bool dot_nl
When true, is converted into the graphiz-compatible newline \l.
RzIOIsValidOff is_valid_offset
RzIOMapGetPaddr map_get_paddr
RZ_API bool rz_type_is_callable_ptr(RZ_NONNULL const RzType *type)
Checks if the RzType is the pointer to the RzCallable.
RZ_API bool rz_type_is_callable_ptr_nested(RZ_NONNULL const RzType *type)
Checks if the RzType is the nested pointer to the RzCallable.
RZ_API RZ_BORROW const char * rz_type_identifier(RZ_NONNULL const RzType *type)
Returns the type C identifier.
RZ_API RZ_BORROW const char * rz_type_db_enum_member_by_val(const RzTypeDB *typedb, RZ_NONNULL const char *name, ut64 val)
Returns the enum case name matching the cpecified value.
RZ_API RZ_BORROW RzBaseType * rz_type_get_base_type(const RzTypeDB *typedb, RZ_NONNULL const RzType *type)
Returns the RzBaseType for the chosen RzType.
RZ_API RZ_OWN char * rz_type_db_enum_get_bitfield(const RzTypeDB *typedb, RZ_NONNULL const char *name, ut64 val)
Returns all matching bitfields as an OR mask given the resulting value.
ut64(WINAPI *w32_GetEnabledXStateFeatures)()
static xtensa_format_internal formats[]