网上介绍hopper有逆向伪代码的文章很多,并以为其是万能而且cool B的。但是并没有人去求证hopper的逆向伪代码参考系数(参考价值,大家做过开发都清楚明白,有些功能看起来很花很cool但不实用)有多高,或者说可信度正确率(至少不要误导人,这比自己直接逆向分析反汇编代码有误还要冤狂)。上一篇已经提出了这个问题,本篇就来进一步求证,我只本着高中时代上过的政治思想课里面毛论中的实事求是精神,和一个程序员对代码的热爱,并非挑事端。

从我已经逆向过的函数中挑选三个出来,用hopper进行逆向输出伪代码,对比观察我想考察的点。

1.QuartzCore`CA::Context::client_port  观察hopper是否可以分析出^() Block。

2.QuartzCore`CA::Context::commit_commands  观察hopper是否可以分析出switch。

3.QuartzCore`drawLine(c风格函数)在适配到QuartzCore`-[CATextLayer _drawLine:inContext:atPoint:]时  观察hopper是否正确分析出传参。

首先是QuartzCore`CA::Context::client_port, 结果是hopper没有能分析出^() Block,还意外发现hopper在逆向伪代码时不考虑内存单元的引用在其它函数中的内容修改的情况。

下面是对hopper的逆向伪代码关于没有分析出^()Block的批注

接着是意外发现的另一个问题的相关批注

下面是对反汇编进行批注

然后是我逆向出来的代码:

第二个安排的测试点是函数QuartzCore`CA::Context::commit_commands,结果hopper没有分析出switch结构。

最后一个测试点是函数QuartzCore`drawLine,结果hopper在逆向其最善长的oc函数调用时分析传参失误。将QuartzCore`drawLine(c风格函数)在适配到QuartzCore`-[CATextLayer _drawLine:inContext:atPoint:]。hopper只会照着x64体系的传参约定,数着手指头硬生生地加入一个r8寄存器,粗暴地作为msg_send的第5个参数来对付,而并没有从编译器传参数的约定出发来考虑问题。

这个函数简单短小就一同贴上反汇编代码

QuartzCore`drawLine(objc_object*, void*, CGPoint, __CTLine const*):
0x1041ca4dc <+>: pushq %rbp
0x1041ca4dd <+>: movq %rsp, %rbp
0x1041ca4e0 <+>: movq %rsi, %rax
0x1041ca4e3 <+>: movq 0x50f2e(%rip), %rsi ; "_drawLine:inContext:atPoint:"
0x1041ca4ea <+>: movq %rax, %rcx
0x1041ca4ed <+>: popq %rbp
0x1041ca4ee <+>: jmpq *0x55d44(%rip) ; (void *)0x000000010357d800: objc_msgSend

最新文章

  1. 12个小技巧,让你高效使用Eclipse
  2. 选择目录,选择文件夹的COM组件问题。在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试器附加到该进程才会引发此异常。
  3. junit的学习
  4. Codeforces Round #297 (Div. 2)
  5. (7)nehe教程1 创建一个OpenGL窗口:
  6. 我的django之旅(四)模型,模板和视图
  7. php中使用mysql_fetch_object向页面输出结果,总结!
  8. linux学习笔记----权限与命令之间的关系(极重要)
  9. node.js 的事件机制
  10. JavaScript获取地址栏中的参数
  11. java操作Jacoco合并dump文件
  12. python数据结构与算法之问题求解
  13. mysql sql mode
  14. 【规范】前端编码规范——html 规范
  15. MogonDB安装及配置
  16. Java实现对zip和rar文件的解压缩
  17. JS实现网页背景旋转缩放轮播效果
  18. python3 tkinter
  19. PAT 甲级 1001 A+B Format
  20. android中完全退出当前应用程序的四种方法

热门文章

  1. jenkins中使用变量
  2. 04jmeter-Concurrency Thread Group
  3. 20.discuz论坛-实现伪静态
  4. 楼上请让路 RoarCTF2019 Writeup
  5. JavaScript随机生成布尔值
  6. python新式类继承------C3算法
  7. 大家都说好用的 Python 命令行库:click
  8. 聊一聊Java中的各种运算符
  9. 【IntelliJ IDEA】Unable to save settings: Failed to save settings. Please restart IntelliJ IDEA 解决办法
  10. django &amp; celery - 关于并发处理能力和内存使用的小结