http://andrewl.us Black-Eye and Bart^XT already explained this technique... Miracl functions have tracing feature, from mrcore.c: epoint* epoint_init(_MIPDO_ ) { /* initialise epoint to point at infinity. */ epoint *p; char *ptr; #ifdef MR_OS_THREADS miracl *mr_mip=get_mip(); #endif if (mr_mip->ERNUM) return NULL; MR_IN(96) <---- HERE Function mr_berror() from crcore.c can use this data to print stack trace if problem. From miracl.h we see that if MR_STRIPPED_DOWN is not defined, MR_IN does: #ifdef MR_STRIPPED_DOWN #define MR_OUT #define MR_IN(N) #else #define MR_OUT mr_mip->depth--; #define MR_IN(N) mr_mip->depth++; if (mr_mip->depthtrace[mr_mip->depth]=(N); if (mr_mip->TRACER) mr_track(_MIPPO_); } #endif So here is example function from IDA listing, reconciled with the MACRO above: .text:00404530 sub_404530 proc near ; CODE XREF: sub_401720+EEp .text:00404530 ; sub_401890+384p ... .text:00404530 mov edx, dword_42496C .text:00404536 cmp dword ptr [edx+22Ch], 0 ; get mr_mip .text:0040453D push ebx .text:0040453E push ebp .text:0040453F push esi .text:00404540 mov esi, eax .text:00404542 mov ebx, ecx .text:00404544 mov ebp, 10h .text:00404549 jnz loc_404697 .text:0040454F inc dword ptr [edx+20h] ; mr_mip->depth++; .text:0040454F ; .text:00404552 mov eax, [edx+20h] .text:00404555 cmp eax, 18h ; if (mr_mip->depthtrace[mr_mip->depth]=(N) .text:0040455A ; .text:00404562 cmp dword ptr [edx+244h], 0 ; if (mr_mip->TRACER) .text:00404569 jz short loc_404576 .text:0040456B call sub_4021A0 ; mr_track(_MIPPO_) .text:00404570 mov edx, dword_42496C So look that up in the below table, we find that this is bytes_to_big() MIRACL MAGIC NUMBERS TABLE: by bLaCk-eye from an original ideea by bF!^k23 innum equ 01h otnum equ 02h jack equ 03h normalise equ 04h multiply equ 05h divide equ 06h incr equ 07h decr equ 08h premult equ 09h subdiv equ 0Ah fdsize equ 0Bh egcd equ 0Ch cbase equ 0Dh cinnum equ 0Eh cotnum equ 0Fh nroot equ 10h power equ 11h powmod equ 12h bigdig equ 13h bigrand equ 14h nxprime equ 15h isprime equ 16h mirvar equ 17h mad equ 18h multi_inverse equ 19h putdig equ 1Ah add equ 1Bh subtract equ 1Ch mirsys equ 1Dh xgcd equ 1Eh fpack equ 1Fh dconv equ 20h mr_shift equ 21h mround equ 22h fmul equ 23h fdiv equ 24h fadd equ 25h fsub equ 26h fcomp equ 27h fconv equ 28h frecip equ 29h fpmul equ 2Ah fincr equ 2Bh ftrunc equ 2Dh frand equ 2Eh sftbit equ 2Fh build equ 30h logb2 equ 31h expint equ 32h fpower equ 33h froot equ 34h fpi equ 35h fexp equ 36h flog equ 37h fpowf equ 38h ftan equ 39h fatan equ 3Ah fsin equ 3Bh fasin equ 3Ch fcos equ 3Dh facos equ 3Eh ftanh equ 3Fh fatanh equ 40h fsinh equ 41h fasinh equ 42h fcosh equ 43h facosh equ 44h flop equ 45h gprime equ 46h powltr equ 47h fft_mult equ 48h crt_init equ 49h crt equ 4Ah otstr equ 4Bh instr equ 4Ch cotstr equ 4Dh cinstr equ 4Eh powmod2 equ 4Fh prepare_monty equ 50h nres equ 51h redc equ 52h nres_modmult equ 53h nres_powmod equ 54h nres_moddiv equ 55h nres_powltr equ 56h divisible equ 57h remain equ 58h fmodulo equ 59h nres_modadd equ 5Ah nres_modsub equ 5Bh nres_negate equ 5Ch ecurve_init equ 5Dh ecurve_add equ 5Eh ecurve_mult equ 5Fh epoint_init equ 60h epoint_set equ 61h epoint_get equ 62h nres_powmod2 equ 63h nres_sqroot equ 64h sqroot equ 65h nres_premult equ 66h ecurve_mult2 equ 67h ecurve_sub equ 68h trial_division equ 69h nxsafeprime equ 6Ah nres_lucas equ 6Bh lucas equ 6Ch brick_init equ 6Dh pow_brick equ 6Eh set_user_function equ 6Fh nres_powmodn equ 70h powmodn equ 71h ecurve_multn equ 72h ebrick_init equ 73h mul_brick equ 74h epoint_norm equ 75h nres_multi_inverse equ 76h nres_dotprod equ 78h epoint_negate equ 79h ecurve_multi_add equ 7Ah ecurve2_init equ 7Bh epoint2_init equ 7Ch epoint2_set equ 7Dh epoint2_norm equ 7Eh epoint2_get equ 7Fh epoint2_comp equ 80h ecurve2_add equ 81h epoint2_negate equ 82h ecurve2_sub equ 83h ecurve2_multi_add equ 84h ecurve2_mult equ 85h ecurve2_multn equ 86h ecurve2_mult2 equ 87h ebrick2_init equ 88h mul2_brick equ 89h prepare_basis equ 8Ah strong_bigrand equ 8Bh bytes_to_big equ 8Ch big_to_bytes equ 8Dh set_io_buffer_size equ 8Eh