1/* Capstone Disassembly Engine */
2/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2014 */
3
4#ifndef CS_UTILS_H
5#define CS_UTILS_H
6
7#if defined(CAPSTONE_HAS_OSXKERNEL)
8#include <libkern/libkern.h>
9#else
10#include <stddef.h>
11#endif
12#include "include/capstone.h"
13#include "cs_priv.h"
14
15// threshold number, so above this number will be printed in hexa mode
16#define HEX_THRESHOLD 9
17
18// map instruction to its characteristics
19typedef struct insn_map {
20 unsigned short id;
21 unsigned short mapid;
22#ifndef CAPSTONE_DIET
23 unsigned char regs_use[12]; // list of implicit registers used by this instruction
24 unsigned char regs_mod[20]; // list of implicit registers modified by this instruction
25 unsigned char groups[8]; // list of group this instruction belong to
26 bool branch; // branch instruction?
27 bool indirect_branch; // indirect branch instruction?
28#endif
29} insn_map;
30
31// look for @id in @m, given its size in @max. first time call will update @cache.
32// return 0 if not found
33unsigned short insn_find(const insn_map *m, unsigned int max, unsigned int id, unsigned short **cache);
34
35// map id to string
36typedef struct name_map {
37 unsigned int id;
38 const char *name;
39} name_map;
40
41// map a name to its ID
42// return 0 if not found
43int name2id(const name_map* map, int max, const char *name);
44
45// count number of positive members in a list.
46// NOTE: list must be guaranteed to end in 0
47unsigned int count_positive(const unsigned char *list);
48
49#define ARR_SIZE(a) (sizeof(a)/sizeof(a[0]))
50
51char *cs_strdup(const char *str);
52
53#define MIN(x, y) ((x) < (y) ? (x) : (y))
54
55// we need this since Windows doesnt have snprintf()
56int cs_snprintf(char *buffer, size_t size, const char *fmt, ...);
57
58#endif
59
60