reactos/rosapps/devutils/cputointel/misc.c
Magnus Olsen 7c96cb069a adding blr opcode (can not found it in the ibm or motorala doc, the primary opcode refens to addi).
now we can disambler two opcode the li and blr, add blr to my own asm langues. 

svn path=/trunk/; revision=25448
2007-01-14 12:10:53 +00:00

199 lines
3.5 KiB
C

/* only for getting the pe struct */
#include <windows.h>
#include <winnt.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "misc.h"
#include "any_op.h"
#include "From/ARM/ARM.h"
#include "From/m68k/m68k.h"
#include "From/PPC/PPC.h"
/* retun
* 0 = Ok
* 1 = unimplemt
* 2 = Unkonwn Opcode
* 3 = can not open read file
* 4 = can not open write file
* 5 = can not seek to end of read file
* 6 = can not get the file size of the read file
* 7 = read file size is Zero
* 8 = can not alloc memory
* 9 = can not read file
*-------------------------
* type 0 : auto
* type 1 : bin
* type 2 : exe/dll/sys
*/
/* Conveting bit array to a int byte */
CPU_UNINT ConvertBitToByte(CPU_BYTE *bit)
{
CPU_UNINT Byte = 0;
CPU_UNINT t;
CPU_UNINT size = 15;
for(t=size;t>0;t--)
{
if (bit[size-t] != 2)
Byte = Byte + (bit[size-t]<<t);
}
return Byte;
}
/* Conveting bit array mask to a int byte mask */
CPU_UNINT GetMaskByte(CPU_BYTE *bit)
{
CPU_UNINT MaskByte = 0;
CPU_UNINT t;
CPU_UNINT size = 15;
for(t=size;t>0;t--)
{
if (bit[size-t] == 2)
{
MaskByte = MaskByte + ( (bit[size-t]-1) <<t);
}
}
return MaskByte;
}
/* Conveting bit array to a int byte */
CPU_UNINT ConvertBitToByte32(CPU_BYTE *bit)
{
CPU_UNINT Byte = 0;
CPU_UNINT t;
CPU_UNINT size = 31;
for(t=size;t>0;t--)
{
if (bit[size-t] != 2)
Byte = Byte + (bit[size-t]<<t);
}
return Byte;
}
/* Conveting bit array mask to a int byte mask */
CPU_UNINT GetMaskByte32(CPU_BYTE *bit)
{
CPU_UNINT MaskByte = 0;
CPU_UNINT t;
CPU_UNINT size = 31;
for(t=size;t>0;t--)
{
if (bit[size-t] == 2)
{
MaskByte = MaskByte + ( (bit[size-t]-1) <<t);
}
}
return MaskByte;
}
CPU_UNINT GetData32Le(CPU_BYTE *cpu_buffer)
{
CPU_UNINT cpuint;
CPU_UNINT split1;
CPU_UNINT split2;
CPU_UNINT split3;
CPU_UNINT split4;
cpuint = *((CPU_UNINT*) &cpu_buffer[0]);
split1 = cpu_buffer[0];
split2 = cpu_buffer[1];
split3 = cpu_buffer[2];
split4 = cpu_buffer[3];
cpuint = split4+(split3 <<8 )+(split2 <<16 )+(split1 <<24 );
return cpuint;
}
CPU_UNINT GetData32Be(CPU_BYTE *cpu_buffer)
{
CPU_UNINT cpuint;
cpuint = *((CPU_UNINT*) &cpu_buffer[0]);
return cpuint;
}
CPU_INT AllocAny()
{
if (pMyBrainAnalys== NULL)
{
pMyBrainAnalys = (PMYBrainAnalys) malloc(sizeof(MYBrainAnalys));
if (pMyBrainAnalys==NULL)
{
return -1;
}
ZeroMemory(pMyBrainAnalys,sizeof(MYBrainAnalys));
}
else
{
PMYBrainAnalys tmp;
tmp = (PMYBrainAnalys) malloc(sizeof(MYBrainAnalys));
if (tmp==NULL)
{
return -1;
}
ZeroMemory(pMyBrainAnalys,sizeof(MYBrainAnalys));
pMyBrainAnalys->ptr_next = (CPU_BYTE*)tmp;
tmp->ptr_prev= (CPU_BYTE*)pMyBrainAnalys;
pMyBrainAnalys = tmp;
}
return 0;
}
CPU_INT FreeAny()
{
PMYBrainAnalys tmp = NULL;
if (pMyBrainAnalys == NULL)
{
return -1;
}
tmp = (PMYBrainAnalys)pMyBrainAnalys->ptr_prev;
while (pMyBrainAnalys != NULL)
{
if (pMyBrainAnalys == NULL)
{
break;
}
free(pMyBrainAnalys);
if (pMyBrainAnalys != NULL)
{
printf("fail to free memory");
return -1;
}
pMyBrainAnalys = tmp;
}
return 0;
}