Mercurial > projects > ddbg_continued
view src/udis86.d @ 1:4a9dcbd9e54f
-files of 0.13 beta
-fixes so that it now compiles with the current dmd version
author | marton@basel.hu |
---|---|
date | Tue, 05 Apr 2011 20:44:01 +0200 |
parents | |
children |
line wrap: on
line source
/* ----------------------------------------------------------------------------- * udis86.h * * converted to D by Jascha Wetzel * * Copyright (c) 2002, 2003, 2004 Vivek Mohan <vivek@sig9.com> * All rights reserved. See (LICENSE) * ----------------------------------------------------------------------------- */ extern(C) { struct __nt_context { int esp; int info; int prev; int handler; int stable; int sindex; int ebp; }; /* ----------------------------------------------------------------------------- * types.h * * Copyright (c) 2006, Vivek Mohan <vivek@sig9.com> * All rights reserved. See LICENSE * ----------------------------------------------------------------------------- */ import std.c.stdio; extern const char* ud_mnemonics[]; enum ud_mnemonic_code { UD_Iaaa, UD_Iaad, UD_Iaam, UD_Iaas, UD_Iadc, UD_Iadd, UD_Iaddpd, UD_Iaddps, UD_Iaddsd, UD_Iaddss, UD_Iand, UD_Iandnpd, UD_Iandnps, UD_Iandpd, UD_Iandps, UD_Iarpl, UD_Ibound, UD_Ibsf, UD_Ibsr, UD_Ibswap, UD_Ibt, UD_Ibtc, UD_Ibtr, UD_Ibts, UD_Icall, UD_Icbw, UD_Icdqe, UD_Iclc, UD_Icld, UD_Iclflush, UD_Icli, UD_Iclts, UD_Icmc, UD_Icmovo, UD_Icmovno, UD_Icmovb, UD_Icmovnb, UD_Icmovz, UD_Icmovnz, UD_Icmovbe, UD_Icmovnbe, UD_Icmovs, UD_Icmovns, UD_Icmovp, UD_Icmovnp, UD_Icmovl, UD_Icmovnl, UD_Icmovle, UD_Icmovnle, UD_Icmp, UD_Icmppd, UD_Icmpps, UD_Icmps, UD_Icmpsb, UD_Icmpsd, UD_Icmpsq, UD_Icmpss, UD_Icmpsw, UD_Icmpxchg, UD_Icmpxchg8b, UD_Icomisd, UD_Icomiss, UD_Icpuid, UD_Icqd, UD_Icqo, UD_Icvtdq2pd, UD_Icvtdq2ps, UD_Icvtpd2dq, UD_Icvtpd2pi, UD_Icvtpd2ps, UD_Icvtpi2pd, UD_Icvtpi2ps, UD_Icvtps2dq, UD_Icvtps2pd, UD_Icvtps2pi, UD_Icvtsd2si, UD_Icvtsd2ss, UD_Icvtsi2sd, UD_Icvtsi2ss, UD_Icvtss2sd, UD_Icvtss2si, UD_Icvttpd2dq, UD_Icvttpd2pi, UD_Icvttps2dq, UD_Icvttps2pi, UD_Icvttsd2si, UD_Icvttsi2sd, UD_Icvttsi2ss, UD_Icvttss2si, UD_Icwd, UD_Icwde, UD_Icdq, UD_Idaa, UD_Idas, UD_Idec, UD_Idiv, UD_Idivpd, UD_Idivps, UD_Idivsd, UD_Idivss, UD_Iemms, UD_Ienter, UD_Iesc, UD_If2xm1, UD_Ifsxm1, UD_Ifabs, UD_Ifadd, UD_Ifaddp, UD_Ifbld, UD_Ifbstp, UD_Ifchs, UD_Ifclex, UD_Ifcmovb, UD_Ifcmovbe, UD_Ifcmove, UD_Ifcmovnb, UD_Ifcmovnbe, UD_Ifcmovne, UD_Ifcmovnu, UD_Ifcmovu, UD_Ifcom, UD_Ifcomi, UD_Ifcomp, UD_Ifcomip, UD_Ifcompp, UD_Ifcos, UD_Ifdecstp, UD_Ifdiv, UD_Ifdivp, UD_Ifdivr, UD_Ifdivrp, UD_Ifemms, UD_Iffree, UD_Ifiadd, UD_Ificom, UD_Ificomp, UD_Ifidiv, UD_Ifidivr, UD_Ifidw, UD_Ifidwr, UD_Ifild, UD_Ifimul, UD_Ifincstp, UD_Ifinit, UD_Ifist, UD_Ifistp, UD_Ifisub, UD_Ifisubr, UD_Ifld, UD_Ifld1, UD_Ifldcw, UD_Ifldenv, UD_Ifldl2e, UD_Ifldl2t, UD_Ifldlg2, UD_Ifldln2, UD_Ifldlpi, UD_Ifldx, UD_Ifldz, UD_Ifmul, UD_Ifmulp, UD_Ifnclex, UD_Ifncstp, UD_Ifninit, UD_Ifnop, UD_Ifnsave, UD_Ifnstcw, UD_Ifnstenv, UD_Ifnstsw, UD_Ifpatan, UD_Ifprem, UD_Ifprem1, UD_Ifptan, UD_Ifpxtract, UD_Ifrndint, UD_Ifrstor, UD_Ifsave, UD_Ifscale, UD_Ifsin, UD_Ifsincos, UD_Ifsqrt, UD_Ifst, UD_Ifstcw, UD_Ifstenv, UD_Ifstp, UD_Ifstsw, UD_Ifsub, UD_Ifsubp, UD_Ifsubr, UD_Ifsubrp, UD_Iftst, UD_Ifucom, UD_Ifucomi, UD_Ifucomip, UD_Ifucomp, UD_Ifucompp, UD_Ifwait, UD_Ifxam, UD_Ifxch, UD_Ifxrstor, UD_Ifxsave, UD_Ifxtract, UD_Ifyl2x, UD_Ifyl2xp1, UD_Ihlt, UD_Iidiv, UD_Iimul, UD_Iin, UD_Iinc, UD_Iins, UD_Iinsb, UD_Iinsd, UD_Iinsw, UD_Iint, UD_Iinto, UD_Iinvd, UD_Iinvlpg, UD_Iiretw, UD_Iiretd, UD_Iiretq, UD_Ijcxz, UD_Ijecxz, UD_Ijmp, UD_Ijrcxz, UD_Ijo, UD_Ijno, UD_Ijb, UD_Ijnb, UD_Ijz, UD_Ijnz, UD_Ijbe, UD_Ijnbe, UD_Ijs, UD_Ijns, UD_Ijp, UD_Ijnp, UD_Ijl, UD_Ijnl, UD_Ijle, UD_Ijnle, UD_Ilahf, UD_Ilar, UD_Ildmxcsr, UD_Ilds, UD_Ilea, UD_Ileave, UD_Iles, UD_Ilfence, UD_Ilfs, UD_Ilgdt, UD_Ilgs, UD_Ilidt, UD_Illdt, UD_Ilmsw, UD_Ilock, UD_Ilods, UD_Ilodsb, UD_Ilodsd, UD_Ilodsq, UD_Ilodsw, UD_Iloop, UD_Iloope, UD_Iloopn, UD_Iloopne, UD_Iloopnz, UD_Iloopz, UD_Ilsl, UD_Ilss, UD_Iltr, UD_Imaskmovdqu, UD_Imaskmovq, UD_Imaxpd, UD_Imaxps, UD_Imaxsd, UD_Imaxss, UD_Imfence, UD_Iminpd, UD_Iminps, UD_Iminsd, UD_Iminss, UD_Imov, UD_Imovapd, UD_Imovaps, UD_Imovd, UD_Imovdq2q, UD_Imovdqa, UD_Imovdqu, UD_Imovhlps, UD_Imovhpd, UD_Imovhps, UD_Imovlhps, UD_Imovlpd, UD_Imovlps, UD_Imovmskpd, UD_Imovmskps, UD_Imovnig, UD_Imovntdq, UD_Imovnti, UD_Imovntpd, UD_Imovntps, UD_Imovntq, UD_Imovq, UD_Imovq2dq, UD_Imovqa, UD_Imovs, UD_Imovsb, UD_Imovsd, UD_Imovsq, UD_Imovss, UD_Imovsw, UD_Imovsx, UD_Imovsxd, UD_Imovupd, UD_Imovups, UD_Imovzx, UD_Imul, UD_Imulpd, UD_Imulps, UD_Imulsd, UD_Imulss, UD_Ineg, UD_Inop, UD_Inot, UD_Ior, UD_Iorpd, UD_Iorps, UD_Iout, UD_Iouts, UD_Ioutsb, UD_Ioutsd, UD_Ioutsw, UD_Ipackssdw, UD_Ipacksswb, UD_Ipackusdw, UD_Ipackuswb, UD_Ipaddb, UD_Ipaddd, UD_Ipaddq, UD_Ipaddsb, UD_Ipaddsw, UD_Ipaddusb, UD_Ipaddusw, UD_Ipaddw, UD_Ipand, UD_Ipandn, UD_Ipavgb, UD_Ipavgusb, UD_Ipavgw, UD_Ipcmpeqb, UD_Ipcmpeqd, UD_Ipcmpeqw, UD_Ipcmpgtb, UD_Ipcmpgtd, UD_Ipcmpgtw, UD_Ipextrw, UD_Ipf2id, UD_Ipf2iw, UD_Ipfacc, UD_Ipfadd, UD_Ipfcmpeq, UD_Ipfcmpge, UD_Ipfcmpgt, UD_Ipfmax, UD_Ipfmin, UD_Ipfmul, UD_Ipfnacc, UD_Ipfpnacc, UD_Ipfrcp, UD_Ipfrcpit1, UD_Ipfrcpit2, UD_Ipfrsqit1, UD_Ipfrsqrt, UD_Ipfsub, UD_Ipfsubr, UD_Ipi2fd, UD_Ipi2fw, UD_Ipinsrw, UD_Ipmaddwd, UD_Ipmaxsw, UD_Ipmaxub, UD_Ipminsw, UD_Ipminub, UD_Ipmovmskb, UD_Ipmulhrw, 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_Ipsadbw, UD_Ipshufd, UD_Ipshufhw, UD_Ipshuflw, UD_Ipshufw, UD_Ipslld, UD_Ipslldq, UD_Ipsllq, UD_Ipsllw, UD_Ipsrad, UD_Ipsraw, UD_Ipsraq, UD_Ipsrld, UD_Ipsrldq, UD_Ipsrlq, UD_Ipsrlw, UD_Ipsubb, UD_Ipsubd, UD_Ipsubq, UD_Ipsubsb, UD_Ipsubsw, UD_Ipsubusb, UD_Ipsubusw, UD_Ipsubw, UD_Ipswapd, UD_Ipunpckhbw, UD_Ipunpckhdq, UD_Ipunpckhqdq, UD_Ipunpckhwd, UD_Ipunpcklbw, UD_Ipunpckldq, UD_Ipunpcklqdq, UD_Ipunpcklwd, UD_Ipush, UD_Ipusha, UD_Ipushad, UD_Ipushfw, UD_Ipushfd, UD_Ipushfq, UD_Ipxor, UD_Ircl, UD_Ircpps, UD_Ircpss, UD_Ircr, UD_Irdivisr, UD_Irdmsr, UD_Irdpmc, UD_Irdtsc, UD_Irep, UD_Irepne, UD_Iret, UD_Iretf, UD_Irol, UD_Iror, UD_Irsm, UD_Irsqrtps, UD_Irsqrtss, UD_Isahf, UD_Isal, UD_Isalc, UD_Isar, UD_Isbb, UD_Iscas, UD_Iscasb, UD_Iscasd, UD_Iscasq, UD_Iscasw, UD_Iseto, UD_Isetno, UD_Isetb, UD_Isetnb, UD_Isetz, UD_Isetnz, UD_Isetbe, UD_Isetnbe, UD_Isets, UD_Isetns, UD_Isetp, UD_Isetnp, UD_Isetl, UD_Isetnl, UD_Isetle, UD_Isetnle, UD_Isfence, UD_Isgdt, UD_Ishl, UD_Ishld, UD_Ishr, UD_Ishrd, UD_Ishufpd, UD_Ishufps, UD_Isidt, UD_Isldt, UD_Ismsw, UD_Isqrtpd, UD_Isqrtps, UD_Isqrtsd, UD_Isqrtss, UD_Istc, UD_Istd, UD_Isti, UD_Istmxcsr, UD_Istos, UD_Istosb, UD_Istosw, UD_Istosd, 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_Iunpcklpd, UD_Iunpcklps, UD_Iverr, UD_Iverw, UD_Iwait, UD_Iwbinvd, UD_Iwrmsr, UD_Ixadd, UD_Ixchg, UD_Ixlat, UD_Ixlatb, UD_Ixor, UD_Ixorpd, UD_Ixorps, UD_Iinvalid, UD_Igrp, UD_Ia32, UD_Io32, UD_Ies, UD_Ifs, UD_Igs, UD_Ics, UD_Ids, UD_Iss, UD_Ix87, UD_I3dnow, UD_Idb, UD_Icmpxchg16b, UD_Istosq, UD_Iint3, UD_Imovsldup, UD_Imovshdup, UD_Imovddup, UD_Irdtscp, UD_Ivmrun, UD_Ivmmcall, UD_Ivmload, UD_Ivmsave, UD_Istgi, UD_Iclgi, UD_Iskinit, UD_Iinvlpga, UD_Ija, UD_Ijae, UD_Ijg, UD_Ijge, UD_Ijc, UD_Ijnc, UD_Ifisttp, UD_Iprefetchnta, UD_Iprefetcht0, UD_Iprefetcht1, UD_Iprefetcht2, UD_Icmovae, UD_Icmova, UD_Icmovge, UD_Icmovg, UD_Iseta, UD_Isetge, UD_Isetg, UD_Ipause, UD_Ina, UD_Ihaddpd, UD_Ihsubpd, UD_Iaddsubpd, UD_Ihaddps, UD_Ihsubps, UD_Iaddsubps, UD_Ilddqu, UD_Iint1, UD_Ivmcall, UD_Ivmlaunch, UD_Ivmresume, UD_Ivmxoff, UD_Imonitor, UD_Imwait, UD_Ivmptrld, UD_Ivmptrst, UD_Ivmclear, UD_Ivmxon, UD_Inone, UD_I3vil } /* ----------------------------------------------------------------------------- * All possible "types" of objects in udis86. Order is Important! * ----------------------------------------------------------------------------- */ 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 - Disassembled instruction Operand. * ----------------------------------------------------------------------------- */ struct ptr_t { ushort seg; uint off; } union lval_t { byte sbyte; ubyte _ubyte; short sword; ushort uword; int sdword; uint udword; long sqword; ulong uqword; ptr_t ptr; } struct ud_operand { ud_type type; ubyte size; lval_t lval; ud_type base; ud_type index; ubyte offset; ubyte scale; }; /* ----------------------------------------------------------------------------- * struct ud - The udis86 object. * ----------------------------------------------------------------------------- */ struct ud { int (*inp_hook) (ud*); ubyte inp_curr; ubyte inp_fill; FILE* inp_file; ubyte inp_ctr; ubyte* inp_buff; ubyte* inp_buff_end; ubyte inp_end; void (*translator)(ud*); ulong insn_offset; char insn_hexcode[32]; char insn_buffer[64]; uint insn_fill; ubyte dis_mode; ulong pc; ubyte vendor; map_entry* mapen; ud_mnemonic_code mnemonic; ud_operand operand[3]; 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 c1; ubyte c2; ubyte c3; ubyte inp_cache[256]; ubyte inp_sess[64]; } enum map_operand_type { OP_NONE = 0, OP_A, OP_E, OP_M, OP_G, OP_I, OP_AL, OP_CL, OP_DL, OP_BL, OP_AH, OP_CH, OP_DH, OP_BH, OP_ALr8b, OP_CLr9b, OP_DLr10b, OP_BLr11b, OP_AHr12b, OP_CHr13b, OP_DHr14b, OP_BHr15b, OP_AX, OP_CX, OP_DX, OP_BX, OP_SI, OP_DI, OP_SP, OP_BP, OP_rAX, OP_rCX, OP_rDX, OP_rBX, OP_rSP, OP_rBP, OP_rSI, OP_rDI, OP_rAXr8, OP_rCXr9, OP_rDXr10, OP_rBXr11, OP_rSPr12, OP_rBPr13, OP_rSIr14, OP_rDIr15, OP_eAX, OP_eCX, OP_eDX, OP_eBX, OP_eSP, OP_eBP, OP_eSI, OP_eDI, OP_ES, OP_CS, OP_SS, OP_DS, OP_FS, OP_GS, OP_ST0, OP_ST1, OP_ST2, OP_ST3, OP_ST4, OP_ST5, OP_ST6, OP_ST7, OP_J, OP_S, OP_O, OP_I1, OP_I3, OP_V, OP_W, OP_Q, OP_P, OP_R, OP_C, OP_D, OP_VR, OP_PR } struct map_operand { map_operand_type type; ubyte size; } struct map_entry { ud_mnemonic_code mnemonic; map_operand operand1; map_operand operand2; map_operand operand3; uint prefix; } /* ----------------------------------------------------------------------------- * Type-definitions * ----------------------------------------------------------------------------- */ alias ud_type ud_type_t; alias ud_mnemonic_code ud_mnemonic_code_t; alias ud ud_t; alias ud_operand ud_operand_t; /* #define UD_SYN_INTEL ud_translate_intel #define UD_SYN_ATT ud_translate_att #define UD_EOI -1 #define UD_INP_CACHE_SZ 32 #define UD_VENDOR_AMD 0 #define UD_VENDOR_INTEL 1 */ /* ----------------------------------------------------------------------------- * extern.h * * Copyright (c) 2004, 2005, 2006, Vivek Mohan <vivek@sig9.com> * All rights reserved. See LICENSE * ----------------------------------------------------------------------------- */ /* ============================= PUBLIC API ================================= */ extern void ud_init(ud*); extern void ud_set_mode(ud*, ubyte); extern void ud_set_pc(ud*, ulong); extern void ud_set_input_hook(ud*, int (*)(ud*)); extern void ud_set_input_buffer(ud*, ubyte*, size_t); extern void ud_set_input_file(ud*, FILE*); extern void ud_set_vendor(ud*, ushort); extern void ud_set_syntax(ud*, void function(ud*)); extern void ud_input_skip(ud*, size_t); extern int ud_input_end(ud*); extern uint ud_decode(ud*); extern uint ud_disassemble(ud*); extern void ud_translate_intel(ud*); extern void ud_translate_att(ud*); extern char* ud_insn_asm(ud* u); extern ubyte* ud_insn_ptr(ud* u); extern ulong ud_insn_off(ud*); extern char* ud_insn_hex(ud*); extern uint ud_insn_len(ud* u); extern char* ud_lookup_mnemonic(ud_mnemonic_code c); } // extern(C)