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

📄 print.c

📁 win32program disassembler
💻 C
📖 第 1 页 / 共 5 页
字号:
    
    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 + -