ADE32下载,CSDN上有,自己找下
1 在工程文件中加入ADE32.OBJ 和ADE32.H
2 在工程的CPP文件中加入
extern "C"
{
#include "ADE32.H"
void ade32_init(DWORD *);
DWORD ade32_disasm(BYTE *, disasm_struct *, DWORD *);
DWORD ade32_asm(BYTE *, disasm_struct *);
};
简单应用1:获取函数FUNC代码段的长度(一定要在Release下)
void Func()
{
char *p = "my baby";
printf("Hello world");
}
printf("Func Address = 0x%08X/n",Func);
DWORD ade32_flagtable[512];
ade32_init(ade32_flagtable);
DWORD dwCodeLen = 0;
// disassemble code section opcode by opcode
for(DWORD ip = (DWORD)Func; ; )
{
disasm_struct s = {4,4}; // prepare to disasm 32-bit code
// disassemble opcode
DWORD len = ade32_disasm((BYTE*)ip, &s, ade32_flagtable);
if (len == 0) break; // cant disassemble?
// dump length, offset and hex bytes
printf("(%i) %08X ",len,ip);
for(DWORD j=0; j<len; j++) printf(" %02X",*(BYTE*)(ip+j));
printf("/n");
dwCodeLen += len;
if (len ==1)
{
if(*(BYTE *)ip == 0XC3 || *(BYTE *)ip == 0XCB ) //retn = 0xc3 retf = 0xcb
{
printf("Func Code Length = 0x%08X", dwCodeLen);
break;
}
}
ip += len;
}