⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i386-dis.c

📁 qemu虚拟机代码
💻 C
📖 第 1 页 / 共 5 页
字号:
  { "sbbS",		eAX, Iv, XX },  { "push{T|}",		ds, XX, XX },  { "pop{T|}",		ds, XX, XX },  /* 20 */  { "andB",		Eb, Gb, XX },  { "andS",		Ev, Gv, XX },  { "andB",		Gb, Eb, XX },  { "andS",		Gv, Ev, XX },  { "andB",		AL, Ib, XX },  { "andS",		eAX, Iv, XX },  { "(bad)",		XX, XX, XX },	/* SEG ES prefix */  { "daa{|}",		XX, XX, XX },  /* 28 */  { "subB",		Eb, Gb, XX },  { "subS",		Ev, Gv, XX },  { "subB",		Gb, Eb, XX },  { "subS",		Gv, Ev, XX },  { "subB",		AL, Ib, XX },  { "subS",		eAX, Iv, XX },  { "(bad)",		XX, XX, XX },	/* SEG CS prefix */  { "das{|}",		XX, XX, XX },  /* 30 */  { "xorB",		Eb, Gb, XX },  { "xorS",		Ev, Gv, XX },  { "xorB",		Gb, Eb, XX },  { "xorS",		Gv, Ev, XX },  { "xorB",		AL, Ib, XX },  { "xorS",		eAX, Iv, XX },  { "(bad)",		XX, XX, XX },	/* SEG SS prefix */  { "aaa{|}",		XX, XX, XX },  /* 38 */  { "cmpB",		Eb, Gb, XX },  { "cmpS",		Ev, Gv, XX },  { "cmpB",		Gb, Eb, XX },  { "cmpS",		Gv, Ev, XX },  { "cmpB",		AL, Ib, XX },  { "cmpS",		eAX, Iv, XX },  { "(bad)",		XX, XX, XX },	/* SEG DS prefix */  { "aas{|}",		XX, XX, XX },  /* 40 */  { "inc{S|}",		RMeAX, XX, XX },  { "inc{S|}",		RMeCX, XX, XX },  { "inc{S|}",		RMeDX, XX, XX },  { "inc{S|}",		RMeBX, XX, XX },  { "inc{S|}",		RMeSP, XX, XX },  { "inc{S|}",		RMeBP, XX, XX },  { "inc{S|}",		RMeSI, XX, XX },  { "inc{S|}",		RMeDI, XX, XX },  /* 48 */  { "dec{S|}",		RMeAX, XX, XX },  { "dec{S|}",		RMeCX, XX, XX },  { "dec{S|}",		RMeDX, XX, XX },  { "dec{S|}",		RMeBX, XX, XX },  { "dec{S|}",		RMeSP, XX, XX },  { "dec{S|}",		RMeBP, XX, XX },  { "dec{S|}",		RMeSI, XX, XX },  { "dec{S|}",		RMeDI, XX, XX },  /* 50 */  { "pushS",		RMrAX, XX, XX },  { "pushS",		RMrCX, XX, XX },  { "pushS",		RMrDX, XX, XX },  { "pushS",		RMrBX, XX, XX },  { "pushS",		RMrSP, XX, XX },  { "pushS",		RMrBP, XX, XX },  { "pushS",		RMrSI, XX, XX },  { "pushS",		RMrDI, XX, XX },  /* 58 */  { "popS",		RMrAX, XX, XX },  { "popS",		RMrCX, XX, XX },  { "popS",		RMrDX, XX, XX },  { "popS",		RMrBX, XX, XX },  { "popS",		RMrSP, XX, XX },  { "popS",		RMrBP, XX, XX },  { "popS",		RMrSI, XX, XX },  { "popS",		RMrDI, XX, XX },  /* 60 */  { "pusha{P|}",	XX, XX, XX },  { "popa{P|}",		XX, XX, XX },  { "bound{S|}",	Gv, Ma, XX },  { X86_64_0 },  { "(bad)",		XX, XX, XX },	/* seg fs */  { "(bad)",		XX, XX, XX },	/* seg gs */  { "(bad)",		XX, XX, XX },	/* op size prefix */  { "(bad)",		XX, XX, XX },	/* adr size prefix */  /* 68 */  { "pushT",		Iq, XX, XX },  { "imulS",		Gv, Ev, Iv },  { "pushT",		sIb, XX, XX },  { "imulS",		Gv, Ev, sIb },  { "ins{b||b|}",	Yb, indirDX, XX },  { "ins{R||R|}",	Yv, indirDX, XX },  { "outs{b||b|}",	indirDX, Xb, XX },  { "outs{R||R|}",	indirDX, Xv, XX },  /* 70 */  { "joH",		Jb, XX, cond_jump_flag },  { "jnoH",		Jb, XX, cond_jump_flag },  { "jbH",		Jb, XX, cond_jump_flag },  { "jaeH",		Jb, XX, cond_jump_flag },  { "jeH",		Jb, XX, cond_jump_flag },  { "jneH",		Jb, XX, cond_jump_flag },  { "jbeH",		Jb, XX, cond_jump_flag },  { "jaH",		Jb, XX, cond_jump_flag },  /* 78 */  { "jsH",		Jb, XX, cond_jump_flag },  { "jnsH",		Jb, XX, cond_jump_flag },  { "jpH",		Jb, XX, cond_jump_flag },  { "jnpH",		Jb, XX, cond_jump_flag },  { "jlH",		Jb, XX, cond_jump_flag },  { "jgeH",		Jb, XX, cond_jump_flag },  { "jleH",		Jb, XX, cond_jump_flag },  { "jgH",		Jb, XX, cond_jump_flag },  /* 80 */  { GRP1b },  { GRP1S },  { "(bad)",		XX, XX, XX },  { GRP1Ss },  { "testB",		Eb, Gb, XX },  { "testS",		Ev, Gv, XX },  { "xchgB",		Eb, Gb, XX },  { "xchgS",		Ev, Gv, XX },  /* 88 */  { "movB",		Eb, Gb, XX },  { "movS",		Ev, Gv, XX },  { "movB",		Gb, Eb, XX },  { "movS",		Gv, Ev, XX },  { "movQ",		Ev, Sw, XX },  { "leaS",		Gv, M, XX },  { "movQ",		Sw, Ev, XX },  { "popU",		Ev, XX, XX },  /* 90 */  { "nop",		XX, XX, XX },  /* FIXME: NOP with REPz prefix is called PAUSE.  */  { "xchgS",		RMeCX, eAX, XX },  { "xchgS",		RMeDX, eAX, XX },  { "xchgS",		RMeBX, eAX, XX },  { "xchgS",		RMeSP, eAX, XX },  { "xchgS",		RMeBP, eAX, XX },  { "xchgS",		RMeSI, eAX, XX },  { "xchgS",		RMeDI, eAX, XX },  /* 98 */  { "cW{tR||tR|}",	XX, XX, XX },  { "cR{tO||tO|}",	XX, XX, XX },  { "lcall{T|}",	Ap, XX, XX },  { "(bad)",		XX, XX, XX },	/* fwait */  { "pushfT",		XX, XX, XX },  { "popfT",		XX, XX, XX },  { "sahf{|}",		XX, XX, XX },  { "lahf{|}",		XX, XX, XX },  /* a0 */  { "movB",		AL, Ob64, XX },  { "movS",		eAX, Ov64, XX },  { "movB",		Ob64, AL, XX },  { "movS",		Ov64, eAX, XX },  { "movs{b||b|}",	Yb, Xb, XX },  { "movs{R||R|}",	Yv, Xv, XX },  { "cmps{b||b|}",	Xb, Yb, XX },  { "cmps{R||R|}",	Xv, Yv, XX },  /* a8 */  { "testB",		AL, Ib, XX },  { "testS",		eAX, Iv, XX },  { "stosB",		Yb, AL, XX },  { "stosS",		Yv, eAX, XX },  { "lodsB",		AL, Xb, XX },  { "lodsS",		eAX, Xv, XX },  { "scasB",		AL, Yb, XX },  { "scasS",		eAX, Yv, XX },  /* b0 */  { "movB",		RMAL, Ib, XX },  { "movB",		RMCL, Ib, XX },  { "movB",		RMDL, Ib, XX },  { "movB",		RMBL, Ib, XX },  { "movB",		RMAH, Ib, XX },  { "movB",		RMCH, Ib, XX },  { "movB",		RMDH, Ib, XX },  { "movB",		RMBH, Ib, XX },  /* b8 */  { "movS",		RMeAX, Iv64, XX },  { "movS",		RMeCX, Iv64, XX },  { "movS",		RMeDX, Iv64, XX },  { "movS",		RMeBX, Iv64, XX },  { "movS",		RMeSP, Iv64, XX },  { "movS",		RMeBP, Iv64, XX },  { "movS",		RMeSI, Iv64, XX },  { "movS",		RMeDI, Iv64, XX },  /* c0 */  { GRP2b },  { GRP2S },  { "retT",		Iw, XX, XX },  { "retT",		XX, XX, XX },  { "les{S|}",		Gv, Mp, XX },  { "ldsS",		Gv, Mp, XX },  { "movA",		Eb, Ib, XX },  { "movQ",		Ev, Iv, XX },  /* c8 */  { "enterT",		Iw, Ib, XX },  { "leaveT",		XX, XX, XX },  { "lretP",		Iw, XX, XX },  { "lretP",		XX, XX, XX },  { "int3",		XX, XX, XX },  { "int",		Ib, XX, XX },  { "into{|}",		XX, XX, XX },  { "iretP",		XX, XX, XX },  /* d0 */  { GRP2b_one },  { GRP2S_one },  { GRP2b_cl },  { GRP2S_cl },  { "aam{|}",		sIb, XX, XX },  { "aad{|}",		sIb, XX, XX },  { "(bad)",		XX, XX, XX },  { "xlat",		DSBX, XX, XX },  /* d8 */  { FLOAT },  { FLOAT },  { FLOAT },  { FLOAT },  { FLOAT },  { FLOAT },  { FLOAT },  { FLOAT },  /* e0 */  { "loopneFH",		Jb, XX, loop_jcxz_flag },  { "loopeFH",		Jb, XX, loop_jcxz_flag },  { "loopFH",		Jb, XX, loop_jcxz_flag },  { "jEcxzH",		Jb, XX, loop_jcxz_flag },  { "inB",		AL, Ib, XX },  { "inS",		eAX, Ib, XX },  { "outB",		Ib, AL, XX },  { "outS",		Ib, eAX, XX },  /* e8 */  { "callT",		Jv, XX, XX },  { "jmpT",		Jv, XX, XX },  { "ljmp{T|}",		Ap, XX, XX },  { "jmp",		Jb, XX, XX },  { "inB",		AL, indirDX, XX },  { "inS",		eAX, indirDX, XX },  { "outB",		indirDX, AL, XX },  { "outS",		indirDX, eAX, XX },  /* f0 */  { "(bad)",		XX, XX, XX },	/* lock prefix */  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },	/* repne */  { "(bad)",		XX, XX, XX },	/* repz */  { "hlt",		XX, XX, XX },  { "cmc",		XX, XX, XX },  { GRP3b },  { GRP3S },  /* f8 */  { "clc",		XX, XX, XX },  { "stc",		XX, XX, XX },  { "cli",		XX, XX, XX },  { "sti",		XX, XX, XX },  { "cld",		XX, XX, XX },  { "std",		XX, XX, XX },  { GRP4 },  { GRP5 },};static const struct dis386 dis386_twobyte[] = {  /* 00 */  { GRP6 },  { GRP7 },  { "larS",		Gv, Ew, XX },  { "lslS",		Gv, Ew, XX },  { "(bad)",		XX, XX, XX },  { "syscall",		XX, XX, XX },  { "clts",		XX, XX, XX },  { "sysretP",		XX, XX, XX },  /* 08 */  { "invd",		XX, XX, XX },  { "wbinvd",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  { "ud2a",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  { GRPAMD },  { "femms",		XX, XX, XX },  { "",			MX, EM, OPSUF }, /* See OP_3DNowSuffix.  */  /* 10 */  { PREGRP8 },  { PREGRP9 },  { "movlpX",		XM, EX, SIMD_Fixup, 'h' }, /* really only 2 operands */  { "movlpX",		EX, XM, SIMD_Fixup, 'h' },  { "unpcklpX",		XM, EX, XX },  { "unpckhpX",		XM, EX, XX },  { "movhpX",		XM, EX, SIMD_Fixup, 'l' },  { "movhpX",		EX, XM, SIMD_Fixup, 'l' },  /* 18 */  { GRP14 },  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  /* 20 */  { "movL",		Rm, Cm, XX },  { "movL",		Rm, Dm, XX },  { "movL",		Cm, Rm, XX },  { "movL",		Dm, Rm, XX },  { "movL",		Rd, Td, XX },  { "(bad)",		XX, XX, XX },  { "movL",		Td, Rd, XX },  { "(bad)",		XX, XX, XX },  /* 28 */  { "movapX",		XM, EX, XX },  { "movapX",		EX, XM, XX },  { PREGRP2 },  { "movntpX",		Ev, XM, XX },  { PREGRP4 },  { PREGRP3 },  { "ucomisX",		XM,EX, XX },  { "comisX",		XM,EX, XX },  /* 30 */  { "wrmsr",		XX, XX, XX },  { "rdtsc",		XX, XX, XX },  { "rdmsr",		XX, XX, XX },  { "rdpmc",		XX, XX, XX },  { "sysenter",		XX, XX, XX },  { "sysexit",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  /* 38 */  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  /* 40 */  { "cmovo",		Gv, Ev, XX },  { "cmovno",		Gv, Ev, XX },  { "cmovb",		Gv, Ev, XX },  { "cmovae",		Gv, Ev, XX },  { "cmove",		Gv, Ev, XX },  { "cmovne",		Gv, Ev, XX },  { "cmovbe",		Gv, Ev, XX },  { "cmova",		Gv, Ev, XX },  /* 48 */  { "cmovs",		Gv, Ev, XX },  { "cmovns",		Gv, Ev, XX },  { "cmovp",		Gv, Ev, XX },  { "cmovnp",		Gv, Ev, XX },  { "cmovl",		Gv, Ev, XX },  { "cmovge",		Gv, Ev, XX },  { "cmovle",		Gv, Ev, XX },  { "cmovg",		Gv, Ev, XX },  /* 50 */  { "movmskpX",		Gd, XS, XX },  { PREGRP13 },  { PREGRP12 },  { PREGRP11 },  { "andpX",		XM, EX, XX },  { "andnpX",		XM, EX, XX },  { "orpX",		XM, EX, XX },  { "xorpX",		XM, EX, XX },  /* 58 */  { PREGRP0 },  { PREGRP10 },  { PREGRP17 },  { PREGRP16 },  { PREGRP14 },  { PREGRP7 },  { PREGRP5 },  { PREGRP6 },  /* 60 */  { "punpcklbw",	MX, EM, XX },  { "punpcklwd",	MX, EM, XX },  { "punpckldq",	MX, EM, XX },  { "packsswb",		MX, EM, XX },  { "pcmpgtb",		MX, EM, XX },  { "pcmpgtw",		MX, EM, XX },  { "pcmpgtd",		MX, EM, XX },  { "packuswb",		MX, EM, XX },  /* 68 */  { "punpckhbw",	MX, EM, XX },  { "punpckhwd",	MX, EM, XX },  { "punpckhdq",	MX, EM, XX },  { "packssdw",		MX, EM, XX },  { PREGRP26 },  { PREGRP24 },  { "movd",		MX, Ed, XX },  { PREGRP19 },  /* 70 */  { PREGRP22 },  { GRP10 },  { GRP11 },  { GRP12 },  { "pcmpeqb",		MX, EM, XX },  { "pcmpeqw",		MX, EM, XX },  { "pcmpeqd",		MX, EM, XX },  { "emms",		XX, XX, XX },  /* 78 */  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  { PREGRP23 },  { PREGRP20 },  /* 80 */  { "joH",		Jv, XX, cond_jump_flag },  { "jnoH",		Jv, XX, cond_jump_flag },  { "jbH",		Jv, XX, cond_jump_flag },  { "jaeH",		Jv, XX, cond_jump_flag },  { "jeH",		Jv, XX, cond_jump_flag },  { "jneH",		Jv, XX, cond_jump_flag },  { "jbeH",		Jv, XX, cond_jump_flag },  { "jaH",		Jv, XX, cond_jump_flag },  /* 88 */  { "jsH",		Jv, XX, cond_jump_flag },  { "jnsH",		Jv, XX, cond_jump_flag },  { "jpH",		Jv, XX, cond_jump_flag },  { "jnpH",		Jv, XX, cond_jump_flag },  { "jlH",		Jv, XX, cond_jump_flag },  { "jgeH",		Jv, XX, cond_jump_flag },  { "jleH",		Jv, XX, cond_jump_flag },  { "jgH",		Jv, XX, cond_jump_flag },  /* 90 */  { "seto",		Eb, XX, XX },  { "setno",		Eb, XX, XX },  { "setb",		Eb, XX, XX },  { "setae",		Eb, XX, XX },  { "sete",		Eb, XX, XX },  { "setne",		Eb, XX, XX },  { "setbe",		Eb, XX, XX },  { "seta",		Eb, XX, XX },  /* 98 */  { "sets",		Eb, XX, XX },  { "setns",		Eb, XX, XX },  { "setp",		Eb, XX, XX },  { "setnp",		Eb, XX, XX },  { "setl",		Eb, XX, XX },  { "setge",		Eb, XX, XX },  { "setle",		Eb, XX, XX },  { "setg",		Eb, XX, XX },  /* a0 */  { "pushT",		fs, XX, XX },  { "popT",		fs, XX, XX },  { "cpuid",		XX, XX, XX },  { "btS",		Ev, Gv, XX },  { "shldS",		Ev, Gv, Ib },  { "shldS",		Ev, Gv, CL },  { "(bad)",		XX, XX, XX },  { "(bad)",		XX, XX, XX },  /* a8 */  { "pushT",		gs, XX, XX },  { "popT",		gs, XX, XX },  { "rsm",		XX, XX, XX },  { "btsS",		Ev, Gv, XX },  { "shrdS",		Ev, Gv, Ib },  { "shrdS",		Ev, Gv, CL },  { GRP13 },  { "imulS",		Gv, Ev, XX },  /* b0 */  { "cmpxchgB",		Eb, Gb, XX },  { "cmpxchgS",		Ev, Gv, XX },  { "lssS",		Gv, Mp, XX },  { "btrS",		Ev, Gv, XX },  { "lfsS",		Gv, Mp, XX },  { "lgsS",		Gv, Mp, XX },  { "movz{bR|x|bR|x}",	Gv, Eb, XX },  { "movz{wR|x|wR|x}",	Gv, Ew, XX }, /* yes, there really is movzww ! */  /* b8 */  { "(bad)",		XX, XX, XX },  { "ud2b",		XX, XX, XX },  { GRP8 },  { "btcS",		Ev, Gv, XX },  { "bsfS",		Gv, Ev, XX },  { "bsrS",		Gv, Ev, XX },  { "movs{bR|x|bR|x}",	Gv, Eb, XX },  { "movs{wR|x|wR|x}",	Gv, Ew, XX }, /* yes, there really is movsww ! */  /* c0 */  { "xaddB",		Eb, Gb, XX },  { "xaddS",		Ev, Gv, XX },  { PREGRP1 },  { "movntiS",		Ev, Gv, XX },  { "pinsrw",		MX, Ed, Ib },  { "pextrw",		Gd, MS, Ib },  { "shufpX",		XM, EX, Ib },  { GRP9 },  /* c8 */  { "bswap",		RMeAX, XX, XX },  { "bswap",		RMeCX, XX, XX },  { "bswap",		RMeDX, XX, XX },  { "bswap",		RMeBX, XX, XX },  { "bswap",		RMeSP, XX, XX },  { "bswap",		RMeBP, XX, XX },  { "bswap",		RMeSI, XX, XX },  { "bswap",		RMeDI, XX, XX },  /* d0 */  { "(bad)",		XX, XX, XX },  { "psrlw",		MX, EM, XX },

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -