首页
社区
课程
招聘
[分享]C语言脚本插件(OD1.1,OD2.01)
发表于: 2014-10-23 22:20 9723

[分享]C语言脚本插件(OD1.1,OD2.01)

2014-10-23 22:20
9723
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;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 4928
活跃值: (967)
能力值: ( LV9,RANK:175 )
在线值:
发帖
回帖
粉丝
2
菜鸟表示不知道干什么的。。。
2014-10-23 22:48
0
雪    币: 30
活跃值: (1307)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这个东西,要是把工程文件共享下,我会非常非常感激的
2014-10-23 23:20
0
雪    币: 27
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
用了你这个插件  od关不了啊,求改正,很不错的插件,比lua做脚本好,lua实在太蛋疼了,交互起来,而且细化能强类型的语言,这样在写的时候,编译器会自动提示结构体成员
2014-11-15 19:06
0
雪    币: 62
活跃值: (971)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
楼主,OD2插件资料该去哪里找?
2014-11-15 19:42
0
雪    币: 27
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
对楼主的这个插件表示由衷的赞叹和感谢,同时希望楼主能有更好的作品出来,用c++做脚本,目前cint可以用来做,但是听说这个东西递归极限就是十几层,bug多,所以别用它,用这个方法吧:http://www.cnblogs.com/index-html/archive/2012/07/28/cppscript.html
2014-11-16 00:28
0
雪    币: 27
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
楼主,你这个时间虽然是 10-23,但是我下来之后 添加到od后,点击加载,居然提示编译错误,仔细一看,你这个原来才是1.1版本的,是不是放错了啊?而且od不能关闭。
2014-11-16 06:54
0
雪    币: 3529
活跃值: (1857)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
8
很对,我在写一个插件用的就是CINT,bug多,还不支持64位,我都要考虑要不要继续了
2014-11-21 09:03
0
雪    币: 3
活跃值: (389)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
tcc 做脚本不错,不过有一些局限,比如它的汇编语法和MASM的语法不一样,非常不习惯
2014-11-21 21:23
0
雪    币: 27
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
使用一个库之前,先搜索一下被人对他的评论,这是我的习惯
2014-11-26 04:55
0
雪    币: 3529
活跃值: (1857)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
11
现在用libclang了,之前也使用过楼主所用的TCC,不过达不到要求,因为我只需要parser功能,而不需要执行功能
2014-11-26 08:48
0
雪    币: 14
活跃值: (28)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
这一点让人非常苦恼和费解,我完全看不出AT&T汇编格式的吸引力在哪里,为什么那么多编译器选择只支持这种格式。

而且,我甚至找不到一种将AT&T和INTEL两种汇编格式相互转化的工具。

不知道是真的没有,还是我不够仔细没有搜索到。
2014-12-4 21:33
0
雪    币: 14
活跃值: (28)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
目前,我认为原因出在插件冲突上。我检查了代码,感觉还挺合理的,莫非是某个插件在被OD调用时,没能正确返回吗?
2014-12-4 21:36
0
雪    币: 27
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
我现在用的是菜单里面的退出 这样是可以的
2014-12-5 08:35
0
游客
登录 | 注册 方可回帖
返回
//