冥界3大法王 发表于 2022-1-22 10:29

怎么去用x64dbg的脚本判断当前运行到的行(rip)异常?

本想发求助贴的,我们在实验室里一折腾突然自己明白了,所以还是分享下经验吧:怎么去用x64dbg的脚本判断当前运行到的行(RIP)异常?
试验过程如下:我们随便打开一个64位的程序把汇编窗口第二行,随便改成CCCCCCCC来触发异常
msg {ex.firstchance()}      //结果是1         //最后一个异常是否是首次偶发异常
msg {ex.addr()}               //这个得到的是最后一个异常地址=====》有用
msg {ex.code()}                //这个得到的是异常的代码==>感觉不实用!
msg {ex.flags()}               //结果是0
msg {ex.infocount()}       //结果是1          //最后一个异常信息计数
msg {ex.info(index)}       //结果是???

https://static.52pojie.cn/static/image/hrline/2.gif
所以,貌似得用 ex.addr() 这个来做比较了~~~
这样写对吧?cmp rip,ex.addr()   //rip是谁? 当前运行到的VA地址前啦
后面的 ex.addr()就是最后一次异常的地址啊 ~~
所以想想,貌似有问题啊~~
我们把选中的 00007FF7C5A367EC 行直接给NOP了,它就变成了 5行(5个异常的行啦)
当我们在第二行原样按F8的时候 ,就会触发异常 ,rip = 00007FF7C5A367EC (也就是运行到了00007FF7C5A367EC)
再按一下F8 ,rip=00007FF7C5A367ED, 第一次异常地址 是00007FF7C5A367EC

看到没?发现问题了吧?
所以,我们只要再定义一个变量来存储上一次的那个rip的地址,再和我们的变量做比较这个问题就解决了啊。
所以遇到问题不要慌张,做试验和对比,自己就能不求人自己找到解决办法了。
后面异常小节就可以愉快的使用skin命令来自动化的跳过了。

18296522075 发表于 2022-1-24 16:36


可以,学习学习

cydiansu 发表于 2022-1-25 08:29

有点意思,学习一下.

DrillAnn 发表于 2022-1-26 08:53



可以,学习学习

seeker908 发表于 2022-1-27 22:33

学习学习中。

hua111 发表于 2022-2-17 11:22

aq1232007 发表于 2022-2-21 01:44

skin命令,这个怎样使用呢?
页: [1]
查看完整版本: 怎么去用x64dbg的脚本判断当前运行到的行(rip)异常?