29#define bfd_mach_x86_64_intel_syntax 0
30#define bfd_mach_x86_64 1
31#define bfd_mach_i386_i386_intel_syntax 2
32#define bfd_mach_i386_i386 3
33#define bfd_mach_i386_i8086 4
34#define abort() DbgBreakPoint();
36#define ATTRIBUTE_UNUSED
38#define sprintf_vma(BUF, VMA) sprintf(BUF, "0x%IX", VMA)
115 info.buffer_vma =
info.buffer_length = 0;
116 info.bytes_per_chunk = 0;
141 info.buffer_vma =
info.buffer_length = 0;
142 info.bytes_per_chunk = 0;
196#ifndef UNIXWARE_COMPAT
199#define UNIXWARE_COMPAT 1
209static int putop (
const char *,
int);
210static void oappend (
const char *);
214static void OP_E (
int,
int);
215static void OP_G (
int,
int);
219static int get16 (
void);
221static void OP_REG (
int,
int);
223static void OP_I (
int,
int);
224static void OP_I64 (
int,
int);
225static void OP_sI (
int,
int);
226static void OP_J (
int,
int);
237static void OP_Rd (
int,
int);
240static void OP_EM (
int,
int);
241static void OP_EX (
int,
int);
242static void OP_MS (
int,
int);
243static void OP_XS (
int,
int);
244static void OP_M (
int,
int);
253static void BadOp (
void);
266#define FWAIT_OPCODE (0x9b)
290#define USED_REX(value) \
293 rex_used |= (rex & value) ? (value) | 0x40 : 0; \
304#define PREFIX_REPNZ 2
307#define PREFIX_SS 0x10
308#define PREFIX_DS 0x20
309#define PREFIX_ES 0x40
310#define PREFIX_FS 0x80
311#define PREFIX_GS 0x100
312#define PREFIX_DATA 0x200
313#define PREFIX_ADDR 0x400
314#define PREFIX_FWAIT 0x800
319#define FETCH_DATA(info, addr) \
320 ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
321 ? 1 : fetch_data ((info), (addr)))
351#define Eb OP_E, b_mode
352#define Ev OP_E, v_mode
353#define Ed OP_E, d_mode
354#define Edq OP_E, dq_mode
355#define indirEb OP_indirE, b_mode
356#define indirEv OP_indirE, v_mode
357#define Ew OP_E, w_mode
358#define Ma OP_E, v_mode
361#define Gb OP_G, b_mode
362#define Gv OP_G, v_mode
363#define Gd OP_G, d_mode
364#define Gw OP_G, w_mode
365#define Rd OP_Rd, d_mode
366#define Rm OP_Rd, m_mode
367#define Ib OP_I, b_mode
368#define sIb OP_sI, b_mode
369#define Iv OP_I, v_mode
370#define Iq OP_I, q_mode
371#define Iv64 OP_I64, v_mode
372#define Iw OP_I, w_mode
373#define Jb OP_J, b_mode
374#define Jv OP_J, v_mode
375#define Cm OP_C, m_mode
376#define Dm OP_D, m_mode
377#define Td OP_T, d_mode
379#define RMeAX OP_REG, eAX_reg
380#define RMeBX OP_REG, eBX_reg
381#define RMeCX OP_REG, eCX_reg
382#define RMeDX OP_REG, eDX_reg
383#define RMeSP OP_REG, eSP_reg
384#define RMeBP OP_REG, eBP_reg
385#define RMeSI OP_REG, eSI_reg
386#define RMeDI OP_REG, eDI_reg
387#define RMrAX OP_REG, rAX_reg
388#define RMrBX OP_REG, rBX_reg
389#define RMrCX OP_REG, rCX_reg
390#define RMrDX OP_REG, rDX_reg
391#define RMrSP OP_REG, rSP_reg
392#define RMrBP OP_REG, rBP_reg
393#define RMrSI OP_REG, rSI_reg
394#define RMrDI OP_REG, rDI_reg
395#define RMAL OP_REG, al_reg
396#define RMAL OP_REG, al_reg
397#define RMCL OP_REG, cl_reg
398#define RMDL OP_REG, dl_reg
399#define RMBL OP_REG, bl_reg
400#define RMAH OP_REG, ah_reg
401#define RMCH OP_REG, ch_reg
402#define RMDH OP_REG, dh_reg
403#define RMBH OP_REG, bh_reg
404#define RMAX OP_REG, ax_reg
405#define RMDX OP_REG, dx_reg
407#define eAX OP_IMREG, eAX_reg
408#define eBX OP_IMREG, eBX_reg
409#define eCX OP_IMREG, eCX_reg
410#define eDX OP_IMREG, eDX_reg
411#define eSP OP_IMREG, eSP_reg
412#define eBP OP_IMREG, eBP_reg
413#define eSI OP_IMREG, eSI_reg
414#define eDI OP_IMREG, eDI_reg
415#define AL OP_IMREG, al_reg
416#define AL OP_IMREG, al_reg
417#define CL OP_IMREG, cl_reg
418#define DL OP_IMREG, dl_reg
419#define BL OP_IMREG, bl_reg
420#define AH OP_IMREG, ah_reg
421#define CH OP_IMREG, ch_reg
422#define DH OP_IMREG, dh_reg
423#define BH OP_IMREG, bh_reg
424#define AX OP_IMREG, ax_reg
425#define DX OP_IMREG, dx_reg
426#define indirDX OP_IMREG, indir_dx_reg
428#define Sw OP_SEG, w_mode
430#define Ob OP_OFF, b_mode
431#define Ob64 OP_OFF64, b_mode
432#define Ov OP_OFF, v_mode
433#define Ov64 OP_OFF64, v_mode
434#define Xb OP_DSreg, eSI_reg
435#define Xv OP_DSreg, eSI_reg
436#define Yb OP_ESreg, eDI_reg
437#define Yv OP_ESreg, eDI_reg
438#define DSBX OP_DSreg, eBX_reg
440#define es OP_REG, es_reg
441#define ss OP_REG, ss_reg
442#define cs OP_REG, cs_reg
443#define ds OP_REG, ds_reg
444#define fs OP_REG, fs_reg
445#define gs OP_REG, gs_reg
449#define EM OP_EM, v_mode
450#define EX OP_EX, v_mode
451#define MS OP_MS, v_mode
452#define XS OP_XS, v_mode
453#define OPSUF OP_3DNowSuffix, 0
454#define OPSIMD OP_SIMD_Suffix, 0
456#define cond_jump_flag NULL, cond_jump_mode
457#define loop_jcxz_flag NULL, loop_jcxz_mode
460#define SUFFIX_ALWAYS 4
471#define cond_jump_mode 8
472#define loop_jcxz_mode 9
518#define indir_dx_reg 150
522#define USE_PREFIX_USER_TABLE 3
523#define X86_64_SPECIAL 4
525#define FLOAT NULL, NULL, FLOATCODE, NULL, 0, NULL, 0
527#define GRP1b NULL, NULL, USE_GROUPS, NULL, 0, NULL, 0
528#define GRP1S NULL, NULL, USE_GROUPS, NULL, 1, NULL, 0
529#define GRP1Ss NULL, NULL, USE_GROUPS, NULL, 2, NULL, 0
530#define GRP2b NULL, NULL, USE_GROUPS, NULL, 3, NULL, 0
531#define GRP2S NULL, NULL, USE_GROUPS, NULL, 4, NULL, 0
532#define GRP2b_one NULL, NULL, USE_GROUPS, NULL, 5, NULL, 0
533#define GRP2S_one NULL, NULL, USE_GROUPS, NULL, 6, NULL, 0
534#define GRP2b_cl NULL, NULL, USE_GROUPS, NULL, 7, NULL, 0
535#define GRP2S_cl NULL, NULL, USE_GROUPS, NULL, 8, NULL, 0
536#define GRP3b NULL, NULL, USE_GROUPS, NULL, 9, NULL, 0
537#define GRP3S NULL, NULL, USE_GROUPS, NULL, 10, NULL, 0
538#define GRP4 NULL, NULL, USE_GROUPS, NULL, 11, NULL, 0
539#define GRP5 NULL, NULL, USE_GROUPS, NULL, 12, NULL, 0
540#define GRP6 NULL, NULL, USE_GROUPS, NULL, 13, NULL, 0
541#define GRP7 NULL, NULL, USE_GROUPS, NULL, 14, NULL, 0
542#define GRP8 NULL, NULL, USE_GROUPS, NULL, 15, NULL, 0
543#define GRP9 NULL, NULL, USE_GROUPS, NULL, 16, NULL, 0
544#define GRP10 NULL, NULL, USE_GROUPS, NULL, 17, NULL, 0
545#define GRP11 NULL, NULL, USE_GROUPS, NULL, 18, NULL, 0
546#define GRP12 NULL, NULL, USE_GROUPS, NULL, 19, NULL, 0
547#define GRP13 NULL, NULL, USE_GROUPS, NULL, 20, NULL, 0
548#define GRP14 NULL, NULL, USE_GROUPS, NULL, 21, NULL, 0
549#define GRPAMD NULL, NULL, USE_GROUPS, NULL, 22, NULL, 0
550#define GRPPADLCK NULL, NULL, USE_GROUPS, NULL, 23, NULL, 0
552#define PREGRP0 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 0, NULL, 0
553#define PREGRP1 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 1, NULL, 0
554#define PREGRP2 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 2, NULL, 0
555#define PREGRP3 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 3, NULL, 0
556#define PREGRP4 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 4, NULL, 0
557#define PREGRP5 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 5, NULL, 0
558#define PREGRP6 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 6, NULL, 0
559#define PREGRP7 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 7, NULL, 0
560#define PREGRP8 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 8, NULL, 0
561#define PREGRP9 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 9, NULL, 0
562#define PREGRP10 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 10, NULL, 0
563#define PREGRP11 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 11, NULL, 0
564#define PREGRP12 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 12, NULL, 0
565#define PREGRP13 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 13, NULL, 0
566#define PREGRP14 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 14, NULL, 0
567#define PREGRP15 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 15, NULL, 0
568#define PREGRP16 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 16, NULL, 0
569#define PREGRP17 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 17, NULL, 0
570#define PREGRP18 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 18, NULL, 0
571#define PREGRP19 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 19, NULL, 0
572#define PREGRP20 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 20, NULL, 0
573#define PREGRP21 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 21, NULL, 0
574#define PREGRP22 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 22, NULL, 0
575#define PREGRP23 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 23, NULL, 0
576#define PREGRP24 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 24, NULL, 0
577#define PREGRP25 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 25, NULL, 0
578#define PREGRP26 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 26, NULL, 0
579#define PREGRP27 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 27, NULL, 0
580#define PREGRP28 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 28, NULL, 0
581#define PREGRP29 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 29, NULL, 0
582#define PREGRP30 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 30, NULL, 0
583#define PREGRP31 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 31, NULL, 0
584#define PREGRP32 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 32, NULL, 0
586#define X86_64_0 NULL, NULL, X86_64_SPECIAL, NULL, 0, NULL, 0
638 {
"push{T|}",
es,
XX,
XX },
639 {
"pop{T|}",
es,
XX,
XX },
647 {
"push{T|}",
cs,
XX,
XX },
656 {
"push{T|}",
ss,
XX,
XX },
665 {
"push{T|}",
ds,
XX,
XX },
666 {
"pop{T|}",
ds,
XX,
XX },
740 {
"pusha{P|}",
XX,
XX,
XX },
741 {
"popa{P|}",
XX,
XX,
XX },
742 {
"bound{S|}",
Gv,
Ma,
XX },
790 {
"leaS",
Gv,
M,
XX },
803 {
"cW{tR||tR|}",
XX,
XX,
XX },
804 {
"cR{tO||tO|}",
XX,
XX,
XX },
805 {
"lcall{T|}",
Ap,
XX,
XX },
809 {
"sahf{|}",
XX,
XX,
XX },
810 {
"lahf{|}",
XX,
XX,
XX },
816 {
"movs{b||b|}",
Yb,
Xb,
XX },
817 {
"movs{R||R|}",
Yv,
Xv,
XX },
818 {
"cmps{b||b|}",
Xb,
Yb,
XX },
819 {
"cmps{R||R|}",
Xv,
Yv,
XX },
852 {
"les{S|}",
Gv,
Mp,
XX },
863 {
"into{|}",
XX,
XX,
XX },
895 {
"ljmp{T|}",
Ap,
XX,
XX },
928 {
"syscall",
XX,
XX,
XX },
930 {
"sysretP",
XX,
XX,
XX },
945 {
"unpcklpX",
XM,
EX,
XX },
946 {
"unpckhpX",
XM,
EX,
XX },
971 {
"movntpX",
Ev,
XM,
XX },
981 {
"sysenter",
XX,
XX,
XX },
982 {
"sysexit",
XX,
XX,
XX },
1000 {
"cmovne",
Gv,
Ev,
XX },
1001 {
"cmovbe",
Gv,
Ev,
XX },
1005 {
"cmovns",
Gv,
Ev,
XX },
1007 {
"cmovnp",
Gv,
Ev,
XX },
1009 {
"cmovge",
Gv,
Ev,
XX },
1010 {
"cmovle",
Gv,
Ev,
XX },
1013 {
"movmskpX",
Gd,
XS,
XX },
1018 {
"andnpX",
XM,
EX,
XX },
1031 {
"punpcklbw",
MX,
EM,
XX },
1032 {
"punpcklwd",
MX,
EM,
XX },
1033 {
"punpckldq",
MX,
EM,
XX },
1034 {
"packsswb",
MX,
EM,
XX },
1035 {
"pcmpgtb",
MX,
EM,
XX },
1036 {
"pcmpgtw",
MX,
EM,
XX },
1037 {
"pcmpgtd",
MX,
EM,
XX },
1038 {
"packuswb",
MX,
EM,
XX },
1040 {
"punpckhbw",
MX,
EM,
XX },
1041 {
"punpckhwd",
MX,
EM,
XX },
1042 {
"punpckhdq",
MX,
EM,
XX },
1043 {
"packssdw",
MX,
EM,
XX },
1053 {
"pcmpeqb",
MX,
EM,
XX },
1054 {
"pcmpeqw",
MX,
EM,
XX },
1055 {
"pcmpeqd",
MX,
EM,
XX },
1121 {
"cmpxchgB",
Eb,
Gb,
XX },
1122 {
"cmpxchgS",
Ev,
Gv,
XX },
1127 {
"movz{bR|x|bR|x}",
Gv,
Eb,
XX },
1128 {
"movz{wR|x|wR|x}",
Gv,
Ew,
XX },
1136 {
"movs{bR|x|bR|x}",
Gv,
Eb,
XX },
1137 {
"movs{wR|x|wR|x}",
Gv,
Ew,
XX },
1142 {
"movntiS",
Ev,
Gv,
XX },
1143 {
"pinsrw",
MX,
Ed,
Ib },
1144 {
"pextrw",
Gd,
MS,
Ib },
1145 {
"shufpX",
XM,
EX,
Ib },
1162 {
"pmullw",
MX,
EM,
XX },
1164 {
"pmovmskb",
Gd,
MS,
XX },
1166 {
"psubusb",
MX,
EM,
XX },
1167 {
"psubusw",
MX,
EM,
XX },
1168 {
"pminub",
MX,
EM,
XX },
1170 {
"paddusb",
MX,
EM,
XX },
1171 {
"paddusw",
MX,
EM,
XX },
1172 {
"pmaxub",
MX,
EM,
XX },
1179 {
"pmulhuw",
MX,
EM,
XX },
1180 {
"pmulhw",
MX,
EM,
XX },
1184 {
"psubsb",
MX,
EM,
XX },
1185 {
"psubsw",
MX,
EM,
XX },
1186 {
"pminsw",
MX,
EM,
XX },
1188 {
"paddsb",
MX,
EM,
XX },
1189 {
"paddsw",
MX,
EM,
XX },
1190 {
"pmaxsw",
MX,
EM,
XX },
1197 {
"pmuludq",
MX,
EM,
XX },
1198 {
"pmaddwd",
MX,
EM,
XX },
1199 {
"psadbw",
MX,
EM,
XX },
1215 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
1216 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
1217 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
1218 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,
1219 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1220 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1221 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,
1222 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1223 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1224 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1225 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1226 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1227 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,
1228 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,
1229 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1230 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1
1238 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,
1239 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,
1240 1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,
1241 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1242 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1243 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1244 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1245 1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,
1246 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1247 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1248 0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,1,
1249 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,
1250 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
1251 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1252 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1253 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
1261 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1262 1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,
1263 0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,
1264 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1265 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1266 0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,
1267 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,
1268 1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,
1269 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1270 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1271 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1272 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1273 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
1274 1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
1275 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
1276 1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
1296#define MODRM_CHECK if (!need_modrm) abort ()
1307 "rax",
"rcx",
"rdx",
"rbx",
"rsp",
"rbp",
"rsi",
"rdi",
1308 "r8",
"r9",
"r10",
"r11",
"r12",
"r13",
"r14",
"r15"
1311 "eax",
"ecx",
"edx",
"ebx",
"esp",
"ebp",
"esi",
"edi",
1312 "r8d",
"r9d",
"r10d",
"r11d",
"r12d",
"r13d",
"r14d",
"r15d"
1315 "ax",
"cx",
"dx",
"bx",
"sp",
"bp",
"si",
"di",
1316 "r8w",
"r9w",
"r10w",
"r11w",
"r12w",
"r13w",
"r14w",
"r15w"
1319 "al",
"cl",
"dl",
"bl",
"ah",
"ch",
"dh",
"bh",
1322 "al",
"cl",
"dl",
"bl",
"spl",
"bpl",
"sil",
"dil",
1323 "r8b",
"r9b",
"r10b",
"r11b",
"r12b",
"r13b",
"r14b",
"r15b"
1326 "es",
"cs",
"ss",
"ds",
"fs",
"gs",
"?",
"?",
1329 "bx+si",
"bx+di",
"bp+si",
"bp+di",
"si",
"di",
"bp",
"bx"
1333 "%rax",
"%rcx",
"%rdx",
"%rbx",
"%rsp",
"%rbp",
"%rsi",
"%rdi",
1334 "%r8",
"%r9",
"%r10",
"%r11",
"%r12",
"%r13",
"%r14",
"%r15"
1337 "%eax",
"%ecx",
"%edx",
"%ebx",
"%esp",
"%ebp",
"%esi",
"%edi",
1338 "%r8d",
"%r9d",
"%r10d",
"%r11d",
"%r12d",
"%r13d",
"%r14d",
"%r15d"
1341 "%ax",
"%cx",
"%dx",
"%bx",
"%sp",
"%bp",
"%si",
"%di",
1342 "%r8w",
"%r9w",
"%r10w",
"%r11w",
"%r12w",
"%r13w",
"%r14w",
"%r15w"
1345 "%al",
"%cl",
"%dl",
"%bl",
"%ah",
"%ch",
"%dh",
"%bh",
1348 "%al",
"%cl",
"%dl",
"%bl",
"%spl",
"%bpl",
"%sil",
"%dil",
1349 "%r8b",
"%r9b",
"%r10b",
"%r11b",
"%r12b",
"%r13b",
"%r14b",
"%r15b"
1352 "%es",
"%cs",
"%ss",
"%ds",
"%fs",
"%gs",
"%?",
"%?",
1355 "%bx,%si",
"%bx,%di",
"%bp,%si",
"%bp,%di",
"%si",
"%di",
"%bp",
"%bx"
1515 {
"sgdtQ",
M,
XX,
XX },
1517 {
"lgdtQ",
M,
XX,
XX },
1518 {
"lidtQ",
M,
XX,
XX },
1538 {
"cmpxchg8b",
Ev,
XX,
XX },
1573 {
"psrldq",
MS,
Ib,
XX },
1577 {
"pslldq",
MS,
Ib,
XX },
1581 {
"fxsave",
Ev,
XX,
XX },
1582 {
"fxrstor",
Ev,
XX,
XX },
1583 {
"ldmxcsr",
Ev,
XX,
XX },
1584 {
"stmxcsr",
Ev,
XX,
XX },
1592 {
"prefetchnta",
Ev,
XX,
XX },
1593 {
"prefetcht0",
Ev,
XX,
XX },
1594 {
"prefetcht1",
Ev,
XX,
XX },
1595 {
"prefetcht2",
Ev,
XX,
XX },
1603 {
"prefetch",
Eb,
XX,
XX },
1604 {
"prefetchw",
Eb,
XX,
XX },
1642 {
"cvtpi2ps",
XM,
EM,
XX },
1643 {
"cvtsi2ssY",
XM,
Ev,
XX },
1644 {
"cvtpi2pd",
XM,
EM,
XX },
1645 {
"cvtsi2sdY",
XM,
Ev,
XX },
1649 {
"cvtps2pi",
MX,
EX,
XX },
1650 {
"cvtss2siY",
Gv,
EX,
XX },
1651 {
"cvtpd2pi",
MX,
EX,
XX },
1652 {
"cvtsd2siY",
Gv,
EX,
XX },
1656 {
"cvttps2pi",
MX,
EX,
XX },
1657 {
"cvttss2siY",
Gv,
EX,
XX },
1658 {
"cvttpd2pi",
MX,
EX,
XX },
1659 {
"cvttsd2siY",
Gv,
EX,
XX },
1684 {
"movups",
XM,
EX,
XX },
1686 {
"movupd",
XM,
EX,
XX },
1691 {
"movups",
EX,
XM,
XX },
1693 {
"movupd",
EX,
XM,
XX },
1712 {
"rsqrtps",
XM,
EX,
XX },
1713 {
"rsqrtss",
XM,
EX,
XX },
1719 {
"sqrtps",
XM,
EX,
XX },
1720 {
"sqrtss",
XM,
EX,
XX },
1721 {
"sqrtpd",
XM,
EX,
XX },
1722 {
"sqrtsd",
XM,
EX,
XX },
1734 {
"cvtdq2pd",
XM,
EX,
XX },
1735 {
"cvttpd2dq",
XM,
EX,
XX },
1736 {
"cvtpd2dq",
XM,
EX,
XX },
1740 {
"cvtdq2ps",
XM,
EX,
XX },
1741 {
"cvttps2dq",
XM,
EX,
XX },
1742 {
"cvtps2dq",
XM,
EX,
XX },
1747 {
"cvtps2pd",
XM,
EX,
XX },
1748 {
"cvtss2sd",
XM,
EX,
XX },
1749 {
"cvtpd2ps",
XM,
EX,
XX },
1750 {
"cvtsd2ss",
XM,
EX,
XX },
1754 {
"maskmovq",
MX,
MS,
XX },
1756 {
"maskmovdqu",
XM,
EX,
XX },
1762 {
"movdqu",
XM,
EX,
XX },
1763 {
"movdqa",
XM,
EX,
XX },
1769 {
"movdqu",
EX,
XM,
XX },
1770 {
"movdqa",
EX,
XM,
XX },
1776 {
"movq2dq",
XM,
MS,
XX },
1778 {
"movdq2q",
MX,
XS,
XX },
1782 {
"pshufw",
MX,
EM,
Ib },
1783 {
"pshufhw",
XM,
EX,
Ib },
1784 {
"pshufd",
XM,
EX,
Ib },
1785 {
"pshuflw",
XM,
EX,
Ib },
1798 {
"punpckhqdq",
XM,
EX,
XX },
1803 {
"movntq",
Ev,
MX,
XX },
1805 {
"movntdq",
Ev,
XM,
XX },
1812 {
"punpcklqdq",
XM,
EX,
XX },
1819 {
"addsubpd",
XM,
EX,
XX },
1820 {
"addsubps",
XM,
EX,
XX },
1826 {
"haddpd",
XM,
EX,
XX },
1827 {
"haddps",
XM,
EX,
XX },
1833 {
"hsubpd",
XM,
EX,
XX },
1834 {
"hsubps",
XM,
EX,
XX },
1839 {
"movsldup",
XM,
EX,
XX },
1840 {
"movlpd",
XM,
EX,
XX },
1841 {
"movddup",
XM,
EX,
XX },
1846 {
"movshdup",
XM,
EX,
XX },
1847 {
"movhpd",
XM,
EX,
XX },
1855 {
"lddqu",
XM,
M,
XX },
1862 {
"movs{||lq|xd}",
Gv,
Ed,
XX },
1866#define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
2023 return (sizeflag &
DFLAG) ?
"data16" :
"data32";
2026 return (sizeflag &
AFLAG) ?
"addr32" :
"addr64";
2090 char *
first, *second, *third;
2092 unsigned char uses_SSE_prefix;
2115 for (
p =
info->disassembler_options;
p !=
NULL; )
2122 else if (
strncmp (
p,
"i386", 4) == 0)
2127 else if (
strncmp (
p,
"i8086", 5) == 0)
2132 else if (
strncmp (
p,
"intel", 5) == 0)
2136 else if (
strncmp (
p,
"att", 3) == 0)
2140 else if (
strncmp (
p,
"addr", 4) == 0)
2142 if (
p[4] ==
'1' &&
p[5] ==
'6')
2144 else if (
p[4] ==
'3' &&
p[5] ==
'2')
2147 else if (
strncmp (
p,
"data", 4) == 0)
2149 if (
p[4] ==
'1' &&
p[5] ==
'6')
2151 else if (
p[4] ==
'3' &&
p[5] ==
'2')
2154 else if (
strncmp (
p,
"suffix", 6) == 0)
2202 info->bytes_per_line = 7;
2204 info->private_data = &priv;
2235 (*
info->fprintf_func) (
info->stream,
".byte 0x%x",
2279 uses_SSE_prefix = 0;
2319 if (sizeflag &
DFLAG)
2457 (*
info->fprintf_func) (
info->stream,
",");
2461 (*
info->fprintf_func) (
info->stream,
"%s", second);
2467 (*
info->fprintf_func) (
info->stream,
",");
2471 (*
info->fprintf_func) (
info->stream,
"%s", third);
2473 for (
i = 0;
i < 3;
i++)
2476 (*
info->fprintf_func) (
info->stream,
" # ");
2634#define STi OP_STi, 0
2636#define FGRPd9_2 NULL, NULL, 0, NULL, 0, NULL, 0
2637#define FGRPd9_4 NULL, NULL, 1, NULL, 0, NULL, 0
2638#define FGRPd9_5 NULL, NULL, 2, NULL, 0, NULL, 0
2639#define FGRPd9_6 NULL, NULL, 3, NULL, 0, NULL, 0
2640#define FGRPd9_7 NULL, NULL, 4, NULL, 0, NULL, 0
2641#define FGRPda_5 NULL, NULL, 5, NULL, 0, NULL, 0
2642#define FGRPdb_4 NULL, NULL, 6, NULL, 0, NULL, 0
2643#define FGRPde_3 NULL, NULL, 7, NULL, 0, NULL, 0
2644#define FGRPdf_4 NULL, NULL, 8, NULL, 0, NULL, 0
2754 "fnop",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
2759 "fchs",
"fabs",
"(bad)",
"(bad)",
"ftst",
"fxam",
"(bad)",
"(bad)",
2764 "fld1",
"fldl2t",
"fldl2e",
"fldpi",
"fldlg2",
"fldln2",
"fldz",
"(bad)",
2769 "f2xm1",
"fyl2x",
"fptan",
"fpatan",
"fxtract",
"fprem1",
"fdecstp",
"fincstp",
2774 "fprem",
"fyl2xp1",
"fsqrt",
"fsincos",
"frndint",
"fscale",
"fsin",
"fcos",
2779 "(bad)",
"fucompp",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
2784 "feni(287 only)",
"fdisi(287 only)",
"fNclex",
"fNinit",
2785 "fNsetpm(287 only)",
"(bad)",
"(bad)",
"(bad)",
2790 "(bad)",
"fcompp",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
2795 "fNstsw",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
"(bad)",
2803 unsigned char floatop;
2805 floatop =
codep[-1];
2809 int fp_indx = (floatop - 0xd8) * 8 +
reg;
2826 if (floatop == 0xdf &&
codep[-1] == 0xe0)
2857putop (
const char *
template,
int sizeflag)
2862 for (
p =
template; *
p;
p++)
2886 else if (*
p ==
'\0')
2916 if (sizeflag &
AFLAG)
2922 if (sizeflag &
AFLAG)
2931 if (sizeflag &
AFLAG)
2993 if (sizeflag &
DFLAG)
3020 if (sizeflag &
DFLAG)
3037 else if (sizeflag &
DFLAG)
3052 else if (sizeflag &
DFLAG)
3069 if (sizeflag &
DFLAG)
3099 else if (sizeflag &
DFLAG)
3110 if (sizeflag &
DFLAG)
3176 OP_E (bytemode, sizeflag);
3191 for (
i = 0; tmp[
i] ==
'0' && tmp[
i + 1];
i++);
3220 tmp[28 -
i] = (
v % 10) +
'0';
3330 if ((
base & 7) == 5)
3341 if ((disp & 0x80) != 0)
3350 if (
mod != 0 || (
base & 7) == 5)
3361 if (havebase || (havesib && (
index != 4 ||
scale != 0)))
3374 if (sizeflag &
DFLAG)
3438 if (
mod != 0 || (
base & 7) == 5)
3459 if (
mod != 0 || (
base & 7) == 5)
3482 if ((disp & 0x8000) != 0)
3489 if ((disp & 0x80) != 0)
3494 if ((disp & 0x8000) != 0)
3500 if (
mod != 0 || (
rm & 7) == 6)
3506 if (
mod != 0 || (
rm & 7) != 6)
3546 else if (sizeflag &
DFLAG)
3568 a |= (*
codep++ & 0xff) << 8;
3569 a |= (*
codep++ & 0xff) << 16;
3570 a |= (*
codep++ & 0xff) << 24;
3572 b |= (*
codep++ & 0xff) << 8;
3573 b |= (*
codep++ & 0xff) << 16;
3574 b |= (*
codep++ & 0xff) << 24;
3619 x |= (*
codep++ & 0xff) << 8;
3687 else if (sizeflag &
DFLAG)
3734 else if (sizeflag &
DFLAG)
3771 else if (sizeflag &
DFLAG)
3807 OP_I (bytemode, sizeflag);
3822 else if (sizeflag &
DFLAG)
3861 if ((
op & 0x80) != 0)
3869 else if (sizeflag &
DFLAG)
3878 if ((
op & 0x8000) != 0)
3886 if ((
op & 0x8000) != 0)
3910 if ((disp & 0x80) != 0)
3914 if (sizeflag &
DFLAG)
3946 if (sizeflag &
DFLAG)
3996 OP_OFF (bytemode, sizeflag);
4026 if (!(sizeflag &
AFLAG))
4031 else if (sizeflag &
AFLAG)
4098 OP_E (bytemode, sizeflag);
4135 OP_E (bytemode, sizeflag);
4159 OP_E (bytemode, sizeflag);
4177 OP_EM (bytemode, sizeflag);
4186 OP_EX (bytemode, sizeflag);
4197 OP_E (bytemode, sizeflag);
4203 if (
mod != 3 ||
rm != 0)
4206 OP_E (bytemode, sizeflag);
4217 if (
reg < 5 ||
rm != 0)
4229 OP_E (bytemode, sizeflag);
4278 "pfmin",
NULL,
"pfrcp",
"pfrsqrt",
4282 "pfmax",
NULL,
"pfrcpit1",
"pfrsqit1",
4286 "pfmul",
NULL,
"pfrcpit2",
"pfmulhrw",
4310 const char *mnemonic;
4346 unsigned int cmp_type;
4350 cmp_type = *
codep++ & 0xff;
4353 char suffix1 =
'p', suffix2 =
's';
4366 suffix1 =
's', suffix2 =
'd';
4393 *(
p - 1) = *(
p - 2);
4394 *(
p - 2) = *(
p - 3);
4395 *(
p - 3) = extrachar;
4402 if (
mod == 3 &&
reg == 1 &&
rm <= 1)
4444 OP_E (bytemode, sizeflag);
ACPI_SIZE strlen(const char *String)
int strncmp(const char *String1, const char *String2, ACPI_SIZE Count)
char * strchr(const char *String, int ch)
GLint GLint GLint GLint GLint x
GLenum GLenum GLenum GLenum GLenum scale
GLboolean GLboolean GLboolean b
GLenum GLuint GLenum GLsizei const GLchar * buf
GLenum const GLvoid * addr
GLboolean GLboolean GLboolean GLboolean a
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static void OP_indirE(int, int)
static void OP_IMREG(int, int)
static char scratchbuf[100]
static void OP_3DNowSuffix(int, int)
static void OP_XS(int, int)
static const char * intel_names8rex[]
static int putop(const char *, int)
static disassemble_info * the_info
static void print_operand_value(char *, int, bfd_vma)
#define bfd_mach_i386_i8086
static void KdbpNopPrintAddress(uintptr_t Addr, struct disassemble_info *Ignored)
static void KdbpPrintAddressInCode(uintptr_t Addr, struct disassemble_info *Ignored)
static void OP_DIR(int, int)
static const char ** names8rex
static void OP_EX(int, int)
static const char * att_names64[]
static void OP_C(int, int)
static void OP_EM(int, int)
int print_insn_i386(bfd_vma pc, struct disassemble_info *info)
static void ptr_reg(int, int)
static unsigned char * start_codep
static const char * simd_cmp_op[]
static const char * float_mem[]
#define USE_PREFIX_USER_TABLE
static const char ** names16
static void OP_ST(int, int)
static const unsigned char float_mem_mode[]
static void set_op(bfd_vma, int)
int KdbpPrintDisasm(void *Ignored, const char *fmt,...)
static void OP_Rd(int, int)
static void PNI_Fixup(int, int)
static void OP_REG(int, int)
static int fetch_data(struct disassemble_info *, bfd_byte *)
static const struct dis386 prefix_user_table[][4]
static const char * intel_names_seg[]
static const unsigned char twobyte_has_modrm[256]
static char separator_char
static const char * att_names32[]
static bfd_vma op_riprel[3]
#define INTERNAL_DISASSEMBLER_ERROR
static const struct dis386 dis386_twobyte[]
static int print_insn(bfd_vma, disassemble_info *)
static const struct dis386 grps[][8]
@ bfd_target_unknown_flavour
static bfd_vma get64(void)
static const char * intel_names16[]
#define bfd_mach_i386_i386
static const char *const Suffix3DNow[]
static void INVLPG_Fixup(int, int)
static void OP_G(int, int)
static const char ** names64
#define sprintf_vma(BUF, VMA)
static void OP_I64(int, int)
static const char * att_names8[]
static int two_source_ops
int print_insn_i386_att(bfd_vma pc, disassemble_info *info)
static const struct dis386 float_reg[][8]
static void oappend(const char *)
static void KdbpMemoryError(int Status, uintptr_t Addr, struct disassemble_info *Ignored)
static void NOP_Fixup(int, int)
static void OP_MMX(int, int)
static bfd_vma op_address[3]
static void OP_0fae(int, int)
static bfd_signed_vma get32s(void)
static void OP_ESreg(int, int)
static const char * intel_names64[]
static const char * att_names_seg[]
static const char * intel_names32[]
static void OP_OFF64(int, int)
static const struct dis386 x86_64_table[][2]
static const char ** names32
static const char ** index16
static const char * intel_names8[]
static const char ** names8
static void OP_SIMD_Suffix(int, int)
static void OP_XMM(int, int)
static const char * prefix_name(int, int)
static void OP_E(int, int)
static const char * intel_index16[]
static unsigned char * codep
#define FETCH_DATA(info, addr)
static void OP_M(int, int)
static void OP_I(int, int)
static void OP_T(int, int)
static const char * att_index16[]
static void OP_DSreg(int, int)
static unsigned char * insn_codep
LONG KdbpGetInstLength(IN ULONG_PTR Address)
static void OP_0f07(int, int)
static const unsigned char twobyte_uses_SSE_prefix[256]
static int KdbpReadMemory(uintptr_t Addr, unsigned char *Data, unsigned int Length, struct disassemble_info *Ignored)
void(* op_rtn)(int bytemode, int sizeflag)
static void OP_J(int, int)
static void OP_sI(int, int)
static bfd_signed_vma get32(void)
static void append_seg(void)
int KdbpNopPrintDisasm(void *Ignored, const char *fmt,...)
#define bfd_mach_i386_i386_intel_syntax
static void OP_OFF(int, int)
LONG KdbpDisassemble(IN ULONG_PTR Address, IN ULONG IntelSyntax)
enum bfd_architecture bfd_arch
static const char ** names_seg
static const char * att_names8rex[]
static void OP_SEG(int, int)
static void ckprefix(void)
int print_insn_i386_intel(bfd_vma pc, disassemble_info *info)
static void SIMD_Fixup(int, int)
static const char * att_names16[]
static void OP_MS(int, int)
static void OP_STi(int, int)
static unsigned char need_modrm
static const unsigned char onebyte_has_modrm[256]
static void OP_D(int, int)
#define bfd_mach_x86_64_intel_syntax
int __cdecl vsprintf(char *_Dest, const char *_Format, va_list _Args)
NTSTATUS KdbpSafeReadMemory(OUT PVOID Dest, IN PVOID Src, IN ULONG Bytes)
BOOLEAN KdbSymPrintAddress(IN PVOID Address, IN PCONTEXT Context)
Print address...
VOID KdbPuts(_In_ PCSTR String)
VOID __cdecl KdbPrintf(_In_ PCSTR Format,...)
#define sprintf(buf, format,...)
_In_ ULONG _In_ ULONG _In_ ULONG Length
bfd_byte the_buffer[MAXLEN]
void int int ULONGLONG int va_list * ap