C语言脚本,支持OllyDbg1.1和支持OllyDbg2.01的,都更新一下,算是个交代吧。
-------------------------------------------------------------------------------------------------------------------------
发现一个陷阱: undefined symbol '__chkstk'
这个陷阱产生原因可以参见 LuckyG 的分析贴: http://bbs.pediy.com/showthread.php?p=1053231
解决办法1: 适当的动态分配、释放一部分局部变量,确保局部变量占用空间小于4096byte
解决办法2: 模拟编译器自定义一个 __chkstk,或者直接定义一个空函数
在OD主页上,针对2.01版本的Disasm函数给出了一个例子,tcc script在加载这个例子的时候,就发现了如上所述的错误.问题具体出在t_disasm上,这个结构即便按照1字节对其,也还是超过了4096byte,于是直接在函数内部定义它脚本将无法编译通过,可以用上面提到的两个办法解决问题
void __chkstk()
{
}
ulong Disassemble(ulong addr,ulong threadid,wchar_t *command,wchar_t *comment) {
// ulong length,&declength;//TCC SCRIPT 不支持引用
ulong length,declength;
uchar cmd[MAXCMDSIZE],*decode;
t_disasm da;
t_reg *reg;
length=Readmemory(cmd,addr,MAXCMDSIZE,MM_SILENT|MM_PARTIAL);
if (length==0) return 0;
decode=Finddecode(addr,&declength);
if (decode!=NULL && declength<length)
decode=NULL;
reg=Threadregisters(threadid);
length=Disasm(cmd,length,addr,decode,&da,DA_TEXT|DA_OPCOMM|DA_MEMORY,reg,NULL);
if (length==0) return 0;
StrcopyW(command,TEXTLEN,da.result);
StrcopyW(comment,TEXTLEN,da.comment);
return length;
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!