35 analysis->
diff_thbb = (thbb >= 0) ? thbb : RZ_ANALYSIS_THRESHOLDBB;
36 analysis->
diff_thfcn = (thfcn >= 0) ? thfcn : RZ_ANALYSIS_THRESHOLDFCN;
44 analysis->
diff_thbb = (thbb >= 0) ? ((
double)thbb) / 100 : RZ_ANALYSIS_THRESHOLDBB;
45 analysis->
diff_thfcn = (thfcn >= 0) ? ((
double)thfcn) / 100 : RZ_ANALYSIS_THRESHOLDFCN;
75 while (idx < bb->
size) {
79 if (
op->nopcode != 0) {
101 rz_list_foreach (fcn->
bbs,
iter, bb) {
117 if (!analysis || !fcn || !fcn2) {
121 return (analysis->
cur->
diff_bb(analysis, fcn, fcn2));
124 rz_list_foreach (fcn->
bbs,
iter, bb) {
130 rz_list_foreach (fcn2->
bbs, iter2, bb2) {
179 double t, ot, sizes_div;
185 return (analysis->
cur->
diff_fcn(analysis, fcns1, fcns2));
188 rz_list_foreach (fcns1,
iter, fcn) {
189 rz_list_foreach (fcns2, iter2, fcn2) {
219 rz_list_foreach (fcns1,
iter, fcn) {
229 rz_list_foreach (fcns2, iter2, fcn2) {
RZ_API void rz_analysis_diff_free(RzAnalysisDiff *diff)
RZ_API size_t rz_analysis_diff_fingerprint_fcn(RzAnalysis *analysis, RzAnalysisFunction *fcn)
RZ_API int rz_analysis_diff_fingerprint_bb(RzAnalysis *analysis, RzAnalysisBlock *bb)
RZ_API RZ_OWN RzAnalysisDiff * rz_analysis_diff_new(void)
RZ_API int rz_analysis_diff_eval(RzAnalysis *analysis)
RZ_API void rz_analysis_diff_setup(RzAnalysis *analysis, int doops, double thbb, double thfcn)
RZ_API void rz_analysis_diff_setup_i(RzAnalysis *analysis, int doops, int thbb, int thfcn)
RZ_API int rz_analysis_diff_fcn(RzAnalysis *analysis, RzList *fcns1, RzList *fcns2)
RZ_API bool rz_analysis_diff_bb(RzAnalysis *analysis, RzAnalysisFunction *fcn, RzAnalysisFunction *fcn2)
RZ_API bool rz_diff_levenstein_distance(RZ_NONNULL const ut8 *a, ut32 la, RZ_NONNULL const ut8 *b, ut32 lb, RZ_NULLABLE ut32 *distance, RZ_NULLABLE double *similarity)
Calculates the distance between two buffers using the Levenshtein algorithm.
RZ_API void Ht_() free(HtName_(Ht) *ht)
return memset(p, 0, total)
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
void * realloc(void *ptr, size_t size)
void * malloc(size_t size)
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")
RZ_API RzAnalysisOp * rz_analysis_op_new(void)
RZ_API int rz_analysis_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask)
#define RZ_ANALYSIS_DIFF_THRESHOLD
@ RZ_ANALYSIS_DIFF_TYPE_MATCH
@ RZ_ANALYSIS_DIFF_TYPE_UNMATCH
@ RZ_ANALYSIS_DIFF_TYPE_NULL
@ RZ_ANALYSIS_FCN_TYPE_SYM
@ RZ_ANALYSIS_FCN_TYPE_FCN
@ RZ_ANALYSIS_OP_MASK_BASIC
RzAnalysisDiffEvalCallback diff_eval
RzAnalysisFPBBCallback fingerprint_bb
RzAnalysisDiffFcnCallback diff_fcn
RzAnalysisDiffBBCallback diff_bb
RzAnalysisFPFcnCallback fingerprint_fcn
struct rz_analysis_plugin_t * cur