📄 print.c
字号:
else {pr1ntf("inc esi");printCol+=7;}
break;
case 0x47: if (operandOveride){pr1ntf("inc di"); printCol+=6;}
else {pr1ntf("inc edi");printCol+=7;}
break;
case 0x48: if (operandOveride){pr1ntf("dec ax"); printCol+=6;}
else {pr1ntf("dec eax");printCol+=7;}
break;
case 0x49: if (operandOveride){pr1ntf("dec cx"); printCol+=6;}
else {pr1ntf("dec ecx");printCol+=7;}
break;
case 0x4A: if (operandOveride){pr1ntf("dec dx"); printCol+=6;}
else {pr1ntf("dec edx");printCol+=7;}
break;
case 0x4B: if (operandOveride){pr1ntf("dec bx"); printCol+=6;}
else {pr1ntf("dec ebx");printCol+=7;}
break;
case 0x4C: if (operandOveride){pr1ntf("dec sp"); printCol+=6;}
else {pr1ntf("dec esp");printCol+=7;}
break;
case 0x4D: if (operandOveride){pr1ntf("dec bp"); printCol+=6;}
else {pr1ntf("dec ebp");printCol+=7;}
break;
case 0x4E: if (operandOveride){pr1ntf("dec si"); printCol+=6;}
else {pr1ntf("dec esi");printCol+=7;}
break;
case 0x4F: if (operandOveride){pr1ntf("dec di"); printCol+=6;}
else {pr1ntf("dec edi");printCol+=7;}
break;
case 0x50: if (operandOveride){pr1ntf("push ax"); printCol+=7;}
else {pr1ntf("push eax");printCol+=8;}
break;
case 0x51: if (operandOveride){pr1ntf("push cx"); printCol+=7;}
else {pr1ntf("push ecx");printCol+=8;}
break;
case 0x52: if (operandOveride){pr1ntf("push dx"); printCol+=7;}
else {pr1ntf("push edx");printCol+=8;}
break;
case 0x53: if (operandOveride){pr1ntf("push bx"); printCol+=7;}
else {pr1ntf("push ebx");printCol+=8;}
break;
case 0x54: if (operandOveride){pr1ntf("push sp"); printCol+=7;}
else {pr1ntf("push esp");printCol+=8;}
break;
case 0x55: if (operandOveride){pr1ntf("push bp"); printCol+=7;}
else {pr1ntf("push ebp");printCol+=8;}
break;
case 0x56: if (operandOveride){pr1ntf("push si"); printCol+=7;}
else {pr1ntf("push esi");printCol+=8;}
break;
case 0x57: if (operandOveride){pr1ntf("push di"); printCol+=7;}
else {pr1ntf("push edi");printCol+=8;}
break;
case 0x58: if (operandOveride){pr1ntf("pop ax"); printCol+=6;}
else {pr1ntf("pop eax");printCol+=7;}
break;
case 0x59: if (operandOveride){pr1ntf("pop cx"); printCol+=6;}
else {pr1ntf("pop ecx");printCol+=7;}
break;
case 0x5A: if (operandOveride){pr1ntf("pop dx"); printCol+=6;}
else {pr1ntf("pop edx");printCol+=7;}
break;
case 0x5B: if (operandOveride){pr1ntf("pop bx"); printCol+=6;}
else {pr1ntf("pop ebx");printCol+=7;}
break;
case 0x5C: if (operandOveride){pr1ntf("pop sp"); printCol+=6;}
else {pr1ntf("pop esp");printCol+=7;}
break;
case 0x5D: if (operandOveride){pr1ntf("pop bp"); printCol+=6;}
else {pr1ntf("pop ebp");printCol+=7;}
break;
case 0x5E: if (operandOveride){pr1ntf("pop si"); printCol+=6;}
else {pr1ntf("pop esi");printCol+=7;}
break;
case 0x5F: if (operandOveride){pr1ntf("pop di"); printCol+=6;}
else {pr1ntf("pop edi");printCol+=7;}
break;
case 0x60: pr1ntf("pushad"); printCol+=6; break;
case 0x61: pr1ntf("popad"); printCol+=5; break;
case 0x6C: pr1ntf("ins byte, port[dx]"); printCol+=18; break;
case 0x6D: pr1ntf("ins dword, port[dx]"); printCol+=19; break;
case 0x6E: pr1ntf("outs port[dx], byte"); printCol+=19; break;
case 0x6F: pr1ntf("outs port[dx], dword"); printCol+=20; break;
case 0x90: pr1ntf("nop"); printCol+=3; break;
case 0x91: if (operandOveride){pr1ntf("xchg ax, cx") ;printCol+=11;}
else {pr1ntf("xchg eax, ecx");printCol+=13;}
break;
case 0x92: if (operandOveride){pr1ntf("xchg ax, dx") ;printCol+=11;}
else {pr1ntf("xchg eax, edx");printCol+=13;}
break;
case 0x93: if (operandOveride){pr1ntf("xchg ax, bx") ;printCol+=11;}
else {pr1ntf("xchg eax, ebx");printCol+=13;}
break;
case 0x94: if (operandOveride){pr1ntf("xchg ax, sp") ;printCol+=11;}
else {pr1ntf("xchg eax, esp");printCol+=13;}
break;
case 0x95: if (operandOveride){pr1ntf("xchg ax, bp") ;printCol+=11;}
else {pr1ntf("xchg eax, ebp");printCol+=13;}
break;
case 0x96: if (operandOveride){pr1ntf("xchg ax, si") ;printCol+=11;}
else {pr1ntf("xchg eax, esi");printCol+=13;}
break;
case 0x97: if (operandOveride){pr1ntf("xchg ax, di") ;printCol+=11;}
else {pr1ntf("xchg eax, edi");printCol+=13;}
break;
case 0x98: pr1ntf("cbw"); printCol+=3; break;
case 0x99: if (operandOveride) {pr1ntf("cwd");}
else {pr1ntf("cdq");} printCol+=3;
break;
case 0x9C: pr1ntf("pushfd"); printCol+=6; break;
case 0x9D: pr1ntf("popfd"); printCol+=5; break;
case 0x9E: pr1ntf("sahf"); printCol+=4; break;
case 0x9F: pr1ntf("lahf"); printCol+=4; break;
case 0xA4: pr1ntf("movsb"); printCol+=5; break;
case 0xA5: if (operandOveride) {pr1ntf ("movsw");}
else {pr1ntf ("movsd");} printCol+=5;
break;
case 0xA6: pr1ntf("cmpsb"); printCol+=5; break;
case 0xA7: if (operandOveride) {pr1ntf ("cmpsw");}
else {pr1ntf ("cmpsd");} printCol+=5;
break;
case 0xAA: pr1ntf("stosb"); printCol+=5; break;
case 0xAB: if (operandOveride) {pr1ntf ("stosw");}
else {pr1ntf ("stosd");} printCol+=5;
break;
case 0xAC: pr1ntf("lodsb"); printCol+=5; break;
case 0xAD: if (operandOveride) {pr1ntf ("lodsw");}
else {pr1ntf ("lodsd");} printCol+=5;
break;
case 0xAE: pr1ntf("scasb"); printCol+=5; break;
case 0xAF: if (operandOveride) {pr1ntf ("scasw");}
else {pr1ntf ("scasd");} printCol+=5;
break;
case 0xC3: pr1ntf("ret"); needspacing=1; printCol+=3;
lastAnchor=cur_position+i_col-1;
needJump=1; needJumpNext=cur_position+i_col;
pushTrace(145);
if(nextMode>0) orMap(lastAnchor, 0x80);
popTrace();
break;
case 0xC9: pr1ntf("leave"); printCol+=5; break;
case 0xCB: pr1ntf("ret(far)"); needspacing=1; printCol+=8;
lastAnchor=cur_position+i_col-1;
needJump=1; needJumpNext=cur_position+i_col;
pushTrace(146);
if(nextMode>0) orMap(lastAnchor, 0x80);
popTrace();
//leaveFlag=cur_position+i_col;
break;
case 0xCC: pr1ntf("int 03"); printCol+=6; break;
case 0xCE: pr1ntf("into"); printCol+=4; break;
case 0xCF: if (operandOveride){pr1ntf ("iret"); printCol+=4;}
else {pr1ntf ("iretd");printCol+=5;}
break;
case 0xD7: pr1ntf("xlatb"); printCol+=5; break;
case 0xEC: pr1ntf("in al, port[dx]"); printCol+=15; break;
case 0xED: if (operandOveride){pr1ntf ("in ax, port[dx]"); printCol+=15;}
else {pr1ntf ("in eax, port[dx]");printCol+=16;}
break;
case 0xEE: pr1ntf("out port[dx], al"); printCol+=16; break;
case 0xEF: if (operandOveride){pr1ntf ("out port[dx], ax"); printCol+=16;}
else {pr1ntf ("out port[dx], eax");printCol+=17;}
break;
case 0xF0: pr1ntf("lock"); printCol+=4; break;
case 0xF4: pr1ntf("hlt"); printCol+=3; break;
case 0xF5: pr1ntf("cmc"); printCol+=3; break;
case 0xF8: pr1ntf("clc"); printCol+=3; break;
case 0xF9: pr1ntf("stc"); printCol+=3; break;
case 0xFA: pr1ntf("cli"); printCol+=3; break;
case 0xFB: pr1ntf("sti"); printCol+=3; break;
case 0xFC: pr1ntf("cld"); printCol+=3; break;
case 0xFD: pr1ntf("std"); printCol+=3; break;
default: fatalError=107;return -1;
}
return 0;
}
int print1case()
{
switch(i_opcode)
{
case 0x04: pr1ntf("add al, "); print_i_byte(); printCol+=8; break;
case 0x0C: pr1ntf("or al, "); print_i_byte(); printCol+=7; break;
case 0x14: pr1ntf("adc al, "); print_i_byte(); printCol+=8; break;
case 0x1C: pr1ntf("sbb al, "); print_i_byte(); printCol+=8; break;
case 0x24: pr1ntf("and al, "); print_i_byte(); printCol+=8; break;
case 0x2C: pr1ntf("sub al, "); print_i_byte(); printCol+=8; break;
case 0x34: pr1ntf("xor al, "); print_i_byte(); printCol+=8; break;
case 0x3C: pr1ntf("cmp al, "); print_i_byte(); printCol+=8; break;
case 0x6A: pr1ntf("push "); print_i_byte32(); printCol+=5; break;
case 0x70: pr1ntf("jo "); print_rel8(); printCol+=3; break;
case 0x71: pr1ntf("jno "); print_rel8(); printCol+=4; break;
case 0x72: pr1ntf("jc "); print_rel8(); printCol+=3; break;
case 0x73: pr1ntf("jae "); print_rel8(); printCol+=4; break;
case 0x74: pr1ntf("je "); print_rel8(); printCol+=3; break;
case 0x75: pr1ntf("jne "); print_rel8(); printCol+=4; break;
case 0x76: pr1ntf("jbe "); print_rel8(); printCol+=4; break;
case 0x77: pr1ntf("ja "); print_rel8(); printCol+=3; break;
case 0x78: pr1ntf("js "); print_rel8(); printCol+=3; break;
case 0x79: pr1ntf("jns "); print_rel8(); printCol+=4; break;
case 0x7A: pr1ntf("jpe "); print_rel8(); printCol+=4; break;
case 0x7B: pr1ntf("jpo "); print_rel8(); printCol+=4; break;
case 0x7C: pr1ntf("jl "); print_rel8(); printCol+=3; break;
case 0x7D: pr1ntf("jge "); print_rel8(); printCol+=4; break;
case 0x7E: pr1ntf("jle "); print_rel8(); printCol+=4; break;
case 0x7F: pr1ntf("jg "); print_rel8(); printCol+=3; break;
case 0xA8: pr1ntf("test al, "); print_i_byte(); printCol+=9; break;
case 0xB0: pr1ntf("mov al, "); print_i_byte(); printCol+=8; break;
case 0xB1: pr1ntf("mov cl, "); print_i_byte(); printCol+=8; break;
case 0xB2: pr1ntf("mov dl, "); print_i_byte(); printCol+=8; break;
case 0xB3: pr1ntf("mov bl, "); print_i_byte(); printCol+=8; break;
case 0xB4: pr1ntf("mov ah, "); print_i_byte(); printCol+=8; break;
case 0xB5: pr1ntf("mov ch, "); print_i_byte(); printCol+=8; break;
case 0xB6: pr1ntf("mov dh, "); print_i_byte(); printCol+=8; break;
case 0xB7: pr1ntf("mov bh, "); print_i_byte(); printCol+=8; break;
case 0xCD: pr1ntf("int "); print_i_byte(); printCol+=4; break;
case 0xD4: pr1ntf("aam "); printCol+=4; break;
case 0xD5: pr1ntf("aad "); printCol+=4; break;
case 0xE0: pr1ntf("loopne "); print_rel8(); printCol+=7; break;
case 0xE1: pr1ntf("loope "); print_rel8(); printCol+=6; break;
case 0xE2: pr1ntf("loop "); print_rel8(); printCol+=5; break;
case 0xE3: pr1ntf("jecxz "); print_rel8(); printCol+=6; break;
case 0xE4: pr1ntf("in al, port["); print_i_byte(); pr1ntf("]"); printCol+=13; break;
case 0xE5: pr1ntf("in eax, port[");print_i_byte(); pr1ntf("]"); printCol+=14; break;
case 0xE6: pr1ntf("out port["); print_i_byte(); pr1ntf("], al"); printCol+=14; break;
case 0xE7: pr1ntf("out port["); print_i_byte(); pr1ntf("], eax");printCol+=15; break;
case 0xEB: pr1ntf("jmp "); ref=print_rel8(); printCol+=4;
if (nextMode>0)
{
if (isThisSecure(ref) || referCount(ref)>2 ||
(opclassSave==2 && (opsave&0x80)) )
{
lastAnchor=cur_position+i_col-1;
pushTrace(147);
orMap(lastAnchor, 0x80);
popTrace();
}
}
break;
default: fatalError=109;return -1;
}
return 0;
}
int print2case()
{
if (i_opcode==0xC2)
{
pr2ntf("ret %04X", i_word); needspacing=1;
needJump=1; needJumpNext=cur_position+i_col;
}
else
{
pr2ntf("ret %04X", i_word); needspacing=1;
needJump=1; needJumpNext=cur_position+i_col;
}
printCol+=8;
lastAnchor = cur_position+i_col-1;
pushTrace(148);
if(nextMode>0) orMap(lastAnchor, 0x80);
popTrace();
//leaveFlag=cur_position+i_col;
return 0;
}
int print3case()
{
pr2ntf("enter %04X, ", i_word); print_i_byte();
printCol+=10;
return 0;
}
int print4case()
{
switch(i_opcode)
{
case 0x05: if (operandOveride){pr1ntf ("add ex, "); printCol+=8;}
else {pr1ntf ("add eax, ");printCol+=9;}
print_i_dword();
break;
case 0x0D: if (operandOveride){pr1ntf ("or ax, "); printCol+=7;}
else {pr1ntf ("or eax, "); printCol+=8;}
print_i_dword();
break;
case 0x15: if (operandOveride){pr1ntf ("adc ax, "); printCol+=8;}
else {pr1ntf ("adc eax, ");printCol+=9;}
print_i_dword();
break;
case 0x1D: if (operandOveride){pr1ntf ("sbb ax, "); printCol+=8;}
else {pr1ntf ("sbb eax, ");printCol+=9;}
print_i_dword();
break;
case 0x25: if (operandOveride){pr1ntf ("and ax, "); printCol+=8;}
else {pr1ntf ("and eax, ");printCol+=9;}
print_i_dword();
break;
case 0x2D: if (operandOveride){pr1ntf ("sub ax, "); printCol+=8;}
else {pr1ntf ("sub eax, ");printCol+=9;}
print_i_dword();
break;
case 0x35: if (operandOveride){pr1ntf ("xor ax, "); printCol+=8;}
else {pr1ntf ("xor eax, ");printCol+=9;}
print_i_dword();
break;
case 0x3D: if (operandOveride){pr1ntf ("cmp ax, "); printCol+=8;}
else {pr1ntf ("cmp eax, ");printCol+=9;}
print_i_dword();
break;
case 0x68: pr1ntf("push "); ref=print_i_dword(); // this is OK
// well I really don't know it is reasonably safe to do this.
// I think when we push some (possible) address references into stack
// there is strong reason to do so. that's why i am doing this. i guess...
lclass=512; printCol+=5;
break;
case 0xA0: pr1ntf("mov al, byte"); print_moff(); printCol+=12;
break;
case 0xA1: if (operandOveride){pr1ntf ("mov ax, word"); printCol+=12;}
else {pr1ntf ("mov eax, dword");printCol+=14;}
ref=print_moff();
if (isGoodAddress(ref))
{if (operandOveride) lclass=516; else lclass=1024;}
break;
case 0xA2: pr1ntf("mov byte");print_moff();pr1ntf(", al");printCol+=12;
break;
case 0xA3: if (operandOveride){pr1ntf ("mov word"); printCol+=12;}
else {pr1ntf ("mov dword");printCol+=14;}
print_moff();
if (operandOveride){pr1ntf (", ax");}
else {pr1ntf (", eax");}
break;
case 0xA9: if (operandOveride){pr1ntf ("test ax, "); printCol+= 9;}
else {pr1ntf ("test eax, ");printCol+=10;}
print_i_dword();
break;
case 0xB8: if (operandOveride){pr1ntf ("mov ax, "); printCol+=8;}
else {pr1ntf ("mov eax, ");printCol+=9;}
ref=print_i_dword();lclass=1024;
break;
case 0xB9: if (operandOveride){pr1ntf ("mov cx, "); printCol+=8;}
else {pr1ntf ("mov ecx, ");printCol+=9;}
ref=print_i_dword();lclass=1024;
break;
case 0xBA: if (operandOveride){pr1ntf ("mov dx, "); printCol+=8;}
else {pr1ntf ("mov edx, ");printCol+=9;}
ref=print_i_dword();lclass=1024;
break;
case 0xBB: if (operandOveride){pr1ntf ("mov bx, "); printCol+=8;}
else {pr1ntf ("mov ebx, ");printCol+=9;}
ref=print_i_dword();lclass=1024;
break;
case 0xBC: if (operandOveride){pr1ntf ("mov sp, "); printCol+=8;}
else {pr1ntf( "mov esp, ");printCol+=9;}
ref=print_i_dword();lclass=1024;
break;
case 0xBD: if (operandOveride){pr1ntf ("mov bp, "); printCol+=8;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -