📄 print.c
字号:
else {pr1ntf ("mov ebp, ");printCol+=9;}
ref=print_i_dword();lclass=1024;
break;
case 0xBE: if (operandOveride){pr1ntf ("mov si, "); printCol+=8;}
else {pr1ntf ("mov esi, ");printCol+=9;}
ref=print_i_dword();lclass=1024;
break;
case 0xBF: if (operandOveride){pr1ntf ("mov di, "); printCol+=8;}
else {pr1ntf ("mov edi, ");printCol+=9;}
ref=print_i_dword();lclass=1024;
break;
case 0xE8: pr1ntf("call ");
lclass = 11; printCol+=5;
ref = print_rel32();
needCall=1;
if (nextMode) {
if (isGoodAddress(ref))
{
needCallRef=ref;
needCallNext=cur_position+i_col;
lastAnchor=cur_position+i_col-1;
pushTrace(158);
if(nextMode>0) orMap(lastAnchor, 0x80);
popTrace();
}
else fatalError=-18;
}
else printName(cur_position);
break;
case 0xE9: pr1ntf("jmp "); ref = print_rel32();
lclass = 3; printCol+=4;
lastAnchor=cur_position+i_col-1;
needJump=1; needJumpNext=cur_position+i_col;
if (nextMode>0)
{
if (! isGoodAddress(ref)) {lclass=0; fatalError=990;}
else
{
pushTrace(149);
orMap(lastAnchor, 0x80);
popTrace();
}
}
else printName(cur_position);
//leaveFlag=cur_position+i_col;
break;
default: fatalError=111;return -1;
}
return 0;
}
int print5case()
{
if (i_opcode==0x9A)
{
pr3ntf("call far %04X:%08X", i_word,i_dword);
{lclass=15; ref=i_dword;}
printCol+=22;
}
else
{
pr3ntf("jmp far %04X:%08X", i_word,i_dword);
needJump=1; needJumpNext=cur_position+i_col;
{lclass=7; ref=i_dword;}
printCol+=21;
}
return 0;
}
int print6case()
{
int rr;
if (operandOveride) rr=16; else rr=32;
switch(i_opcode)
{
case 0x00: pr1ntf("add "); ref=r_m_( 8); pr1ntf(", "); r___( 8); printCol+=6;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x01: pr1ntf("add "); ref=r_m_(rr); pr1ntf(", "); r___(rr); printCol+=6;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0x02: pr1ntf("add "); r___( 8); pr1ntf(", "); ref=r_m_( 8); printCol+=6;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x03: pr1ntf("add "); r___(rr); pr1ntf(", "); ref=r_m_(rr); printCol+=6;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0x08: pr1ntf("or "); ref=r_m_( 8); pr1ntf(", "); r___( 8); printCol+=5;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x09: pr1ntf("or "); ref=r_m_(rr); pr1ntf(", "); r___(rr); printCol+=5;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0x0A: pr1ntf("or "); r___( 8); pr1ntf(", "); ref=r_m_( 8); printCol+=5;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x0B: pr1ntf("or "); r___(rr); pr1ntf(", "); ref=r_m_(rr); printCol+=5;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0x10: pr1ntf("adc "); ref=r_m_( 8); pr1ntf(", "); r___( 8); printCol+=6;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x11: pr1ntf("adc "); ref=r_m_(rr); pr1ntf(", "); r___(rr); printCol+=6;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0x12: pr1ntf("adc "); r___( 8); pr1ntf(", "); ref=r_m_( 8); printCol+=6;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x13: pr1ntf("adc "); r___(rr); pr1ntf(", "); ref=r_m_(rr); printCol+=6;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0x18: pr1ntf("sbb "); ref=r_m_( 8); pr1ntf(", "); r___( 8); printCol+=6;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x19: pr1ntf("sbb "); ref=r_m_(rr); pr1ntf(", "); r___(rr); printCol+=6;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0x1A: pr1ntf("sbb "); r___( 8); pr1ntf(", "); ref=r_m_( 8); printCol+=6;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x1B: pr1ntf("sbb "); r___(rr); pr1ntf(", "); ref=r_m_(rr); printCol+=6;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0x20: pr1ntf("and "); ref=r_m_( 8); pr1ntf(", "); r___( 8); printCol+=6;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x21: pr1ntf("and "); ref=r_m_(rr); pr1ntf(", "); r___(rr); printCol+=6;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0x22: pr1ntf("and "); r___( 8); pr1ntf(", "); ref=r_m_( 8); printCol+=6;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x23: pr1ntf("and "); r___(rr); pr1ntf(", "); ref=r_m_(rr); printCol+=6;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0x28: pr1ntf("sub "); ref=r_m_( 8); pr1ntf(", "); r___( 8); printCol+=6;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x29: pr1ntf("sub "); ref=r_m_(rr); pr1ntf(", "); r___(rr); printCol+=6;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0x2A: pr1ntf("sub "); r___( 8); pr1ntf(", "); ref=r_m_( 8); printCol+=6;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x2B: pr1ntf("sub "); r___(rr); pr1ntf(", "); ref=r_m_(rr); printCol+=6;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0x30: pr1ntf("xor "); ref=r_m_( 8); pr1ntf(", "); r___( 8); printCol+=6;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x31: pr1ntf("xor "); ref=r_m_(rr); pr1ntf(", "); r___(rr); printCol+=6;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0x32: pr1ntf("xor "); r___( 8); pr1ntf(", "); ref=r_m_( 8); printCol+=6;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x33: pr1ntf("xor "); r___(rr); pr1ntf(", "); ref=r_m_(rr); printCol+=6;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0x38: pr1ntf("cmp "); ref=r_m_( 8); pr1ntf(", "); r___( 8); printCol+=6;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x39: pr1ntf("cmp "); ref=r_m_(rr); pr1ntf(", "); r___(rr); printCol+=6;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0x3A: pr1ntf("cmp "); r___( 8); pr1ntf(", "); ref=r_m_( 8); printCol+=6;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x3B: pr1ntf("cmp "); r___(rr); pr1ntf(", "); ref=r_m_(rr); printCol+=6;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0x62: pr1ntf("bound "); r___(rr); pr1ntf(", "); ref=m32_32(); printCol+=8;
if (isGoodAddress(ref)) lclass=518;
break;
case 0x63: pr1ntf("arpl "); ref=r_m_(16); pr1ntf(", "); r___(16); printCol+=7;
if (isGoodAddress(ref)) lclass=516;
break;
case 0x84: pr1ntf("test "); ref=r_m_( 8); pr1ntf(", "); r___( 8); printCol+=7;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x85: pr1ntf("test "); ref=r_m_(rr); pr1ntf(", "); r___(rr); printCol+=7;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0x86: pr1ntf("xchg "); ref=r_m_( 8); pr1ntf(", "); r___( 8); printCol+=7;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x87: pr1ntf("xchg "); ref=r_m_(rr); pr1ntf(", "); r___(rr); printCol+=7;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0x88: pr1ntf("mov "); ref=r_m_( 8); pr1ntf(", "); r___( 8); printCol+=6;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x89: pr1ntf("mov "); ref=r_m_(rr); pr1ntf(", "); r___(rr); printCol+=6;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=1024;}
break;
case 0x8A: pr1ntf("mov "); r___( 8); pr1ntf(", "); ref=r_m_( 8); printCol+=6;
if (isGoodAddress(ref)) lclass=520;
break;
case 0x8B: pr1ntf("mov "); r___(rr); pr1ntf(", "); ref=r_m_(rr); printCol+=6;
reg=regTable[i_mod]; tempref[reg]=ref; temppos[reg]=cur_position;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=1024;}
break;
case 0x8C: pr1ntf("mov "); ref=r_m_(16); pr1ntf(", "); Sreg__(); printCol+=6;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=1024;}
break;
case 0x8D: pr1ntf("lea "); r___(rr); pr1ntf(", "); ref=m_____(); printCol+=6;
reg=regTable[i_mod]; tempref[reg]=ref; temppos[reg]=cur_position;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0x8E: pr1ntf("mov "); Sreg__(); pr1ntf(", "); ref=r_m_(16); printCol+=6;
if (isGoodAddress(ref)) lclass=516;
break;
case 0xC4: pr1ntf("les es:"); r___(rr); pr1ntf(", "); ref=m16_32(); printCol+=9;
if (isGoodAddress(ref)) lclass=516;
break;
case 0xC5: pr1ntf("lds ds:"); r___(rr); pr1ntf(", "); ref=m16_32(); printCol+=9;
if (isGoodAddress(ref)) lclass=516;
break;
default: fatalError=113;return -1;
}
return 0;
}
int print7case()
{
int rr;
if (operandOveride) rr=16; else rr=32;
pr1ntf("imul "); r___(rr);
if (modTable[i_mod]<8 || regTable[i_mod]!=rmTable[i_mod])
{ pr1ntf(", "); ref=r_m_(rr); printCol+=2;}
pr1ntf(", ");
print_i_byte();
printCol+=7;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
return 0;
}
int print8case()
{
int rr;
if (operandOveride) rr=16; else rr=32;
pr1ntf("imul "); r___(rr);
if (modTable[i_mod]<8 || regTable[i_mod]!=rmTable[i_mod])
{ pr1ntf(", "); ref=r_m_(rr); printCol+=2;}
pr1ntf(", ");
print_i_dword();
printCol+=7;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
return 0;
}
int print9case()
{
int rr;
if (operandOveride) rr=16; else rr=32;
specifierFlag = my_ON;
switch(i_opcode)
{
case 0x8F:
if (regTable[i_mod]>0)
{
fatalError=115;
specifierFlag = my_OFF;
return -1;
}
pr1ntf("pop "); ref=r_m_(rr); printCol+=4;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0xD0:
switch(regTable[i_mod])
{
case 0: pr1ntf("rol "); break;
case 1: pr1ntf("ror "); break;
case 2: pr1ntf("rcl "); break;
case 3: pr1ntf("rcr "); break;
case 4: pr1ntf("shl "); break;
case 5: pr1ntf("shr "); break;
case 7: pr1ntf("sar "); break;
default: fatalError=117;
}
ref=r_m_( 8); pr1ntf(", 1"); printCol+=7;
if (isGoodAddress(ref)) lclass=520;
break;
case 0xD1:
switch(regTable[i_mod])
{
case 0: pr1ntf("rol "); break;
case 1: pr1ntf("ror "); break;
case 2: pr1ntf("rcl "); break;
case 3: pr1ntf("rcr "); break;
case 4: pr1ntf("shl "); break;
case 5: pr1ntf("shr "); break;
case 7: pr1ntf("sar "); break;
default: fatalError=118;
}
ref=r_m_(rr); pr1ntf(", 1"); printCol+=7;
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=514;}
break;
case 0xD2:
switch(regTable[i_mod])
{
case 0: pr1ntf("rol "); break;
case 1: pr1ntf("ror "); break;
case 2: pr1ntf("rcl "); break;
case 3: pr1ntf("rcr "); break;
case 4: pr1ntf("shl "); break;
case 5: pr1ntf("shr "); break;
case 7: pr1ntf("sar "); break;
default: fatalError=119;
}
ref=r_m_( 8); pr1ntf(", cl"); printCol+=8;
if (isGoodAddress(ref)) lclass=520;
break;
case 0xD3:
switch(regTable[i_mod])
{
case 0: pr1ntf("rol "); break;
case 1: pr1ntf("ror "); break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -