1. ariovistus
  2. deimos-udis86

Commits

ariovistus  committed eb12d60

we'll just use the designated capi naming scheme instead of fedora.
should be more platform independent.
added rudimentary support for elfutils

  • Participants
  • Parent commits b263150
  • Branches default

Comments (0)

Files changed (3)

File deimos/udis86.d

View file
+// header to udis86 library
+// http://udis86.sourceforge.net/
+// license: BSD 
+// Requires: udis86, udis86-devel
+// I, Ellery wrote this header file
+
+module deimos.udis86;
+
+import std.stdio: FILE, File;
+import std.exception: enforce;
+import std.conv: to;
+
+immutable int UD_EOI = -1;
+immutable int UD_INP_CACHE_SZ = 32;
+immutable int UD_VENDOR_AMD = 0;
+immutable int UD_VENDOR_INTEL = 1;
+alias ud_translate_intel UD_SYN_INTEL;
+alias ud_translate_att UD_SYN_ATT;
+alias enum ud_type 		ud_type_t;
+alias enum ud_mnemonic_code	ud_mnemonic_code_t;
+
+alias ud 		ud_t;
+alias ud_operand 	ud_operand_t;
+
+extern(C){
+
+    enum ud_itab_vendor_index {
+        ITAB__VENDOR_INDX__AMD,
+        ITAB__VENDOR_INDX__INTEL,
+    };
+
+
+    enum ud_itab_mode_index {
+        ITAB__MODE_INDX__16,
+        ITAB__MODE_INDX__32,
+        ITAB__MODE_INDX__64
+    };
+
+
+    enum ud_itab_mod_index {
+        ITAB__MOD_INDX__NOT_11,
+        ITAB__MOD_INDX__11
+    };
+
+
+    enum ud_itab_index {
+        ITAB__0F,
+        ITAB__0F__OP_00__REG,
+        ITAB__0F__OP_01__REG,
+        ITAB__0F__OP_01__REG__OP_00__MOD,
+        ITAB__0F__OP_01__REG__OP_00__MOD__OP_01__RM,
+        ITAB__0F__OP_01__REG__OP_00__MOD__OP_01__RM__OP_01__VENDOR,
+        ITAB__0F__OP_01__REG__OP_00__MOD__OP_01__RM__OP_03__VENDOR,
+        ITAB__0F__OP_01__REG__OP_00__MOD__OP_01__RM__OP_04__VENDOR,
+        ITAB__0F__OP_01__REG__OP_01__MOD,
+        ITAB__0F__OP_01__REG__OP_01__MOD__OP_01__RM,
+        ITAB__0F__OP_01__REG__OP_02__MOD,
+        ITAB__0F__OP_01__REG__OP_03__MOD,
+        ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM,
+        ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_00__VENDOR,
+        ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_01__VENDOR,
+        ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_02__VENDOR,
+        ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_03__VENDOR,
+        ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_04__VENDOR,
+        ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_05__VENDOR,
+        ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_06__VENDOR,
+        ITAB__0F__OP_01__REG__OP_03__MOD__OP_01__RM__OP_07__VENDOR,
+        ITAB__0F__OP_01__REG__OP_04__MOD,
+        ITAB__0F__OP_01__REG__OP_06__MOD,
+        ITAB__0F__OP_01__REG__OP_07__MOD,
+        ITAB__0F__OP_01__REG__OP_07__MOD__OP_01__RM,
+        ITAB__0F__OP_01__REG__OP_07__MOD__OP_01__RM__OP_01__VENDOR,
+        ITAB__0F__OP_0D__REG,
+        ITAB__0F__OP_18__REG,
+        ITAB__0F__OP_71__REG,
+        ITAB__0F__OP_72__REG,
+        ITAB__0F__OP_73__REG,
+        ITAB__0F__OP_AE__REG,
+        ITAB__0F__OP_AE__REG__OP_05__MOD,
+        ITAB__0F__OP_AE__REG__OP_05__MOD__OP_01__RM,
+        ITAB__0F__OP_AE__REG__OP_06__MOD,
+        ITAB__0F__OP_AE__REG__OP_06__MOD__OP_01__RM,
+        ITAB__0F__OP_AE__REG__OP_07__MOD,
+        ITAB__0F__OP_AE__REG__OP_07__MOD__OP_01__RM,
+        ITAB__0F__OP_BA__REG,
+        ITAB__0F__OP_C7__REG,
+        ITAB__0F__OP_C7__REG__OP_00__VENDOR,
+        ITAB__0F__OP_C7__REG__OP_07__VENDOR,
+        ITAB__0F__OP_D9__MOD,
+        ITAB__0F__OP_D9__MOD__OP_01__X87,
+        ITAB__1BYTE,
+        ITAB__1BYTE__OP_60__OSIZE,
+        ITAB__1BYTE__OP_61__OSIZE,
+        ITAB__1BYTE__OP_63__MODE,
+        ITAB__1BYTE__OP_6D__OSIZE,
+        ITAB__1BYTE__OP_6F__OSIZE,
+        ITAB__1BYTE__OP_80__REG,
+        ITAB__1BYTE__OP_81__REG,
+        ITAB__1BYTE__OP_82__REG,
+        ITAB__1BYTE__OP_83__REG,
+        ITAB__1BYTE__OP_8F__REG,
+        ITAB__1BYTE__OP_98__OSIZE,
+        ITAB__1BYTE__OP_99__OSIZE,
+        ITAB__1BYTE__OP_9C__MODE,
+        ITAB__1BYTE__OP_9C__MODE__OP_00__OSIZE,
+        ITAB__1BYTE__OP_9C__MODE__OP_01__OSIZE,
+        ITAB__1BYTE__OP_9D__MODE,
+        ITAB__1BYTE__OP_9D__MODE__OP_00__OSIZE,
+        ITAB__1BYTE__OP_9D__MODE__OP_01__OSIZE,
+        ITAB__1BYTE__OP_A5__OSIZE,
+        ITAB__1BYTE__OP_A7__OSIZE,
+        ITAB__1BYTE__OP_AB__OSIZE,
+        ITAB__1BYTE__OP_AD__OSIZE,
+        ITAB__1BYTE__OP_AE__MOD,
+        ITAB__1BYTE__OP_AE__MOD__OP_00__REG,
+        ITAB__1BYTE__OP_AF__OSIZE,
+        ITAB__1BYTE__OP_C0__REG,
+        ITAB__1BYTE__OP_C1__REG,
+        ITAB__1BYTE__OP_C6__REG,
+        ITAB__1BYTE__OP_C7__REG,
+        ITAB__1BYTE__OP_CF__OSIZE,
+        ITAB__1BYTE__OP_D0__REG,
+        ITAB__1BYTE__OP_D1__REG,
+        ITAB__1BYTE__OP_D2__REG,
+        ITAB__1BYTE__OP_D3__REG,
+        ITAB__1BYTE__OP_D8__MOD,
+        ITAB__1BYTE__OP_D8__MOD__OP_00__REG,
+        ITAB__1BYTE__OP_D8__MOD__OP_01__X87,
+        ITAB__1BYTE__OP_D9__MOD,
+        ITAB__1BYTE__OP_D9__MOD__OP_00__REG,
+        ITAB__1BYTE__OP_D9__MOD__OP_01__X87,
+        ITAB__1BYTE__OP_DA__MOD,
+        ITAB__1BYTE__OP_DA__MOD__OP_00__REG,
+        ITAB__1BYTE__OP_DA__MOD__OP_01__X87,
+        ITAB__1BYTE__OP_DB__MOD,
+        ITAB__1BYTE__OP_DB__MOD__OP_00__REG,
+        ITAB__1BYTE__OP_DB__MOD__OP_01__X87,
+        ITAB__1BYTE__OP_DC__MOD,
+        ITAB__1BYTE__OP_DC__MOD__OP_00__REG,
+        ITAB__1BYTE__OP_DC__MOD__OP_01__X87,
+        ITAB__1BYTE__OP_DD__MOD,
+        ITAB__1BYTE__OP_DD__MOD__OP_00__REG,
+        ITAB__1BYTE__OP_DD__MOD__OP_01__X87,
+        ITAB__1BYTE__OP_DE__MOD,
+        ITAB__1BYTE__OP_DE__MOD__OP_00__REG,
+        ITAB__1BYTE__OP_DE__MOD__OP_01__X87,
+        ITAB__1BYTE__OP_DF__MOD,
+        ITAB__1BYTE__OP_DF__MOD__OP_00__REG,
+        ITAB__1BYTE__OP_DF__MOD__OP_01__X87,
+        ITAB__1BYTE__OP_E3__ASIZE,
+        ITAB__1BYTE__OP_F6__REG,
+        ITAB__1BYTE__OP_F7__REG,
+        ITAB__1BYTE__OP_FE__REG,
+        ITAB__1BYTE__OP_FF__REG,
+        ITAB__3DNOW,
+        ITAB__PFX_SSE66__0F,
+        ITAB__PFX_SSE66__0F__OP_71__REG,
+        ITAB__PFX_SSE66__0F__OP_72__REG,
+        ITAB__PFX_SSE66__0F__OP_73__REG,
+        ITAB__PFX_SSE66__0F__OP_C7__REG,
+        ITAB__PFX_SSE66__0F__OP_C7__REG__OP_00__VENDOR,
+        ITAB__PFX_SSEF2__0F,
+        ITAB__PFX_SSEF3__0F,
+        ITAB__PFX_SSEF3__0F__OP_C7__REG,
+        ITAB__PFX_SSEF3__0F__OP_C7__REG__OP_07__VENDOR,
+    };
+
+
+    enum ud_mnemonic_code {
+        UD_I3dnow,
+        UD_Iaaa,
+        UD_Iaad,
+        UD_Iaam,
+        UD_Iaas,
+        UD_Iadc,
+        UD_Iadd,
+        UD_Iaddpd,
+        UD_Iaddps,
+        UD_Iaddsd,
+        UD_Iaddss,
+        UD_Iaddsubpd,
+        UD_Iaddsubps,
+        UD_Iand,
+        UD_Iandpd,
+        UD_Iandps,
+        UD_Iandnpd,
+        UD_Iandnps,
+        UD_Iarpl,
+        UD_Imovsxd,
+        UD_Ibound,
+        UD_Ibsf,
+        UD_Ibsr,
+        UD_Ibswap,
+        UD_Ibt,
+        UD_Ibtc,
+        UD_Ibtr,
+        UD_Ibts,
+        UD_Icall,
+        UD_Icbw,
+        UD_Icwde,
+        UD_Icdqe,
+        UD_Iclc,
+        UD_Icld,
+        UD_Iclflush,
+        UD_Iclgi,
+        UD_Icli,
+        UD_Iclts,
+        UD_Icmc,
+        UD_Icmovo,
+        UD_Icmovno,
+        UD_Icmovb,
+        UD_Icmovae,
+        UD_Icmovz,
+        UD_Icmovnz,
+        UD_Icmovbe,
+        UD_Icmova,
+        UD_Icmovs,
+        UD_Icmovns,
+        UD_Icmovp,
+        UD_Icmovnp,
+        UD_Icmovl,
+        UD_Icmovge,
+        UD_Icmovle,
+        UD_Icmovg,
+        UD_Icmp,
+        UD_Icmppd,
+        UD_Icmpps,
+        UD_Icmpsb,
+        UD_Icmpsw,
+        UD_Icmpsd,
+        UD_Icmpsq,
+        UD_Icmpss,
+        UD_Icmpxchg,
+        UD_Icmpxchg8b,
+        UD_Icomisd,
+        UD_Icomiss,
+        UD_Icpuid,
+        UD_Icvtdq2pd,
+        UD_Icvtdq2ps,
+        UD_Icvtpd2dq,
+        UD_Icvtpd2pi,
+        UD_Icvtpd2ps,
+        UD_Icvtpi2ps,
+        UD_Icvtpi2pd,
+        UD_Icvtps2dq,
+        UD_Icvtps2pi,
+        UD_Icvtps2pd,
+        UD_Icvtsd2si,
+        UD_Icvtsd2ss,
+        UD_Icvtsi2ss,
+        UD_Icvtss2si,
+        UD_Icvtss2sd,
+        UD_Icvttpd2pi,
+        UD_Icvttpd2dq,
+        UD_Icvttps2dq,
+        UD_Icvttps2pi,
+        UD_Icvttsd2si,
+        UD_Icvtsi2sd,
+        UD_Icvttss2si,
+        UD_Icwd,
+        UD_Icdq,
+        UD_Icqo,
+        UD_Idaa,
+        UD_Idas,
+        UD_Idec,
+        UD_Idiv,
+        UD_Idivpd,
+        UD_Idivps,
+        UD_Idivsd,
+        UD_Idivss,
+        UD_Iemms,
+        UD_Ienter,
+        UD_If2xm1,
+        UD_Ifabs,
+        UD_Ifadd,
+        UD_Ifaddp,
+        UD_Ifbld,
+        UD_Ifbstp,
+        UD_Ifchs,
+        UD_Ifclex,
+        UD_Ifcmovb,
+        UD_Ifcmove,
+        UD_Ifcmovbe,
+        UD_Ifcmovu,
+        UD_Ifcmovnb,
+        UD_Ifcmovne,
+        UD_Ifcmovnbe,
+        UD_Ifcmovnu,
+        UD_Ifucomi,
+        UD_Ifcom,
+        UD_Ifcom2,
+        UD_Ifcomp3,
+        UD_Ifcomi,
+        UD_Ifucomip,
+        UD_Ifcomip,
+        UD_Ifcomp,
+        UD_Ifcomp5,
+        UD_Ifcompp,
+        UD_Ifcos,
+        UD_Ifdecstp,
+        UD_Ifdiv,
+        UD_Ifdivp,
+        UD_Ifdivr,
+        UD_Ifdivrp,
+        UD_Ifemms,
+        UD_Iffree,
+        UD_Iffreep,
+        UD_Ificom,
+        UD_Ificomp,
+        UD_Ifild,
+        UD_Ifncstp,
+        UD_Ifninit,
+        UD_Ifiadd,
+        UD_Ifidivr,
+        UD_Ifidiv,
+        UD_Ifisub,
+        UD_Ifisubr,
+        UD_Ifist,
+        UD_Ifistp,
+        UD_Ifisttp,
+        UD_Ifld,
+        UD_Ifld1,
+        UD_Ifldl2t,
+        UD_Ifldl2e,
+        UD_Ifldlpi,
+        UD_Ifldlg2,
+        UD_Ifldln2,
+        UD_Ifldz,
+        UD_Ifldcw,
+        UD_Ifldenv,
+        UD_Ifmul,
+        UD_Ifmulp,
+        UD_Ifimul,
+        UD_Ifnop,
+        UD_Ifpatan,
+        UD_Ifprem,
+        UD_Ifprem1,
+        UD_Ifptan,
+        UD_Ifrndint,
+        UD_Ifrstor,
+        UD_Ifnsave,
+        UD_Ifscale,
+        UD_Ifsin,
+        UD_Ifsincos,
+        UD_Ifsqrt,
+        UD_Ifstp,
+        UD_Ifstp1,
+        UD_Ifstp8,
+        UD_Ifstp9,
+        UD_Ifst,
+        UD_Ifnstcw,
+        UD_Ifnstenv,
+        UD_Ifnstsw,
+        UD_Ifsub,
+        UD_Ifsubp,
+        UD_Ifsubr,
+        UD_Ifsubrp,
+        UD_Iftst,
+        UD_Ifucom,
+        UD_Ifucomp,
+        UD_Ifucompp,
+        UD_Ifxam,
+        UD_Ifxch,
+        UD_Ifxch4,
+        UD_Ifxch7,
+        UD_Ifxrstor,
+        UD_Ifxsave,
+        UD_Ifpxtract,
+        UD_Ifyl2x,
+        UD_Ifyl2xp1,
+        UD_Ihaddpd,
+        UD_Ihaddps,
+        UD_Ihlt,
+        UD_Ihsubpd,
+        UD_Ihsubps,
+        UD_Iidiv,
+        UD_Iin,
+        UD_Iimul,
+        UD_Iinc,
+        UD_Iinsb,
+        UD_Iinsw,
+        UD_Iinsd,
+        UD_Iint1,
+        UD_Iint3,
+        UD_Iint,
+        UD_Iinto,
+        UD_Iinvd,
+        UD_Iinvlpg,
+        UD_Iinvlpga,
+        UD_Iiretw,
+        UD_Iiretd,
+        UD_Iiretq,
+        UD_Ijo,
+        UD_Ijno,
+        UD_Ijb,
+        UD_Ijae,
+        UD_Ijz,
+        UD_Ijnz,
+        UD_Ijbe,
+        UD_Ija,
+        UD_Ijs,
+        UD_Ijns,
+        UD_Ijp,
+        UD_Ijnp,
+        UD_Ijl,
+        UD_Ijge,
+        UD_Ijle,
+        UD_Ijg,
+        UD_Ijcxz,
+        UD_Ijecxz,
+        UD_Ijrcxz,
+        UD_Ijmp,
+        UD_Ilahf,
+        UD_Ilar,
+        UD_Ilddqu,
+        UD_Ildmxcsr,
+        UD_Ilds,
+        UD_Ilea,
+        UD_Iles,
+        UD_Ilfs,
+        UD_Ilgs,
+        UD_Ilidt,
+        UD_Ilss,
+        UD_Ileave,
+        UD_Ilfence,
+        UD_Ilgdt,
+        UD_Illdt,
+        UD_Ilmsw,
+        UD_Ilock,
+        UD_Ilodsb,
+        UD_Ilodsw,
+        UD_Ilodsd,
+        UD_Ilodsq,
+        UD_Iloopnz,
+        UD_Iloope,
+        UD_Iloop,
+        UD_Ilsl,
+        UD_Iltr,
+        UD_Imaskmovq,
+        UD_Imaxpd,
+        UD_Imaxps,
+        UD_Imaxsd,
+        UD_Imaxss,
+        UD_Imfence,
+        UD_Iminpd,
+        UD_Iminps,
+        UD_Iminsd,
+        UD_Iminss,
+        UD_Imonitor,
+        UD_Imov,
+        UD_Imovapd,
+        UD_Imovaps,
+        UD_Imovd,
+        UD_Imovddup,
+        UD_Imovdqa,
+        UD_Imovdqu,
+        UD_Imovdq2q,
+        UD_Imovhpd,
+        UD_Imovhps,
+        UD_Imovlhps,
+        UD_Imovlpd,
+        UD_Imovlps,
+        UD_Imovhlps,
+        UD_Imovmskpd,
+        UD_Imovmskps,
+        UD_Imovntdq,
+        UD_Imovnti,
+        UD_Imovntpd,
+        UD_Imovntps,
+        UD_Imovntq,
+        UD_Imovq,
+        UD_Imovqa,
+        UD_Imovq2dq,
+        UD_Imovsb,
+        UD_Imovsw,
+        UD_Imovsd,
+        UD_Imovsq,
+        UD_Imovsldup,
+        UD_Imovshdup,
+        UD_Imovss,
+        UD_Imovsx,
+        UD_Imovupd,
+        UD_Imovups,
+        UD_Imovzx,
+        UD_Imul,
+        UD_Imulpd,
+        UD_Imulps,
+        UD_Imulsd,
+        UD_Imulss,
+        UD_Imwait,
+        UD_Ineg,
+        UD_Inop,
+        UD_Inot,
+        UD_Ior,
+        UD_Iorpd,
+        UD_Iorps,
+        UD_Iout,
+        UD_Ioutsb,
+        UD_Ioutsw,
+        UD_Ioutsd,
+        UD_Ioutsq,
+        UD_Ipacksswb,
+        UD_Ipackssdw,
+        UD_Ipackuswb,
+        UD_Ipaddb,
+        UD_Ipaddw,
+        UD_Ipaddq,
+        UD_Ipaddsb,
+        UD_Ipaddsw,
+        UD_Ipaddusb,
+        UD_Ipaddusw,
+        UD_Ipand,
+        UD_Ipandn,
+        UD_Ipause,
+        UD_Ipavgb,
+        UD_Ipavgw,
+        UD_Ipcmpeqb,
+        UD_Ipcmpeqw,
+        UD_Ipcmpeqd,
+        UD_Ipcmpgtb,
+        UD_Ipcmpgtw,
+        UD_Ipcmpgtd,
+        UD_Ipextrw,
+        UD_Ipinsrw,
+        UD_Ipmaddwd,
+        UD_Ipmaxsw,
+        UD_Ipmaxub,
+        UD_Ipminsw,
+        UD_Ipminub,
+        UD_Ipmovmskb,
+        UD_Ipmulhuw,
+        UD_Ipmulhw,
+        UD_Ipmullw,
+        UD_Ipmuludq,
+        UD_Ipop,
+        UD_Ipopa,
+        UD_Ipopad,
+        UD_Ipopfw,
+        UD_Ipopfd,
+        UD_Ipopfq,
+        UD_Ipor,
+        UD_Iprefetch,
+        UD_Iprefetchnta,
+        UD_Iprefetcht0,
+        UD_Iprefetcht1,
+        UD_Iprefetcht2,
+        UD_Ipsadbw,
+        UD_Ipshufd,
+        UD_Ipshufhw,
+        UD_Ipshuflw,
+        UD_Ipshufw,
+        UD_Ipslldq,
+        UD_Ipsllw,
+        UD_Ipslld,
+        UD_Ipsllq,
+        UD_Ipsraw,
+        UD_Ipsrad,
+        UD_Ipsrlw,
+        UD_Ipsrld,
+        UD_Ipsrlq,
+        UD_Ipsrldq,
+        UD_Ipsubb,
+        UD_Ipsubw,
+        UD_Ipsubd,
+        UD_Ipsubq,
+        UD_Ipsubsb,
+        UD_Ipsubsw,
+        UD_Ipsubusb,
+        UD_Ipsubusw,
+        UD_Ipunpckhbw,
+        UD_Ipunpckhwd,
+        UD_Ipunpckhdq,
+        UD_Ipunpckhqdq,
+        UD_Ipunpcklbw,
+        UD_Ipunpcklwd,
+        UD_Ipunpckldq,
+        UD_Ipunpcklqdq,
+        UD_Ipi2fw,
+        UD_Ipi2fd,
+        UD_Ipf2iw,
+        UD_Ipf2id,
+        UD_Ipfnacc,
+        UD_Ipfpnacc,
+        UD_Ipfcmpge,
+        UD_Ipfmin,
+        UD_Ipfrcp,
+        UD_Ipfrsqrt,
+        UD_Ipfsub,
+        UD_Ipfadd,
+        UD_Ipfcmpgt,
+        UD_Ipfmax,
+        UD_Ipfrcpit1,
+        UD_Ipfrspit1,
+        UD_Ipfsubr,
+        UD_Ipfacc,
+        UD_Ipfcmpeq,
+        UD_Ipfmul,
+        UD_Ipfrcpit2,
+        UD_Ipmulhrw,
+        UD_Ipswapd,
+        UD_Ipavgusb,
+        UD_Ipush,
+        UD_Ipusha,
+        UD_Ipushad,
+        UD_Ipushfw,
+        UD_Ipushfd,
+        UD_Ipushfq,
+        UD_Ipxor,
+        UD_Ircl,
+        UD_Ircr,
+        UD_Irol,
+        UD_Iror,
+        UD_Ircpps,
+        UD_Ircpss,
+        UD_Irdmsr,
+        UD_Irdpmc,
+        UD_Irdtsc,
+        UD_Irdtscp,
+        UD_Irepne,
+        UD_Irep,
+        UD_Iret,
+        UD_Iretf,
+        UD_Irsm,
+        UD_Irsqrtps,
+        UD_Irsqrtss,
+        UD_Isahf,
+        UD_Isal,
+        UD_Isalc,
+        UD_Isar,
+        UD_Ishl,
+        UD_Ishr,
+        UD_Isbb,
+        UD_Iscasb,
+        UD_Iscasw,
+        UD_Iscasd,
+        UD_Iscasq,
+        UD_Iseto,
+        UD_Isetno,
+        UD_Isetb,
+        UD_Isetnb,
+        UD_Isetz,
+        UD_Isetnz,
+        UD_Isetbe,
+        UD_Iseta,
+        UD_Isets,
+        UD_Isetns,
+        UD_Isetp,
+        UD_Isetnp,
+        UD_Isetl,
+        UD_Isetge,
+        UD_Isetle,
+        UD_Isetg,
+        UD_Isfence,
+        UD_Isgdt,
+        UD_Ishld,
+        UD_Ishrd,
+        UD_Ishufpd,
+        UD_Ishufps,
+        UD_Isidt,
+        UD_Isldt,
+        UD_Ismsw,
+        UD_Isqrtps,
+        UD_Isqrtpd,
+        UD_Isqrtsd,
+        UD_Isqrtss,
+        UD_Istc,
+        UD_Istd,
+        UD_Istgi,
+        UD_Isti,
+        UD_Iskinit,
+        UD_Istmxcsr,
+        UD_Istosb,
+        UD_Istosw,
+        UD_Istosd,
+        UD_Istosq,
+        UD_Istr,
+        UD_Isub,
+        UD_Isubpd,
+        UD_Isubps,
+        UD_Isubsd,
+        UD_Isubss,
+        UD_Iswapgs,
+        UD_Isyscall,
+        UD_Isysenter,
+        UD_Isysexit,
+        UD_Isysret,
+        UD_Itest,
+        UD_Iucomisd,
+        UD_Iucomiss,
+        UD_Iud2,
+        UD_Iunpckhpd,
+        UD_Iunpckhps,
+        UD_Iunpcklps,
+        UD_Iunpcklpd,
+        UD_Iverr,
+        UD_Iverw,
+        UD_Ivmcall,
+        UD_Ivmclear,
+        UD_Ivmxon,
+        UD_Ivmptrld,
+        UD_Ivmptrst,
+        UD_Ivmresume,
+        UD_Ivmxoff,
+        UD_Ivmrun,
+        UD_Ivmmcall,
+        UD_Ivmload,
+        UD_Ivmsave,
+        UD_Iwait,
+        UD_Iwbinvd,
+        UD_Iwrmsr,
+        UD_Ixadd,
+        UD_Ixchg,
+        UD_Ixlatb,
+        UD_Ixor,
+        UD_Ixorpd,
+        UD_Ixorps,
+        UD_Idb,
+        UD_Iinvalid,
+        UD_Id3vil,
+        UD_Ina,
+        UD_Igrp_reg,
+        UD_Igrp_rm,
+        UD_Igrp_vendor,
+        UD_Igrp_x87,
+        UD_Igrp_mode,
+        UD_Igrp_osize,
+        UD_Igrp_asize,
+        UD_Igrp_mod,
+        UD_Inone,
+    };
+
+    enum ud_type
+    {
+        UD_NONE,
+
+        /* 8 bit GPRs */
+        UD_R_AL,	UD_R_CL,	UD_R_DL,	UD_R_BL,
+        UD_R_AH,	UD_R_CH,	UD_R_DH,	UD_R_BH,
+        UD_R_SPL,	UD_R_BPL,	UD_R_SIL,	UD_R_DIL,
+        UD_R_R8B,	UD_R_R9B,	UD_R_R10B,	UD_R_R11B,
+        UD_R_R12B,	UD_R_R13B,	UD_R_R14B,	UD_R_R15B,
+
+        /* 16 bit GPRs */
+        UD_R_AX,	UD_R_CX,	UD_R_DX,	UD_R_BX,
+        UD_R_SP,	UD_R_BP,	UD_R_SI,	UD_R_DI,
+        UD_R_R8W,	UD_R_R9W,	UD_R_R10W,	UD_R_R11W,
+        UD_R_R12W,	UD_R_R13W,	UD_R_R14W,	UD_R_R15W,
+
+        /* 32 bit GPRs */
+        UD_R_EAX,	UD_R_ECX,	UD_R_EDX,	UD_R_EBX,
+        UD_R_ESP,	UD_R_EBP,	UD_R_ESI,	UD_R_EDI,
+        UD_R_R8D,	UD_R_R9D,	UD_R_R10D,	UD_R_R11D,
+        UD_R_R12D,	UD_R_R13D,	UD_R_R14D,	UD_R_R15D,
+
+        /* 64 bit GPRs */
+        UD_R_RAX,	UD_R_RCX,	UD_R_RDX,	UD_R_RBX,
+        UD_R_RSP,	UD_R_RBP,	UD_R_RSI,	UD_R_RDI,
+        UD_R_R8,	UD_R_R9,	UD_R_R10,	UD_R_R11,
+        UD_R_R12,	UD_R_R13,	UD_R_R14,	UD_R_R15,
+
+        /* segment registers */
+        UD_R_ES,	UD_R_CS,	UD_R_SS,	UD_R_DS,
+        UD_R_FS,	UD_R_GS,	
+
+        /* control registers*/
+        UD_R_CR0,	UD_R_CR1,	UD_R_CR2,	UD_R_CR3,
+        UD_R_CR4,	UD_R_CR5,	UD_R_CR6,	UD_R_CR7,
+        UD_R_CR8,	UD_R_CR9,	UD_R_CR10,	UD_R_CR11,
+        UD_R_CR12,	UD_R_CR13,	UD_R_CR14,	UD_R_CR15,
+
+        /* debug registers */
+        UD_R_DR0,	UD_R_DR1,	UD_R_DR2,	UD_R_DR3,
+        UD_R_DR4,	UD_R_DR5,	UD_R_DR6,	UD_R_DR7,
+        UD_R_DR8,	UD_R_DR9,	UD_R_DR10,	UD_R_DR11,
+        UD_R_DR12,	UD_R_DR13,	UD_R_DR14,	UD_R_DR15,
+
+        /* mmx registers */
+        UD_R_MM0,	UD_R_MM1,	UD_R_MM2,	UD_R_MM3,
+        UD_R_MM4,	UD_R_MM5,	UD_R_MM6,	UD_R_MM7,
+
+        /* x87 registers */
+        UD_R_ST0,	UD_R_ST1,	UD_R_ST2,	UD_R_ST3,
+        UD_R_ST4,	UD_R_ST5,	UD_R_ST6,	UD_R_ST7, 
+
+        /* extended multimedia registers */
+        UD_R_XMM0,	UD_R_XMM1,	UD_R_XMM2,	UD_R_XMM3,
+        UD_R_XMM4,	UD_R_XMM5,	UD_R_XMM6,	UD_R_XMM7,
+        UD_R_XMM8,	UD_R_XMM9,	UD_R_XMM10,	UD_R_XMM11,
+        UD_R_XMM12,	UD_R_XMM13,	UD_R_XMM14,	UD_R_XMM15,
+
+        UD_R_RIP,
+
+        /* Operand Types */
+        UD_OP_REG,	UD_OP_MEM,	UD_OP_PTR,	UD_OP_IMM,	
+        UD_OP_JIMM,	UD_OP_CONST
+    };
+
+    struct ud_operand 
+    {
+        ud_type		        type;
+        ubyte		        size;
+        union _lval_ {
+            byte		sbyte;
+            ubyte		ubyte_;
+            short		sword;
+            ushort	        uword;
+            int		        sdword;
+            uint    	        udword;
+            long   		sqword;
+            ulong   	        uqword;
+
+            struct _ptr_ {
+                ushort   seg;
+                uint     off;
+            };
+            _ptr_ ptr;
+        } ;
+        _lval_ lval;
+
+        ud_type		        base;
+        ud_type		        index;
+        ubyte		        offset;
+        ubyte		        scale;	
+    };
+
+    struct ud
+    {
+        int function(ud*)       inp_hook;
+        ubyte		        inp_curr;
+        ubyte		        inp_fill;
+        FILE*			inp_file;
+        ubyte		        inp_ctr;
+        ubyte*		        inp_buff;
+        ubyte*		        inp_buff_end;
+        ubyte		        inp_end;
+        void function(ud*)      translator;
+        ulong		        insn_offset;
+        char[32]		insn_hexcode;
+        char[64]		insn_buffer;
+        uint                    insn_fill;
+        ubyte		        dis_mode;
+        ulong		        pc;
+        ubyte		        vendor;
+        void*	                mapen;
+        ud_mnemonic_code	mnemonic;
+        ud_operand[3]	        operand;
+        ubyte		        error;
+        ubyte	 	        pfx_rex;
+        ubyte 		        pfx_seg;
+        ubyte 		        pfx_opr;
+        ubyte 		        pfx_adr;
+        ubyte 		        pfx_lock;
+        ubyte 		        pfx_rep;
+        ubyte 		        pfx_repe;
+        ubyte 		        pfx_repne;
+        ubyte 		        pfx_insn;
+        ubyte		        default64;
+        ubyte		        opr_mode;
+        ubyte		        adr_mode;
+        ubyte		        br_far;
+        ubyte		        br_near;
+        ubyte		        implicit_addr;
+        ubyte		        c1;
+        ubyte		        c2;
+        ubyte		        c3;
+        ubyte[256] 		inp_cache;
+        ubyte[64]		inp_sess;
+        void*                   itab_entry;
+    };
+
+
+    //
+    void ud_init(ud*);
+
+    //
+    void ud_set_mode(ud*, ubyte);
+
+    //
+    void ud_set_pc(ud*, ulong);
+
+    //
+    void ud_set_input_hook(ud*, int function(ud*));
+
+    //
+    void ud_set_input_buffer(ud*, ubyte*, size_t);
+
+    //#ifndef __UD_STANDALONE__
+    void ud_set_input_file(ud*, FILE*);
+    //#endif /* __UD_STANDALONE__ */
+
+    //
+    void ud_set_vendor(ud*, uint);
+
+    //
+    void ud_set_syntax(ud*, void function(ud*));
+
+    //
+    void ud_input_skip(ud*, size_t);
+
+    // ????!?!
+    int ud_input_end(ud*);
+
+    uint ud_decode(ud*);
+
+    //
+    uint ud_disassemble(ud*);
+
+    void ud_translate_intel(ud*);
+
+    void ud_translate_att(ud*);
+
+    //
+    char* ud_insn_asm(ud* u);
+
+    //
+    ubyte* ud_insn_ptr(ud* u);
+
+    //
+    ulong ud_insn_off(ud*);
+
+    //
+    char* ud_insn_hex(ud*);
+
+    uint ud_insn_len(ud* u);
+
+    const(char*) ud_lookup_mnemonic(ud_mnemonic_code c);
+
+}
+

File test/udis_test.d

View file
-import fedora.udis86;
+import deimos.udis86;
+import wrapper.udis86;
+
 void main(){
 }

File wrapper/udis86.d

View file
+module wrapper.udis86;
+
+import deimos.udis86;
+
+template C_function(R,Params...){
+    alias extern(C) R function(Params) C_function;
+}
+
+// wrapper around udis86 api
+class UDis{
+    ud obj;
+    this(File inf){
+        ud_init(&obj);
+        input_file = inf;
+        mode = 32;
+        syntax = &ud_translate_intel;
+    }
+    this(ubyte[] buf){
+        ud_init(&obj);
+        input_buffer = buf;
+        mode = 32;
+        syntax = &ud_translate_intel;
+    }
+    this(C_function!(int, ud*) hook){
+        ud_init(&obj);
+        input_hook = hook;
+        mode = 32;
+        syntax = &ud_translate_intel;
+    }
+    @property{
+        void input_file(File f){ 
+            ud_set_input_file(&obj, f.getFP()); 
+        }
+        void input_buffer(ubyte[] buf){ 
+            ud_set_input_buffer(&obj, buf.ptr, buf.length); 
+        }
+        void input_hook(C_function!(int,ud*) hook){
+            ud_set_input_hook(&obj, hook);
+        }
+        void mode(int m) { 
+            enforce(m == 16 || m == 32 || m == 64);
+            ud_set_mode(&obj, cast(ubyte) m); 
+        }
+        void syntax (C_function!(void, ud*) translator) { 
+            ud_set_syntax(&obj, translator); 
+        }
+        void pc(ulong _pc){ ud_set_pc(&obj, _pc); }
+
+        void vendor(uint v){ 
+            enforce(v == UD_VENDOR_AMD || v == UD_VENDOR_INTEL);
+            ud_set_vendor(&obj, v);
+        }
+        ubyte[] buffer(){
+            return ud_insn_ptr(&obj)[0 .. ud_insn_len(&obj)];
+        }
+        ulong insn_off(){
+            return obj.insn_offset;
+        }
+        string hexstring(){
+            return to!string(obj.insn_hexcode.ptr);
+        }
+        string asmstring(){
+            return to!string(obj.insn_buffer.ptr);
+        }
+    }
+
+    void input_skip(size_t n){
+        ud_input_skip(&obj, n);
+    }
+
+    uint disassemble(){
+        return ud_disassemble(&obj);
+    }
+
+}