📄 print.c
字号:
lclass = 0;
ref = 0;
dref = 0;
a_loc_save=a_loc;
i_col_save=i_col;
i_psp=0;
i_col=0;
operandOveride = 0;
return 1;
}
int bodyprint4()
{
int i, j, n;
if (GotEof) return 0;
n=stringBuf[0];j=0;
for (i=0;i<n+1;i++)
{if(j++==16) {pr1ntf("\n ");j=1;}pr2ntf("%02X ",stringBuf[i]);}
for(i=j;i<max_col+4;i++)pr1ntf(" "); pr1ntf(" ");
pr2ntf (";;p %c",'"');
n=stringBuf[0];
for (i=1;i<n+1;i++)pr2ntf("%c",stringBuf[i]);
pr2ntf("%c",'"');
lclass = 0;
ref = 0;
dref = 0;
a_loc_save=a_loc;
i_col_save=i_col;
i_psp=0;
i_col=0;
operandOveride = 0;
return 1;
}
int bodyprint5()
{
int i, j;
if (GotEof) return 0;
i=0; j=0;
while(stringBuf[i]>-1)
{if(j++==16) {pr1ntf("\n ");j=1;}pr2ntf("%02X ",stringBuf[i++]);}
for(i=j;i<max_col+4;i++)pr1ntf(" "); pr1ntf(" ");
pr2ntf (";;n %c",'"');
i=0;
while(isprint(stringBuf[i])) pr2ntf("%c",stringBuf[i++]);
pr2ntf("%c",'"');
lclass = 0;
ref = 0;
dref = 0;
a_loc_save=a_loc;
i_col_save=i_col;
i_psp=0;
i_col=0;
operandOveride = 0;
return 1;
}
int bodyprint6()
{
int i, j, n;
if (GotEof) return 0;
pushTrace(392);
if (nextMode>0);
else
{
for(i=i_col;i<max_col;i++) pr1ntf(" ");
pr2ntf ("WORD %04X", m_dword); printCol = 9;
for(i=printCol;i<26;i++) pr1ntf(" ");
n=m_dword; pr1ntf(";; ");
j=n%256; n/=256; if(isprint(j)) {pr2ntf("%c",j);} else {pr1ntf(".");}
if(isprint(n)) {pr2ntf("%c",n);} else {pr1ntf(".");}
}
popTrace();
lclass = 0;
ref = 0;
dref = 0;
a_loc_save=a_loc;
i_col_save=i_col;
i_psp=0;
i_col=0;
operandOveride = 0;
printCol=0;
return 1;
}
int isEntry(DWORD pos)
{
BYTE b=getMap(pos);
if (isGoodAddress(pos)
&&((b&0x40)==0x40)) return 1;
else return 0;
}
int GotName(int class, DWORD pos, DWORD pos1)
{
int i;
int r;
char *p;
_key_ k;
PKEY pk;
r=((int)pos);
if ((int)lpFile<r&&r<(int)lpFile+fsize)
{
k.c_ref=pos; k.c_pos=-1; k.class=0;
pk = searchBtreeX(&k);
if ((pk!=NULL)&&((int)piNameBuff<=TOINT(pk->c_pos))
&&(TOINT(pk->c_pos)<(int)piNameBuff+piNameBuffSize))
{
pr1ntf("\n");
for(i=0;i<28;i++)pr1ntf(" ");
p=strtok((char *)(pk->c_pos),".");
if (class<10) {pr2ntf(";;jmp %s",p);} else {pr2ntf(";;call %s",p);}
pr1ntf(".");
if (*(PBYTE)(r+2)==0x00 && *(PBYTE)(r+3)==0x80)
{
pr2ntf("Thunk:%04X",*(short *)r);
}
else
{
p=TranslateFunctionName((char *)r);
pr2ntf("%s",p);
}
return 1;
}
}
if ((int)peNameBuff<r&&r<(int)peNameBuff+peNameBuffSize)
{
pr1ntf("\n");
for(i=0;i<28;i++)pr1ntf(" ");
p=TranslateFunctionName((char *)r);
pr2ntf(";;%s",p);
return 1;
}
if (isEntry(pos1) && ref!=pos1)
{
pr2ntf(" ;; %08X",(int)pos1);
return 1;
}
return 0;
}
int printName(DWORD pos)
{
DWORD r;
_key_ k, k1, k2, k3;
PKEY pk;
int found;
// this is very tricky.. i need to be extremely careful. oct.31,1997sangcho
k.c_ref=pos; k.c_pos=-1; k.class=0;
pk = searchBtree1(&k);
if(pk==NULL) return 0;
k1=*pk;
k.c_ref=k1.c_pos; k.c_pos=-1; k.class=0;
pk=searchBtreeX(&k);
if (pk!=NULL) found=1;
else found=0;
if (found || AddressCheck(k1.c_pos))
{
r=k1.c_pos;
k.c_ref=r; k.c_pos=-1; k.class=0;
pk = searchBtreeX(&k);
if (pk!=NULL)
{
return GotName(pk->class, pk->c_pos, k1.c_pos);
}
pk = searchBtree1(&k);
if(pk==NULL)
{
if (isEntry(k1.c_pos) && ref!=k1.c_pos)
{
pr2ntf(" ;; %08X",(int)(k1.c_pos));
return 1;
}
return 0;
}
k2=*pk;
k.c_ref=k2.c_pos; k.c_pos=-1; k.class=0;
pk = searchBtreeX(&k);
if(pk==NULL)
{
if (isEntry(k1.c_pos) && ref!=k1.c_pos)
{
pr2ntf(" ;; %08X",(int)(k1.c_pos));
return 1;
}
return 0;
}
k3=*pk;
return GotName(k3.class, k3.c_pos, k1.c_pos);
}
return 1;
}
int printExportName1(DWORD ref)
{
int r;
_key_ k;
PKEY pk;
PBYTE p;
k.c_ref=ref; k.c_pos=-1; k.class=0;
pk = searchBtreeX(&k);
if(pk==NULL) return 0;
r=((int)(pk->c_pos));
if ((int)peNameBuff<r&&r<(int)peNameBuff+peNameBuffSize)
{
p=TranslateFunctionName((char *)r);
pr2ntf("%s",p);
}
return 1;
}
int printExportName()
{
BYTE b, d;
d=getByteFile(cur_position);
if (d==0xC3)
{
b=getMap(cur_position);
if (b&0x40) return printEntryMark();
if (b&0x20) return printLabelMark();
return 1;
}
pr1ntf("\n=========\n");
printExportName1(cur_position);
pr1ntf("\n=========");
return 1;
}
int printEntryMark()
{
pr1ntf("\n=========");
return 1;
}
int printLabelMark()
{
pr1ntf("\n---------");
return 1;
}
int printDataMark()
{
_key_ k;
PKEY pk;
int c;
k.c_ref=cur_position; k.c_pos=-1; k.class=0;
pk = searchBtree3(&k);
if (pk==NULL) {pr1ntf("\n---------");return 1;}
c=pk->class; lclass=c;
if (c==514) {pr1ntf("\n#########..DWORD..");}
else if (c==515) {pr1ntf("\n#########..14/24bytes.");}
else if (c==516) {pr1ntf("\n#########..WORD...");}
else if (c==517) {pr1ntf("\n#########..80real..");}
else if (c==518) {pr1ntf("\n#########..8bytes...");}
else if (c==524) {pr1ntf("\n#########..32real.");}
else if (c==528) {pr1ntf("\n#########..64real.");}
else {pr1ntf("\n#########");}
return 1;
}
int printString()
{
DWORD r;
_key_ k;
PKEY pk;
PBYTE p;
k.c_ref=cur_position; k.c_pos=-1; k.class=0;
pk = searchBtree1(&k);
if(pk==NULL) return 0;
r=pk->c_pos;
p=toFile(r);
pr1ntf("\n (StringData)");
pr2ntf("%c",'"');
while(isprint(*p)) {pr2ntf("%c",*p);p++;}
if (*p==0x0D && *(p+1)==0x0A) {pr1ntf(" <cr><lf>");}
else if (*p==0x0A)
{
pr1ntf(" <lf>");
if (*(p+1)==0x0A) {pr1ntf(" <lf>");}
}
else if (*p==0x09)
{
pr1ntf(" <t>");
if (*(p+1)==0x09) {pr1ntf(" <t>");}
}
pr2ntf("%c",'"');
return 1;
}
int print0case()
{
switch(i_opcode)
{
case 0x06: pr1ntf("push es"); printCol+=7; break;
case 0x07: pr1ntf("pop es"); printCol+=6; break;
case 0x0E: pr1ntf("push cs"); printCol+=7; break;
case 0x16: pr1ntf("push ss"); printCol+=7; break;
case 0x17: pr1ntf("pop ss"); printCol+=6; break;
case 0x1E: pr1ntf("push ds"); printCol+=7; break;
case 0x1F: pr1ntf("pop ds"); printCol+=6; break;
case 0x27: pr1ntf("daa"); printCol+=3; break;
case 0x2F: pr1ntf("das"); printCol+=3; break;
case 0x37: pr1ntf("aaa"); printCol+=3; break;
case 0x3F: pr1ntf("aas"); printCol+=3; break;
case 0x40: if (operandOveride){pr1ntf("inc ax"); printCol+=6;}
else {pr1ntf("inc eax");printCol+=7;}
break;
case 0x41: if (operandOveride){pr1ntf("inc cx"); printCol+=6;}
else {pr1ntf("inc ecx");printCol+=7;}
break;
case 0x42: if (operandOveride){pr1ntf("inc dx"); printCol+=6;}
else {pr1ntf("inc edx");printCol+=7;}
break;
case 0x43: if (operandOveride){pr1ntf("inc bx"); printCol+=6;}
else {pr1ntf("inc ebx");printCol+=7;}
break;
case 0x44: if (operandOveride){pr1ntf("inc sp"); printCol+=6;}
else {pr1ntf("inc esp");printCol+=7;}
break;
case 0x45: if (operandOveride){pr1ntf("inc bp"); printCol+=6;}
else {pr1ntf("inc ebp");printCol+=7;}
break;
case 0x46: if (operandOveride){pr1ntf("inc si"); printCol+=6;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -