/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// DasmX86.DLL 测试版本 1.0 说明
//
// 测试并修正错误后,我会给大家提供源码!(16位的代码没有测试,现在会有问题)
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
该DLL的5个导出函数:
long getversion(); //版本高16位主版本号低16位次版本号
char * getauthor(); //作者
int getbits(); //获取工作模式16/32位
void setbits(int bits);//设置工作模式16/32位 bits=16或32有效
int disassemble(unsigned long address,unsigned char *pBMC,char * pHIS,char * pHAS,long * pCIL,long * pNIO);//反汇编
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// 名称: int disassemble(unsigned long,unsigned char *,char *,char *,long *,long *)
//
// 功能: 反汇编字节序列
//
// 参数:
// 1. address 地址
// 2. pBMC (Binary Machie Code) 字节序列指针
// 3. pHIS (Hex Instruction String) HEX机器码字符串指针
// 4. pHAS (Hex Asmble String) ASM汇编语言字符串指针
// 5. pCIL (Current Instruction Length) 指令长度指针
// 6. pNIO 暂时保留
//
// 返回:
// 0 成功
// -1 错误
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Demo 利用disassemble函数对字节序列进行反汇编的调用例子
//
// pBMC 字节序列指针
//
// len 字节序列长度
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Demo(unsigned char *pBMC,int len)
{
char pHIS[256];
char pHAS[256];
long base=0x10003FD3;
long CIL=0,NIO=0;
long offset=0,address;
while(offset<len)
{
address=base+offset;
if(dissamble(address,pBMC+offset,pHIS,pHAS,&CIL,&NIO)==0)
{
offset+=CIL;
}
else
{
sprintf(pHIS,"%02X",pBMC[offset]);
sprintf(pHAS,"DB %02X",pBMC[offset]);
offset++;
}
printf("%08X %-25s %s\n",address,pHIS,pHAS);
}
}
附件
-
DasmX86.rar
(113 KB)
-
2005-3-27 11:21, 下载次数: 428