mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 08:25:03 +00:00
the public frist version that can convert arty testms.exe that are commited to powerpc branch in the alink folder.
the program doing main() ( return 0 ) fixing minior bugs as well svn path=/trunk/; revision=25453
This commit is contained in:
parent
bb89b8709c
commit
363cf7f261
7 changed files with 715 additions and 86 deletions
|
@ -8,11 +8,83 @@
|
|||
#include "misc.h"
|
||||
#include "any_op.h"
|
||||
|
||||
CPU_INT ConvertToIntelProcess(FILE *outfp, char *cpuid)
|
||||
CPU_INT ConvertToIntelProcess(FILE *outfp, CPU_INT cpuid)
|
||||
{
|
||||
/* cpuid we need it to known the register
|
||||
we should solv it another way
|
||||
*/
|
||||
CPU_INT eax = 0;
|
||||
CPU_INT stack = 0;
|
||||
CPU_INT regbits = 0;
|
||||
CPU_UNINT tmp;
|
||||
|
||||
pMyBrainAnalys = pStartMyBrainAnalys;
|
||||
|
||||
if (cpuid == IMAGE_FILE_MACHINE_POWERPC)
|
||||
{
|
||||
regbits = 64 / 8;
|
||||
eax = 3; /* eax = r3 */
|
||||
stack = 31 * regbits; /* r0-r31 are 64bits reg ? */
|
||||
/* exemple :
|
||||
* : [ebp - 256] = r0
|
||||
* : [ebp - 248] = r1
|
||||
*/
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("not supported yet\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
fprintf(outfp,"BITS 32\n");
|
||||
fprintf(outfp,"GLOBAL _main\n");
|
||||
fprintf(outfp,"SECTION .text\n\n");
|
||||
fprintf(outfp,"; compile with nasm filename.asm -f win32, gcc filename.obj -o filename.exe\n\n");
|
||||
fprintf(outfp,"_main:\n");
|
||||
|
||||
/* setup a frame pointer */
|
||||
fprintf(outfp,"\n; Setup frame pointer \n");
|
||||
fprintf(outfp,"push ebp\n");
|
||||
fprintf(outfp,"mov ebp,esp\n");
|
||||
fprintf(outfp,"sub esp, %d ; Alloc %d bytes for reg\n\n",stack,stack);
|
||||
|
||||
fprintf(outfp,"; Start the program \n");
|
||||
while (pMyBrainAnalys!=NULL)
|
||||
{
|
||||
/* fixme the line lookup from anaylysing process */
|
||||
|
||||
/* mov not full implement */
|
||||
if (pMyBrainAnalys->op == OP_ANY_mov)
|
||||
{
|
||||
printf("waring OP_ANY_mov are not full implement\n");
|
||||
|
||||
if ((pMyBrainAnalys->type & 8)== 8)
|
||||
{
|
||||
/* dst are register */
|
||||
tmp = stack - (pMyBrainAnalys->dst*regbits);
|
||||
|
||||
if ((pMyBrainAnalys->type & 16)== 16)
|
||||
{
|
||||
/* source are imm */
|
||||
fprintf(outfp,"mov dword [ebp - %d], %llu\n", tmp, pMyBrainAnalys->src);
|
||||
if (pMyBrainAnalys->dst == eax)
|
||||
{
|
||||
fprintf(outfp,"mov eax,[ebp - %d]\n", tmp);
|
||||
}
|
||||
}
|
||||
} /* end pMyBrainAnalys->type & 8 */
|
||||
}
|
||||
|
||||
/* return */
|
||||
if (pMyBrainAnalys->op == OP_ANY_ret)
|
||||
{
|
||||
if (pMyBrainAnalys->ptr_next == NULL)
|
||||
{
|
||||
fprintf(outfp,"\n; clean up after the frame \n");
|
||||
fprintf(outfp,"mov esp, ebp\n");
|
||||
fprintf(outfp,"pop ebp\n");
|
||||
}
|
||||
fprintf(outfp,"ret\n");
|
||||
}
|
||||
pMyBrainAnalys = (PMYBrainAnalys) pMyBrainAnalys->ptr_next;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -7,94 +7,96 @@
|
|||
#include "any_op.h"
|
||||
|
||||
PMYBrainAnalys pMyBrainAnalys = NULL;
|
||||
PMYBrainAnalys pStartMyBrainAnalys = NULL;
|
||||
|
||||
|
||||
int main(int argc, char * argv[])
|
||||
{
|
||||
CPU_UNINT BaseAddress=0;
|
||||
int t=0;
|
||||
char *infile=NULL;
|
||||
char *outfile=NULL;
|
||||
char *cpuid=NULL;
|
||||
CPU_INT type=0;
|
||||
CPU_INT mode = 1;
|
||||
//CPU_UNINT BaseAddress=0;
|
||||
//int t=0;
|
||||
//char *infile=NULL;
|
||||
//char *outfile=NULL;
|
||||
//char *cpuid=NULL;
|
||||
//CPU_INT type=0;
|
||||
//CPU_INT mode = 1;
|
||||
|
||||
|
||||
printf("Usage :\n");
|
||||
printf(" need for -inbin and autodetect if it does not found a PE header \n");
|
||||
printf(" -cpu m68000 : convert motorala 68000/68008 to intel asm \n");
|
||||
printf(" -cpu m68010 : convert motorala 68010 to intel asm \n");
|
||||
printf(" -cpu m68020 : convert motorala 68020 to intel asm \n");
|
||||
printf(" -cpu m68030 : convert motorala 68030 to intel asm \n");
|
||||
printf(" -cpu m68040 : convert motorala 68040 to intel asm \n");
|
||||
printf(" -cpu ppc : convert PowerPC to intel asm \n");
|
||||
printf(" -cpu ARM4 : convert ARM4 to intel asm \n");
|
||||
printf("------------------------------------------------------------------\n");
|
||||
printf(" for -inbin and autodetect if it does not found a PE header or do\n");
|
||||
printf(" not set at all, this options are free to use \n");
|
||||
printf(".......-BaseAddress adr : the start base address only accpect \n");
|
||||
printf("....... dec value");
|
||||
printf("------------------------------------------------------------------\n");
|
||||
printf(" -in filename : try autodetect file type for you");
|
||||
printf(" whant convert\n");
|
||||
printf(" -inBin filename : the bin file you whant convert\n");
|
||||
printf(" -inExe filename : the PE file you whant convert\n");
|
||||
printf(" -OutAsm filename : the Asm file you whant create\n");
|
||||
printf(" -OutDis filename : Do disambler of the source file\n");
|
||||
printf("------------------------------------------------------------------\n");
|
||||
printf("More cpu will be added with the time or options, this is \n");
|
||||
printf("version 0.0.1 of the cpu to intel converter writen by \n");
|
||||
printf("Magnus Olsen (magnus@greatlord.com), it does not do anything \n");
|
||||
printf("yet, more that basic desgin how it should be writen. \n");
|
||||
printf("Copyright 2006 by Magnus Olsen, licen under GPL 2.0 for now. \n");
|
||||
//printf("Usage :\n");
|
||||
//printf(" need for -inbin and autodetect if it does not found a PE header \n");
|
||||
//printf(" -cpu m68000 : convert motorala 68000/68008 to intel asm \n");
|
||||
//printf(" -cpu m68010 : convert motorala 68010 to intel asm \n");
|
||||
//printf(" -cpu m68020 : convert motorala 68020 to intel asm \n");
|
||||
//printf(" -cpu m68030 : convert motorala 68030 to intel asm \n");
|
||||
//printf(" -cpu m68040 : convert motorala 68040 to intel asm \n");
|
||||
//printf(" -cpu ppc : convert PowerPC to intel asm \n");
|
||||
//printf(" -cpu ARM4 : convert ARM4 to intel asm \n");
|
||||
//printf("------------------------------------------------------------------\n");
|
||||
//printf(" for -inbin and autodetect if it does not found a PE header or do\n");
|
||||
//printf(" not set at all, this options are free to use \n");
|
||||
//printf(".......-BaseAddress adr : the start base address only accpect \n");
|
||||
//printf("....... dec value");
|
||||
//printf("------------------------------------------------------------------\n");
|
||||
//printf(" -in filename : try autodetect file type for you");
|
||||
//printf(" whant convert\n");
|
||||
//printf(" -inBin filename : the bin file you whant convert\n");
|
||||
//printf(" -inExe filename : the PE file you whant convert\n");
|
||||
//printf(" -OutAsm filename : the Asm file you whant create\n");
|
||||
//printf(" -OutDis filename : Do disambler of the source file\n");
|
||||
//printf("------------------------------------------------------------------\n");
|
||||
//printf("More cpu will be added with the time or options, this is \n");
|
||||
//printf("version 0.0.1 of the cpu to intel converter writen by \n");
|
||||
//printf("Magnus Olsen (magnus@greatlord.com), it does not do anything \n");
|
||||
//printf("yet, more that basic desgin how it should be writen. \n");
|
||||
//printf("Copyright 2006 by Magnus Olsen, licen under GPL 2.0 for now. \n");
|
||||
|
||||
|
||||
if (argc <4)
|
||||
return 110;
|
||||
//if (argc <4)
|
||||
// return 110;
|
||||
|
||||
/* fixme better error checking for the input param */
|
||||
for (t=1; t<argc;t+=2)
|
||||
{
|
||||
if (stricmp(argv[t],"-in"))
|
||||
{
|
||||
infile = argv[t+1];
|
||||
type=0;
|
||||
}
|
||||
///* fixme better error checking for the input param */
|
||||
//for (t=1; t<argc;t+=2)
|
||||
//{
|
||||
// if (stricmp(argv[t],"-in"))
|
||||
// {
|
||||
// infile = argv[t+1];
|
||||
// type=0;
|
||||
// }
|
||||
|
||||
if (stricmp(argv[t],"-inBin"))
|
||||
{
|
||||
infile = argv[t+1];
|
||||
type=1;
|
||||
}
|
||||
// if (stricmp(argv[t],"-inBin"))
|
||||
// {
|
||||
// infile = argv[t+1];
|
||||
// type=1;
|
||||
// }
|
||||
|
||||
if (stricmp(argv[t],"-inExe"))
|
||||
{
|
||||
infile = argv[t+1];
|
||||
type=1;
|
||||
}
|
||||
// if (stricmp(argv[t],"-inExe"))
|
||||
// {
|
||||
// infile = argv[t+1];
|
||||
// type=1;
|
||||
// }
|
||||
|
||||
if (stricmp(argv[t],"-OutAsm"))
|
||||
{
|
||||
outfile = argv[t+1];
|
||||
}
|
||||
if (stricmp(argv[t],"-OutDis"))
|
||||
{
|
||||
outfile = argv[t+1];
|
||||
mode = 0;
|
||||
}
|
||||
if (stricmp(argv[t],"-BaseAddress"))
|
||||
{
|
||||
BaseAddress = atol(argv[t+1]);
|
||||
}
|
||||
if (stricmp(argv[t],"-cpu"))
|
||||
{
|
||||
cpuid = argv[t+1];
|
||||
}
|
||||
// if (stricmp(argv[t],"-OutAsm"))
|
||||
// {
|
||||
// outfile = argv[t+1];
|
||||
// }
|
||||
// if (stricmp(argv[t],"-OutDis"))
|
||||
// {
|
||||
// outfile = argv[t+1];
|
||||
// mode = 0;
|
||||
// }
|
||||
// if (stricmp(argv[t],"-BaseAddress"))
|
||||
// {
|
||||
// BaseAddress = atol(argv[t+1]);
|
||||
// }
|
||||
// if (stricmp(argv[t],"-cpu"))
|
||||
// {
|
||||
// cpuid = argv[t+1];
|
||||
// }
|
||||
|
||||
}
|
||||
//}
|
||||
|
||||
return LoadPFileImage(infile,outfile,BaseAddress,cpuid,type, mode);
|
||||
//return LoadPFileImage("e:\\testms.exe","e:\\cputointel.asm",0,0,0,0);
|
||||
//return LoadPFileImage(infile,outfile,BaseAddress,cpuid,type, mode);
|
||||
//return LoadPFileImage("e:\\testms.exe","e:\\cputointel.asm",0,0,0,0); // disambler
|
||||
return LoadPFileImage("e:\\testms.exe","e:\\cputointel.asm",0,0,0,1); // convert
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -103,7 +103,7 @@ CPU_INT PPC_Ld( FILE *out, CPU_BYTE * cpu_buffer, CPU_UNINT cpu_pos,
|
|||
return -1;
|
||||
}
|
||||
pMyBrainAnalys->op = OP_ANY_mov;
|
||||
pMyBrainAnalys->type= 1 + 8; /* 1 dst reg, 8 imm */
|
||||
pMyBrainAnalys->type= 8 + 16; /* 8 dst reg, 16 imm */
|
||||
pMyBrainAnalys->src_size = 16;
|
||||
pMyBrainAnalys->src = formDS;
|
||||
pMyBrainAnalys->dst = formA;
|
||||
|
|
554
rosapps/devutils/cputointel/ImageLoader.c
Normal file
554
rosapps/devutils/cputointel/ImageLoader.c
Normal file
|
@ -0,0 +1,554 @@
|
|||
#include <windows.h>
|
||||
#include <winnt.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "misc.h"
|
||||
#include "From/ARM/ARM.h"
|
||||
#include "From/m68k/m68k.h"
|
||||
#include "From/PPC/PPC.h"
|
||||
|
||||
static CPU_INT machine_type = 0;
|
||||
|
||||
/*
|
||||
* infileName file name to convert or disambler
|
||||
* outputfileName file name to save to
|
||||
* BaseAddress the address we should emulate
|
||||
* cpuid the cpu we choice not vaild for pe loader
|
||||
* type the loading mode Auto, PE, bin
|
||||
* mode disambler mode : 0 the arch cpu.
|
||||
* translate mode : 1 intel
|
||||
*
|
||||
*/
|
||||
|
||||
CPU_INT LoadPFileImage( char *infileName, char *outputfileName,
|
||||
CPU_UNINT BaseAddress, char *cpuid,
|
||||
CPU_UNINT type, CPU_INT mode)
|
||||
{
|
||||
FILE *infp;
|
||||
FILE *outfp;
|
||||
CPU_BYTE *cpu_buffer;
|
||||
CPU_UNINT cpu_pos = 0;
|
||||
CPU_UNINT cpu_size=0;
|
||||
CPU_INT ret;
|
||||
//fopen("testms.exe","RB");
|
||||
|
||||
|
||||
/* Open file for read */
|
||||
|
||||
if (!(infp = fopen(infileName, "rb")))
|
||||
{
|
||||
printf("Can not open file %s\n",infileName);
|
||||
return 3;
|
||||
}
|
||||
|
||||
/* Open file for write */
|
||||
if (!(outfp = fopen(outputfileName,"wb")))
|
||||
{
|
||||
printf("Can not open file %s\n",outputfileName);
|
||||
return 4;
|
||||
}
|
||||
|
||||
/* Load the binary file to a memory buffer */
|
||||
fseek(infp,0,SEEK_END);
|
||||
if (ferror(infp))
|
||||
{
|
||||
printf("error can not seek in the read file");
|
||||
fclose(infp);
|
||||
fclose(outfp);
|
||||
return 5;
|
||||
}
|
||||
|
||||
/* get the memory size buffer */
|
||||
cpu_size = ftell(infp);
|
||||
if (ferror(infp))
|
||||
{
|
||||
printf("error can not get file size of the read file");
|
||||
fclose(infp);
|
||||
fclose(outfp);
|
||||
return 6;
|
||||
}
|
||||
|
||||
/* Load the binary file to a memory buffer */
|
||||
fseek(infp,0,SEEK_SET);
|
||||
if (ferror(infp))
|
||||
{
|
||||
printf("error can not seek in the read file");
|
||||
fclose(infp);
|
||||
fclose(outfp);
|
||||
return 5;
|
||||
}
|
||||
|
||||
if (cpu_size==0)
|
||||
{
|
||||
printf("error file size is Zero lenght of the read file");
|
||||
fclose(infp);
|
||||
fclose(outfp);
|
||||
return 7;
|
||||
}
|
||||
|
||||
/* alloc memory now */
|
||||
;
|
||||
if (!(cpu_buffer = (unsigned char *) malloc(cpu_size+1)))
|
||||
{
|
||||
printf("error can not alloc %uld size for memory buffer",cpu_size);
|
||||
fclose(infp);
|
||||
fclose(outfp);
|
||||
return 8;
|
||||
}
|
||||
ZeroMemory(cpu_buffer,cpu_size);
|
||||
|
||||
/* read from the file now in one sweep */
|
||||
fread((void *)cpu_buffer,1,cpu_size,infp);
|
||||
if (ferror(infp))
|
||||
{
|
||||
printf("error can not read file ");
|
||||
fclose(infp);
|
||||
fclose(outfp);
|
||||
return 9;
|
||||
}
|
||||
fclose(infp);
|
||||
|
||||
if (type==0)
|
||||
{
|
||||
if ( PEFileStart(cpu_buffer, 0, BaseAddress, cpu_size, outfp, mode) !=0)
|
||||
{
|
||||
type=1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mode > 0)
|
||||
{
|
||||
AnyalsingProcess();
|
||||
ConvertToIntelProcess(outfp,machine_type);
|
||||
FreeAny();
|
||||
}
|
||||
fclose(outfp);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (type== 1)
|
||||
{
|
||||
if (stricmp(cpuid,"m68000"))
|
||||
{
|
||||
ret = M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68000,outfp,mode);
|
||||
if (mode > 1)
|
||||
{
|
||||
AnyalsingProcess();
|
||||
ConvertToIntelProcess(outfp,machine_type);
|
||||
FreeAny();
|
||||
}
|
||||
fclose(outfp);
|
||||
}
|
||||
else if (stricmp(cpuid,"m68010"))
|
||||
{
|
||||
ret = M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68010,outfp,mode);
|
||||
if (mode > 1)
|
||||
{
|
||||
AnyalsingProcess();
|
||||
ConvertToIntelProcess(outfp,machine_type);
|
||||
FreeAny();
|
||||
}
|
||||
fclose(outfp);
|
||||
return ret;
|
||||
}
|
||||
else if (stricmp(cpuid,"m68020"))
|
||||
{
|
||||
ret = M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68020,outfp,mode);
|
||||
if (mode > 1)
|
||||
{
|
||||
AnyalsingProcess();
|
||||
ConvertToIntelProcess(outfp,machine_type);
|
||||
FreeAny();
|
||||
}
|
||||
fclose(outfp);
|
||||
return ret;
|
||||
}
|
||||
else if (stricmp(cpuid,"m68030"))
|
||||
{
|
||||
ret = M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68030,outfp,mode);
|
||||
if (mode > 1)
|
||||
{
|
||||
AnyalsingProcess();
|
||||
ConvertToIntelProcess(outfp,machine_type);
|
||||
FreeAny();
|
||||
}
|
||||
fclose(outfp);
|
||||
return ret;
|
||||
}
|
||||
else if (stricmp(cpuid,"m68040"))
|
||||
{
|
||||
ret = M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68040,outfp,mode);
|
||||
if (mode > 1)
|
||||
{
|
||||
AnyalsingProcess();
|
||||
ConvertToIntelProcess(outfp,machine_type);
|
||||
FreeAny();
|
||||
}
|
||||
fclose(outfp);
|
||||
return ret;
|
||||
}
|
||||
else if (stricmp(cpuid,"ppc"))
|
||||
{
|
||||
ret = PPCBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,0,outfp,mode);
|
||||
if (mode > 1)
|
||||
{
|
||||
AnyalsingProcess();
|
||||
ConvertToIntelProcess(outfp,machine_type);
|
||||
FreeAny();
|
||||
}
|
||||
fclose(outfp);
|
||||
return ret;
|
||||
}
|
||||
else if (stricmp(cpuid,"arm4"))
|
||||
{
|
||||
ret = ARMBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,4,outfp,mode);
|
||||
if (mode > 1)
|
||||
{
|
||||
AnyalsingProcess();
|
||||
ConvertToIntelProcess(outfp,machine_type);
|
||||
FreeAny();
|
||||
}
|
||||
fclose(outfp);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
if (type==2)
|
||||
{
|
||||
|
||||
ret = PEFileStart(cpu_buffer, 0, BaseAddress, cpu_size, outfp, mode);
|
||||
if (mode > 1)
|
||||
{
|
||||
AnyalsingProcess();
|
||||
ConvertToIntelProcess(outfp,machine_type);
|
||||
FreeAny();
|
||||
}
|
||||
fclose(outfp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
CPU_INT PEFileStart( CPU_BYTE *memory, CPU_UNINT pos,
|
||||
CPU_UNINT base, CPU_UNINT size,
|
||||
FILE *outfp, CPU_INT mode)
|
||||
{
|
||||
PIMAGE_DOS_HEADER DosHeader;
|
||||
PIMAGE_NT_HEADERS NtHeader;
|
||||
PIMAGE_SECTION_HEADER SectionHeader;
|
||||
INT NumberOfSections;
|
||||
INT NumberOfSectionsCount=0;
|
||||
|
||||
DosHeader = (PIMAGE_DOS_HEADER)memory;
|
||||
if ( (DosHeader->e_magic != IMAGE_DOS_SIGNATURE) ||
|
||||
(size < 0x3c+2) )
|
||||
{
|
||||
printf("No MZ file \n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
NtHeader = (PIMAGE_NT_HEADERS) (((ULONG)memory) + ((ULONG)DosHeader->e_lfanew));
|
||||
if (NtHeader->Signature != IMAGE_NT_SIGNATURE)
|
||||
{
|
||||
printf("No PE header found \n");
|
||||
}
|
||||
|
||||
if (!(NtHeader->FileHeader.Characteristics & IMAGE_FILE_EXECUTABLE_IMAGE))
|
||||
{
|
||||
printf("No execute image found \n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
switch(NtHeader->OptionalHeader.Subsystem)
|
||||
{
|
||||
case IMAGE_SUBSYSTEM_EFI_APPLICATION:
|
||||
fprintf(outfp,"; OS type : IMAGE_SUBSYSTEM_EFI_APPLICATION\n");
|
||||
printf("This exe file is desgin run in EFI bios as applactions\n");
|
||||
break;
|
||||
case IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER:
|
||||
fprintf(outfp,"; OS type : IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER\n");
|
||||
printf("This exe file is desgin run in EFI bios as service driver\n");
|
||||
break;
|
||||
case IMAGE_SUBSYSTEM_EFI_ROM:
|
||||
fprintf(outfp,"; OS type : IMAGE_SUBSYSTEM_EFI_ROM\n");
|
||||
printf("This exe file is EFI ROM\n");
|
||||
break;
|
||||
case IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER:
|
||||
fprintf(outfp,"; OS type : IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER\n");
|
||||
printf("This exe file is desgin run in EFI bios as driver\n");
|
||||
break;
|
||||
case IMAGE_SUBSYSTEM_NATIVE:
|
||||
fprintf(outfp,"; OS type : IMAGE_SUBSYSTEM_NATIVE\n");
|
||||
printf("This exe file does not need any subsystem\n");
|
||||
break;
|
||||
case IMAGE_SUBSYSTEM_NATIVE_WINDOWS:
|
||||
fprintf(outfp,"; OS type : IMAGE_SUBSYSTEM_NATIVE_WINDOWS\n");
|
||||
printf("This exe file is desgin run on Windows 9x as driver \n");
|
||||
break;
|
||||
case IMAGE_SUBSYSTEM_OS2_CUI:
|
||||
fprintf(outfp,"; OS type : IMAGE_SUBSYSTEM_OS2_CUI\n");
|
||||
printf("This exe file is desgin run on OS2 as CUI\n");
|
||||
break;
|
||||
case IMAGE_SUBSYSTEM_POSIX_CUI:
|
||||
fprintf(outfp,"; OS type : IMAGE_SUBSYSTEM_POSIX_CUI\n");
|
||||
printf("This exe file is desgin run on POSIX as CUI\n");
|
||||
break;
|
||||
case IMAGE_SUBSYSTEM_WINDOWS_CE_GUI:
|
||||
fprintf(outfp,"; OS type : IMAGE_SUBSYSTEM_WINDOWS_CE_GUI\n");
|
||||
printf("This exe file is desgin run on Windows CE as GUI\n");
|
||||
break;
|
||||
case IMAGE_SUBSYSTEM_WINDOWS_CUI:
|
||||
fprintf(outfp,"; OS type : IMAGE_SUBSYSTEM_WINDOWS_CUI\n");
|
||||
printf("This exe file is desgin run on Windows as CUI\n");
|
||||
break;
|
||||
case IMAGE_SUBSYSTEM_WINDOWS_GUI:
|
||||
fprintf(outfp,"; OS type : IMAGE_SUBSYSTEM_WINDOWS_GUI\n");
|
||||
printf("This exe file is desgin run on Windows as GUI\n");
|
||||
break;
|
||||
case IMAGE_SUBSYSTEM_XBOX:
|
||||
fprintf(outfp,"; OS type : IMAGE_SUBSYSTEM_XBOX\n");
|
||||
printf("This exe file is desgin run on X-Box\n");
|
||||
break;
|
||||
default:
|
||||
fprintf(outfp,"; OS type : Unknown\n");
|
||||
printf("Unknown OS : SubID : %d\n",NtHeader->OptionalHeader.Subsystem);
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
SectionHeader->Name == ".tls$"
|
||||
SectionHeader->Name == ".tls"
|
||||
SectionHeader->Name == ".text" // Executable code
|
||||
SectionHeader->Name == ".sxdata"
|
||||
SectionHeader->Name == ".sdata"
|
||||
SectionHeader->Name == ".sbss"
|
||||
SectionHeader->Name == ".rsrc" // rc data
|
||||
SectionHeader->Name == ".reloc"
|
||||
SectionHeader->Name == ".rdata" // read only initialized data
|
||||
SectionHeader->Name == ".pdata"
|
||||
SectionHeader->Name == ".idlsym"
|
||||
SectionHeader->Name == ".idata" // Import tables
|
||||
SectionHeader->Name == ".edata" // Export tables
|
||||
SectionHeader->Name == ".drective"
|
||||
SectionHeader->Name == ".debug$T"
|
||||
SectionHeader->Name == ".debug$S"
|
||||
SectionHeader->Name == ".debug$P"
|
||||
SectionHeader->Name == ".debug$F"
|
||||
SectionHeader->Name == ".data" //data segment
|
||||
SectionHeader->Name == ".cormeta"
|
||||
SectionHeader->Name == ".bss" // bss segment
|
||||
|
||||
undoc
|
||||
SectionHeader->Name == ".textbss" // bss segment
|
||||
*/
|
||||
|
||||
//*base = NtHeader->OptionalHeader.AddressOfEntryPoint;
|
||||
|
||||
SectionHeader = IMAGE_FIRST_SECTION(NtHeader);
|
||||
NumberOfSections = NtHeader->FileHeader.NumberOfSections;
|
||||
|
||||
for (NumberOfSectionsCount = 0; NumberOfSectionsCount < NumberOfSections; NumberOfSectionsCount++, SectionHeader++)
|
||||
{
|
||||
if (strnicmp((PCHAR) SectionHeader->Name,".rsrc",5)==0)
|
||||
{
|
||||
/* FIXME add a rc bin to text scanner */
|
||||
}
|
||||
|
||||
else if (strnicmp((PCHAR) SectionHeader->Name,".textbss",8)==0)
|
||||
{
|
||||
/* FIXME add a bss to text scanner */
|
||||
}
|
||||
|
||||
|
||||
else if (strnicmp((PCHAR) SectionHeader->Name,".text\0",6)==0)
|
||||
{
|
||||
/*
|
||||
FIXME we should output gas syntax
|
||||
BITS 32
|
||||
GLOBAL _lrotate;
|
||||
EXTERN _printf;
|
||||
COMMON _commvar 4;
|
||||
*/
|
||||
|
||||
switch (NtHeader->FileHeader.Machine)
|
||||
{
|
||||
case IMAGE_FILE_MACHINE_ALPHA:
|
||||
printf("CPU ALPHA Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found Alpha\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_ALPHA;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_ALPHA64:
|
||||
printf("CPU ALPHA64/AXP64 Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found Alpha64/AXP64\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_ALPHA64;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_AM33:
|
||||
printf("CPU AM33 Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found AM33\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_AM33;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_AMD64:
|
||||
printf("CPU AMD64 Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found AMD64\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_AMD64;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_ARM:
|
||||
printf("CPU ARM Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found ARM\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_ARM;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_CEE:
|
||||
printf("CPU CEE Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found CEE\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_CEE;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_CEF:
|
||||
printf("CPU CEF Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found CEF\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_CEF;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_EBC:
|
||||
printf("CPU EBC Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found EBC\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_EBC;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_I386:
|
||||
printf("CPU I386 Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found I386\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_I386;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_IA64:
|
||||
printf("CPU IA64 Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found IA64\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_IA64;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_M32R:
|
||||
printf("CPU M32R Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found M32R\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_M32R;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_MIPS16:
|
||||
printf("CPU MIPS16 Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found MIPS16\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_MIPS16;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_MIPSFPU:
|
||||
printf("CPU MIPSFPU Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found MIPSFPU\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_MIPSFPU;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_MIPSFPU16:
|
||||
printf("CPU MIPSFPU16 Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found MIPSFPU16\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_MIPSFPU16;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_POWERPC:
|
||||
printf("CPU POWERPC Detected partily CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found POWERPC\n");
|
||||
//PPCBrain(memory, pos, cpu_size, base, 0, outfp);
|
||||
machine_type = IMAGE_FILE_MACHINE_POWERPC;
|
||||
return PPCBrain(memory+SectionHeader->PointerToRawData, 0, SectionHeader->SizeOfRawData, 0, 0, outfp,mode);
|
||||
|
||||
|
||||
case IMAGE_FILE_MACHINE_POWERPCFP:
|
||||
printf("CPU POWERPCFP Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found POWERPCFP\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_POWERPCFP;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_R10000:
|
||||
printf("CPU R10000 Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found R10000\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_R10000;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_R3000:
|
||||
printf("CPU R3000 Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found R3000\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_R3000;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_R4000:
|
||||
printf("CPU R4000 Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found R4000\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_R4000;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_SH3:
|
||||
printf("CPU SH3 Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found SH3\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_SH3;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_SH3DSP:
|
||||
printf("CPU SH3DSP Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found SH3DSP\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_SH3DSP;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_SH3E:
|
||||
printf("CPU SH3E Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found SH3E\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_SH3E;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_SH4:
|
||||
printf("CPU SH4 Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found SH4\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_SH4;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_SH5:
|
||||
printf("CPU SH5 Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found SH5\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_SH5;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_THUMB:
|
||||
printf("CPU THUMB Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found THUMB\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_THUMB;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_TRICORE:
|
||||
printf("CPU TRICORE Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found TRICORE\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_TRICORE;
|
||||
return 3;
|
||||
|
||||
case IMAGE_FILE_MACHINE_WCEMIPSV2:
|
||||
printf("CPU WCEMIPSV2 Detected no CPUBrain implement for it\n");
|
||||
fprintf(outfp,"; CPU found WCEMIPSV2\n");
|
||||
machine_type = IMAGE_FILE_MACHINE_WCEMIPSV2;
|
||||
return 3;
|
||||
|
||||
default:
|
||||
printf("Unknown Machine : %d",NtHeader->FileHeader.Machine);
|
||||
return 4;
|
||||
/* End case swich */
|
||||
}
|
||||
/* End if .text statment */
|
||||
}
|
||||
/* End for loop */
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -6,9 +6,9 @@
|
|||
typedef struct _BrainAnalys
|
||||
{
|
||||
CPU_UNINT op; /* one tranlator for any cpu type set our own opcode */
|
||||
CPU_INT type; /* 0 = source are memmory, 1 source are register */
|
||||
/* 2 = dest are memmory, 4 dest are register */
|
||||
/* 8 = source are imm */
|
||||
CPU_INT type; /* 1 = source are memmory, 2 source are register */
|
||||
/* 4 = dest are memmory, 8 dest are register */
|
||||
/* 16 = source are imm */
|
||||
|
||||
CPU_INT src_size; /* who many bits are src not vaild for reg*/
|
||||
CPU_INT dst_size; /* who many bits are dst not vaild for reg*/
|
||||
|
@ -23,5 +23,5 @@ typedef struct _BrainAnalys
|
|||
CPU_BYTE* ptr_prev; /* hook previus one */
|
||||
} MYBrainAnalys, *PMYBrainAnalys;
|
||||
|
||||
extern PMYBrainAnalys pMyBrainAnalys;
|
||||
|
||||
extern PMYBrainAnalys pMyBrainAnalys; /* current working address */
|
||||
extern PMYBrainAnalys pStartMyBrainAnalys; /* start address */
|
||||
|
|
|
@ -140,6 +140,7 @@ CPU_INT AllocAny()
|
|||
return -1;
|
||||
}
|
||||
ZeroMemory(pMyBrainAnalys,sizeof(MYBrainAnalys));
|
||||
pStartMyBrainAnalys = pMyBrainAnalys;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -149,7 +150,7 @@ CPU_INT AllocAny()
|
|||
{
|
||||
return -1;
|
||||
}
|
||||
ZeroMemory(pMyBrainAnalys,sizeof(MYBrainAnalys));
|
||||
ZeroMemory(tmp,sizeof(MYBrainAnalys));
|
||||
|
||||
pMyBrainAnalys->ptr_next = (CPU_BYTE*)tmp;
|
||||
tmp->ptr_prev= (CPU_BYTE*)pMyBrainAnalys;
|
||||
|
|
|
@ -26,5 +26,5 @@ CPU_UNINT GetData32Be(CPU_BYTE *cpu_buffer);
|
|||
CPU_INT AllocAny();
|
||||
CPU_INT FreeAny();
|
||||
CPU_INT AnyalsingProcess();
|
||||
CPU_INT ConvertToIntelProcess(FILE *outfp, char *cpuid);
|
||||
CPU_INT ConvertToIntelProcess(FILE *outfp, CPU_INT cpuid);
|
||||
|
||||
|
|
Loading…
Reference in a new issue