convertingprocess.c

来自「这是一个开放源代码的与WINNT/WIN2K/WIN2003兼容的操作系统」· C语言 代码 · 共 101 行

C
101
字号
#include <windows.h>
#include <winnt.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "misc.h"
#include "any_op.h"

/* hack should be in misc.h*/


CPU_INT ConvertProcess(FILE *outfp, CPU_INT FromCpuid, CPU_INT ToCpuid)
{
    CPU_INT ret=0;
   CPU_INT regbits=-1;
   CPU_INT HowManyRegInUse = 0;
   CPU_INT RegTableCount[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
   CPU_INT t;
   PMYBrainAnalys pMystart = pStartMyBrainAnalys;
   PMYBrainAnalys pMyend = pMyBrainAnalys;

   PMYBrainAnalys ptmpMystart = pStartMyBrainAnalys;
   PMYBrainAnalys ptmpMyend = pMyBrainAnalys;

   if ( (FromCpuid == IMAGE_FILE_MACHINE_POWERPC) ||
        (FromCpuid == IMAGE_FILE_MACHINE_I386))
    {
        regbits = 32 / 8;
    }

    /* FIXME calc where todo first split */

   /* count how many register we got */
    ptmpMystart = pMystart;
    ptmpMyend = pMyend;
    while (ptmpMystart!=NULL)
    {
        if ((ptmpMystart->type & 2) == 2)
            RegTableCount[ptmpMystart->src]++;

        if ((ptmpMystart->type & 8) == 8)
            RegTableCount[ptmpMystart->dst]++;

        if ((ptmpMystart->type & 32) == 32)
            RegTableCount[ptmpMystart->src]++;

        if ((ptmpMystart->type & 64) == 64)
            RegTableCount[ptmpMystart->dst]++;

        if (ptmpMystart == ptmpMyend)
            ptmpMystart=NULL;
        else
            ptmpMystart = (PMYBrainAnalys) ptmpMystart->ptr_next;
    }

    for (t=0;t<=31;t++)
    {
        if (RegTableCount[t]!=0)
        {
            HowManyRegInUse++;
            RegTableCount[t]=t;
        }
    }


    /* switch to the acual converting now */
    switch (ToCpuid)
    {
        case IMAGE_FILE_MACHINE_I386:
             ret = ConvertToIA32Process( outfp, pMystart, 
                                         pMyend, regbits,
                                         HowManyRegInUse,
                                         RegTableCount);
             if (ret !=0)
             {
                 printf("should not happen contact a devloper, x86 fail\n");
                 return -1;
             }
             break;

        case IMAGE_FILE_MACHINE_POWERPC:
             ret = ConvertToPPCProcess( outfp, pMystart, 
                                        pMyend, regbits,
                                        HowManyRegInUse,
                                        RegTableCount);
             if (ret !=0)
             {
                 printf("should not happen contact a devloper, x86 fail\n");
                 return -1;
             }
             break;

        default:
            printf("should not happen contact a devloper, unknown fail\n");
            return -1;
    }

    return ret;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?