📄 print1.c
字号:
prxntf("\n (StringData)\"%s\"",p);
return 1;
}
int print0case()
{
switch(i_opcode)
{
case 0x06: prxntf("push es"); break;
case 0x07: prxntf("pop es"); break;
case 0x0E: prxntf("push cs"); break;
case 0x16: prxntf("push ss"); break;
case 0x17: prxntf("pop ss"); break;
case 0x1E: prxntf("push ds"); break;
case 0x1F: prxntf("pop ds"); break;
case 0x27: prxntf("daa"); break;
case 0x2F: prxntf("das"); break;
case 0x37: prxntf("aaa"); break;
case 0x3F: prxntf("aas"); break;
case 0x40: if (operandOveride) prxntf("inc ax");
else prxntf("inc eax");
break;
case 0x41: if (operandOveride) prxntf("inc cx");
else prxntf("inc ecx");
break;
case 0x42: if (operandOveride) prxntf("inc dx");
else prxntf("inc edx");
break;
case 0x43: if (operandOveride) prxntf("inc bx");
else prxntf("inc ebx");
break;
case 0x44: if (operandOveride) prxntf("inc sp");
else prxntf("inc esp");
break;
case 0x45: if (operandOveride) prxntf("inc bp");
else prxntf("inc ebp");
break;
case 0x46: if (operandOveride) prxntf("inc si");
else prxntf("inc esi");
break;
case 0x47: if (operandOveride) prxntf("inc di");
else prxntf("inc edi");
break;
case 0x48: if (operandOveride) prxntf("dec ax");
else prxntf("dec eax");
break;
case 0x49: if (operandOveride) prxntf("dec cx");
else prxntf("dec ecx");
break;
case 0x4A: if (operandOveride) prxntf("dec dx");
else prxntf("dec edx");
break;
case 0x4B: if (operandOveride) prxntf("dec bx");
else prxntf("dec ebx");
break;
case 0x4C: if (operandOveride) prxntf("dec sp");
else prxntf("dec esp");
break;
case 0x4D: if (operandOveride) prxntf("dec bp");
else prxntf("dec ebp");
break;
case 0x4E: if (operandOveride) prxntf("dec si");
else prxntf("dec esi");
break;
case 0x4F: if (operandOveride) prxntf("dec di");
else prxntf("dec edi");
break;
case 0x50: if (operandOveride) prxntf("push ax");
else prxntf("push eax");
break;
case 0x51: if (operandOveride) prxntf("push cx");
else prxntf("push ecx");
break;
case 0x52: if (operandOveride) prxntf("push dx");
else prxntf("push edx");
break;
case 0x53: if (operandOveride) prxntf("push bx");
else prxntf("push ebx");
break;
case 0x54: if (operandOveride) prxntf("push sp");
else prxntf("push esp");
break;
case 0x55: if (operandOveride) prxntf("push bp");
else prxntf("push ebp");
break;
case 0x56: if (operandOveride) prxntf("push si");
else prxntf("push esi");
break;
case 0x57: if (operandOveride) prxntf("push di");
else prxntf("push edi");
break;
case 0x58: if (operandOveride) prxntf("pop ax");
else prxntf("pop eax");
break;
case 0x59: if (operandOveride) prxntf("pop cx");
else prxntf("pop ecx");
break;
case 0x5A: if (operandOveride) prxntf("pop dx");
else prxntf("pop edx");
break;
case 0x5B: if (operandOveride) prxntf("pop bx");
else prxntf("pop ebx");
break;
case 0x5C: if (operandOveride) prxntf("pop sp");
else prxntf("pop esp");
break;
case 0x5D: if (operandOveride) prxntf("pop bp");
else prxntf("pop ebp");
break;
case 0x5E: if (operandOveride) prxntf("pop si");
else prxntf("pop esi");
break;
case 0x5F: if (operandOveride) prxntf("pop di");
else prxntf("pop edi");
break;
case 0x60: prxntf("pushad"); break;
case 0x61: prxntf("popad"); break;
case 0x6C: prxntf("ins byte, port[dx]"); break;
case 0x6D: prxntf("ins dword, port[dx]"); break;
case 0x6E: prxntf("outs port[dx], byte"); break;
case 0x6F: prxntf("outs port[dx], dword"); break;
case 0x90: prxntf("nop"); break;
case 0x91: if (operandOveride) prxntf("xchg ax, cx");
else prxntf("xchg eax, ecx");
break;
case 0x92: if (operandOveride) prxntf("xchg ax, dx");
else prxntf("xchg eax, edx");
break;
case 0x93: if (operandOveride) prxntf("xchg ax, bx");
else prxntf("xchg eax, ebx");
break;
case 0x94: if (operandOveride) prxntf("xchg ax, sp");
else prxntf("xchg eax, esp");
break;
case 0x95: if (operandOveride) prxntf("xchg ax, bp");
else prxntf("xchg eax, ebp");
break;
case 0x96: if (operandOveride) prxntf("xchg ax, si");
else prxntf("xchg eax, esi");
break;
case 0x97: if (operandOveride) prxntf("xchg ax, di");
else prxntf("xchg eax, edi");
break;
case 0x98: prxntf("cbw"); break;
case 0x99: if (operandOveride) prxntf("cwd");
else prxntf("cdq");
break;
case 0x9C: prxntf("pushfd"); break;
case 0x9D: prxntf("popfd"); break;
case 0x9E: prxntf("sahf"); break;
case 0x9F: prxntf("lahf"); break;
case 0xA4: prxntf("movsb"); break;
case 0xA5: if (operandOveride) prxntf ("movsw");
else prxntf ("movsd");
break;
case 0xA6: prxntf("cmpsb"); break;
case 0xA7: if (operandOveride) prxntf ("cmpsw");
else prxntf ("cmpsd");
break;
case 0xAA: prxntf("stosb"); break;
case 0xAB: if (operandOveride) prxntf ("stosw");
else prxntf ("stosd");
break;
case 0xAC: prxntf("lodsb"); break;
case 0xAD: if (operandOveride) prxntf ("lodsw");
else prxntf ("lodsd");
break;
case 0xAE: prxntf("scasb"); break;
case 0xAF: if (operandOveride) prxntf ("scasw");
else prxntf ("scasd");
break;
case 0xC3: prxntf("ret"); needspacing=1;
lastAnchor=cur_position+i_col-1;
*(unsigned char *)((int)lpMap+a_loc_save+delta+i_col-1) |= 0x80;
break;
case 0xC9: prxntf("leave"); break;
case 0xCB: prxntf("ret(far)"); needspacing=1;
lastAnchor=cur_position+i_col-1;
*(unsigned char *)((int)lpMap+a_loc_save+delta+i_col-1) |= 0x80;
//leaveFlag=cur_position+i_col;
break;
case 0xCC: prxntf("int 03"); break;
case 0xCE: prxntf("into"); break;
case 0xCF: if (operandOveride) prxntf ("iret");
else prxntf ("iretd");
break;
case 0xD7: prxntf("xlatb"); break;
case 0xEC: prxntf("in al, port[dx]"); break;
case 0xED: if (operandOveride) prxntf ("in ax, port[dx]");
else prxntf ("in eax, port[dx]");
break;
case 0xEE: prxntf("out port[dx], al"); break;
case 0xEF: if (operandOveride) prxntf ("out port[dx], ax");
else prxntf ("out port[dx], eax");
break;
case 0xF0: prxntf("lock"); break;
case 0xF4: prxntf("hlt"); break;
case 0xF5: prxntf("cmc"); break;
case 0xF8: prxntf("clc"); break;
case 0xF9: prxntf("stc"); break;
case 0xFA: prxntf("cli"); break;
case 0xFB: prxntf("sti"); break;
case 0xFC: prxntf("cld"); break;
case 0xFD: prxntf("std"); break;
default: fatalError=107;return -1;
}
return 0;
}
int print1case()
{
switch(i_opcode)
{
case 0x04: prxntf("add al, "); print_i_byte(); break;
case 0x0C: prxntf("or al, "); print_i_byte(); break;
case 0x14: prxntf("adc al, "); print_i_byte(); break;
case 0x1C: prxntf("sbb al, "); print_i_byte(); break;
case 0x24: prxntf("and al, "); print_i_byte(); break;
case 0x2C: prxntf("sub al, "); print_i_byte(); break;
case 0x34: prxntf("xor al, "); print_i_byte(); break;
case 0x3C: prxntf("cmp al, "); print_i_byte(); break;
case 0x6A: prxntf("push "); print_i_byte32(); break;
case 0x70: prxntf("jo "); print_rel8(); break;
case 0x71: prxntf("jno "); print_rel8(); break;
case 0x72: prxntf("jc "); print_rel8(); break;
case 0x73: prxntf("jae "); print_rel8(); break;
case 0x74: prxntf("je "); print_rel8(); break;
case 0x75: prxntf("jne "); print_rel8(); break;
case 0x76: prxntf("jbe "); print_rel8(); break;
case 0x77: prxntf("ja "); print_rel8(); break;
case 0x78: prxntf("js "); print_rel8(); break;
case 0x79: prxntf("jns "); print_rel8(); break;
case 0x7A: prxntf("jpe "); print_rel8(); break;
case 0x7B: prxntf("jpo "); print_rel8(); break;
case 0x7C: prxntf("jl "); print_rel8(); break;
case 0x7D: prxntf("jge "); print_rel8(); break;
case 0x7E: prxntf("jle "); print_rel8(); break;
case 0x7F: prxntf("jg "); print_rel8(); break;
case 0xA8: prxntf("test al, "); print_i_byte(); break;
case 0xB0: prxntf("mov al, "); print_i_byte(); break;
case 0xB1: prxntf("mov cl, "); print_i_byte(); break;
case 0xB2: prxntf("mov dl, "); print_i_byte(); break;
case 0xB3: prxntf("mov bl, "); print_i_byte(); break;
case 0xB4: prxntf("mov ah, "); print_i_byte(); break;
case 0xB5: prxntf("mov ch, "); print_i_byte(); break;
case 0xB6: prxntf("mov dh, "); print_i_byte(); break;
case 0xB7: prxntf("mov bh, "); print_i_byte(); break;
case 0xCD: prxntf("int "); print_i_byte(); break;
case 0xD4: prxntf("aam "); break;
case 0xD5: prxntf("aad "); break;
case 0xE0: prxntf("loopne "); print_rel8(); break;
case 0xE1: prxntf("loope "); print_rel8(); break;
case 0xE2: prxntf("loop "); print_rel8(); break;
case 0xE3: prxntf("jecxz "); print_rel8(); break;
case 0xE4: prxntf("in al, port["); print_i_byte(); prxntf("]");break;
case 0xE5: prxntf("in eax, port[");print_i_byte(); prxntf("]");break;
case 0xE6: prxntf("out port["); print_i_byte(); prxntf("], al"); break;
case 0xE7: prxntf("out port["); print_i_byte(); prxntf("], eax"); break;
case 0xEB: prxntf("jmp "); print_rel8();
if (nextMode>2 && referCount(ref)>3)
{
lastAnchor=cur_position+i_col-1;
*(unsigned char *)((int)lpMap+a_loc_save+delta+i_col-1) |= 0x80;
}
break;
default: fatalError=109;return -1;
}
return 0;
}
int print2case()
{
if (i_opcode==0xC2)
{
prxntf("ret %04X", i_word); needspacing=1;
}
else
{
prxntf("ret %04X", i_word); needspacing=1;
}
lastAnchor = cur_position+i_col-1;
*(unsigned char *)((int)lpMap+a_loc_save+delta+i_col-1) |= 0x80;
//leaveFlag=cur_position+i_col;
return 0;
}
int print3case()
{
prxntf("enter %04X, ", i_word); print_i_byte();
return 0;
}
int print4case()
{
switch(i_opcode)
{
case 0x05: if (operandOveride) prxntf ("add ex, ");
else prxntf ("add eax, ");
print_i_dword();
break;
case 0x0D: if (operandOveride) prxntf ("or ax, ");
else prxntf ("or eax, ");
print_i_dword();
break;
case 0x15: if (operandOveride) prxntf ("adc ax, ");
else prxntf ("adc eax, ");
print_i_dword();
break;
case 0x1D: if (operandOveride) prxntf ("sbb ax, ");
else prxntf ("sbb eax, ");
print_i_dword();
break;
case 0x25: if (operandOveride) prxntf ("and ax, ");
else prxntf ("and eax, ");
print_i_dword();
break;
case 0x2D: if (operandOveride) prxntf ("sub ax, ");
else prxntf ("sub eax, ");
print_i_dword();
break;
case 0x35: if (operandOveride) prxntf ("xor ax, ");
else prxntf ("xor eax, ");
print_i_dword();
break;
case 0x3D: if (operandOveride) prxntf ("cmp ax, ");
else prxntf ("cmp eax, ");
print_i_dword();
break;
case 0x68: prxntf("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...
class=512;
break;
case 0xA0: prxntf("mov al, byte"); print_moff();
break;
case 0xA1: if (operandOveride) prxntf ("mov ax, word");
else prxntf ("mov eax, dword");
print_moff();
break;
case 0xA2: prxntf("mov byte");print_moff();prxntf(", al");
break;
case 0xA3: if (operandOveride) prxntf("mov word");
else prxntf("mov dword");
print_moff();
if (operandOveride) prxntf (", ax");
else prxntf (", eax");
break;
case 0xA9: if (operandOveride) prxntf ("test ax, ");
else prxntf ("test eax, ");
print_i_dword();
break;
case 0xB8: if (operandOveride) prxntf ("mov ax, ");
else prxntf ("mov eax, ");
ref=print_i_dword();class=1024;
break;
case 0xB9: if (operandOveride) prxntf ("mov cx, ");
else prxntf ("mov ecx, ");
ref=print_i_dword();class=1024;
break;
case 0xBA: if (operandOveride) prxntf ("mov dx, ");
else prxntf ("mov edx, ");
ref=print_i_dword();class=1024;
break;
case 0xBB: if (operandOveride) prxntf ("mov bx, ");
else prxntf ("mov ebx, ");
ref=print_i_dword();class=1024;
break;
case 0xBC: if (operandOveride) prxntf ("mov sp, ");
else prxntf( "mov esp, ");
ref=print_i_dword();class=1024;
break;
case 0xBD: if (operandOveride) prxntf ("mov bp, ");
else prxntf("mov ebp, ");
ref=print_i_dword();class=1024;
break;
case 0xBE: if (operandOveride) prxntf ("mov si, ");
else prxntf("mov esi, ");
ref=print_i_dword();class=1024;
break;
case 0xBF: if (operandOveride) prxntf ("mov di, ");
else prxntf("mov edi, ");
ref=print_i_dword();class=1024;
break;
case 0xE8: prxntf("call ");
if (nextMode) {
ref = print_rel32();
class = 11;
}
else if (!printName(cur_position))
print_rel32();
break;
case 0xE9: prxntf("jmp "); ref = print_rel32();
class = 3;
lastAnchor=cur_position+i_col-1;
*(unsigned char *)((int)lpMap+a_loc_save+delta+i_col-1) |= 0x80;
//leaveFlag=cur_position+i_col;
break;
default: fatalError=111;return -1;
}
return 0;
}
int print5case()
{
if (i_opcode==0x9A)
{
prxntf("call far %04X:%08X", i_word,i_dword);
{class=15; ref=i_dword;}
}
else
{
prxntf("jmp far %04X:%08X", i_word,i_dword);
{class=7; ref=i_dword;}
}
return 0;
}
int print6case()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -