Author: greatlrd
Date: Sun Jan 14 21:01:56 2007
New Revision: 25453
URL:
http://svn.reactos.org/svn/reactos?rev=25453&view=rev
Log:
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
Added:
trunk/rosapps/devutils/cputointel/ImageLoader.c
Modified:
trunk/rosapps/devutils/cputointel/ConvertToIntelProcess.c
trunk/rosapps/devutils/cputointel/CpuToIntel.c
trunk/rosapps/devutils/cputointel/From/PPC/PPCopcode.c
trunk/rosapps/devutils/cputointel/any_op.h
trunk/rosapps/devutils/cputointel/misc.c
trunk/rosapps/devutils/cputointel/misc.h
Modified: trunk/rosapps/devutils/cputointel/ConvertToIntelProcess.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/Conver…
==============================================================================
--- trunk/rosapps/devutils/cputointel/ConvertToIntelProcess.c (original)
+++ trunk/rosapps/devutils/cputointel/ConvertToIntelProcess.c Sun Jan 14 21:01:56 2007
@@ -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;
}
Modified: trunk/rosapps/devutils/cputointel/CpuToIntel.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/CpuToI…
==============================================================================
--- trunk/rosapps/devutils/cputointel/CpuToIntel.c (original)
+++ trunk/rosapps/devutils/cputointel/CpuToIntel.c Sun Jan 14 21:01:56 2007
@@ -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(a)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(a)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
}
Modified: trunk/rosapps/devutils/cputointel/From/PPC/PPCopcode.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/From/P…
==============================================================================
--- trunk/rosapps/devutils/cputointel/From/PPC/PPCopcode.c (original)
+++ trunk/rosapps/devutils/cputointel/From/PPC/PPCopcode.c Sun Jan 14 21:01:56 2007
@@ -103,7 +103,7 @@
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;
Added: trunk/rosapps/devutils/cputointel/ImageLoader.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/ImageL…
==============================================================================
--- trunk/rosapps/devutils/cputointel/ImageLoader.c (added)
+++ trunk/rosapps/devutils/cputointel/ImageLoader.c Sun Jan 14 21:01:56 2007
@@ -1,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;
+}
Modified: trunk/rosapps/devutils/cputointel/any_op.h
URL:
http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/any_op…
==============================================================================
--- trunk/rosapps/devutils/cputointel/any_op.h (original)
+++ trunk/rosapps/devutils/cputointel/any_op.h Sun Jan 14 21:01:56 2007
@@ -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 @@
CPU_BYTE* ptr_prev; /* hook previus one */
} MYBrainAnalys, *PMYBrainAnalys;
-extern PMYBrainAnalys pMyBrainAnalys;
-
+extern PMYBrainAnalys pMyBrainAnalys; /* current working address */
+extern PMYBrainAnalys pStartMyBrainAnalys; /* start address */
Modified: trunk/rosapps/devutils/cputointel/misc.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/misc.c…
==============================================================================
--- trunk/rosapps/devutils/cputointel/misc.c (original)
+++ trunk/rosapps/devutils/cputointel/misc.c Sun Jan 14 21:01:56 2007
@@ -140,6 +140,7 @@
return -1;
}
ZeroMemory(pMyBrainAnalys,sizeof(MYBrainAnalys));
+ pStartMyBrainAnalys = pMyBrainAnalys;
}
else
{
@@ -149,7 +150,7 @@
{
return -1;
}
- ZeroMemory(pMyBrainAnalys,sizeof(MYBrainAnalys));
+ ZeroMemory(tmp,sizeof(MYBrainAnalys));
pMyBrainAnalys->ptr_next = (CPU_BYTE*)tmp;
tmp->ptr_prev= (CPU_BYTE*)pMyBrainAnalys;
Modified: trunk/rosapps/devutils/cputointel/misc.h
URL:
http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/misc.h…
==============================================================================
--- trunk/rosapps/devutils/cputointel/misc.h (original)
+++ trunk/rosapps/devutils/cputointel/misc.h Sun Jan 14 21:01:56 2007
@@ -26,5 +26,5 @@
CPU_INT AllocAny();
CPU_INT FreeAny();
CPU_INT AnyalsingProcess();
-CPU_INT ConvertToIntelProcess(FILE *outfp, char *cpuid);
+CPU_INT ConvertToIntelProcess(FILE *outfp, CPU_INT cpuid);