写在开始

从6月7日开始到今天已经有5天了,在这5天的业余时间(工作之余)里终于系统的完成了C++反汇编的大部分问题的学习,今天写篇总结,算是对这几天学习的总结。

首先我想说明的一个问题就是我为什么要花时间研究C++反汇编?

这事得从笔者遇到的一个问题开始说起,大约2周前我们项目做在开发过程中遇到了一个Crash的问题,由于只有客户提供的一个.dmp文件,我们只能从这个地方入手,说起来很奇怪,从C++代码的角度根本看不出来问题,我找来了一个传说中的公司的大牛,大牛就在我面前给我详细的分析了一遍这个转储文件,感觉他看反汇编出来的代码就像看C++源代码一样,看问题也会更透彻,这个问题分析结束了之后笔者觉得应该在这方面稍微研究一下,于是有了最近的几篇文章。

我是怎么研究的

说起汇编代码,最开始接触是上大学的时候,学校教的IBM-PC汇编语言,当时觉得还成,用汇编写些东西还算顺利,后来大三以后在做在做嵌入式开发(ARM,DSP开发笔者都略懂)的时候也写过一些汇编的代码,那么为什么看C++反出来的汇编我突然看不懂了呢?

首先就是对不上号,看到汇编代码,不知道对应的C++代码应该是什么样子的,于是在这几天里面我写了很多的demo, 试图找到两者之间的对应关系,包括:

1.       函数调用

2.       虚函数处理

3.       类处理

4.       This指针

5.       虚表

6.       参数传递

7.       栈实现

终于把这两者之间的对应关系找到了,找到了这两者的对应关系以后,再去看反出来汇编感觉是有如神助,行云流水,不敢说全懂了,但是大部分已经打通了。

总结,建议和致谢

感谢大牛让我见识到了C++反汇编有东西需要学,其实学习这东西不是说一个人有多牛,重要的是你应该根据自己的情况知道自己欠缺哪方面的知识,并且知道如何去补上这些东西,如果有需要同样知识的朋友,建议作代码对比,个人觉得这是一个捷径。如果对这方面有什么问题欢迎一起讨论,共勉..

我为什么要学习C++反汇编相关推荐

  1. [系统安全] 三.IDA Pro反汇编工具初识及逆向工程解密实战

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  2. c语言反汇编教程,ollydbg使用――反汇编入门

    反汇编需要汇编语言的基础,感觉可以同时学, ollydbg快捷键: F2――下断点,也就是指定断点的地址: F3――加载一个可执行程序,进行调试分析: F4――程序执行到光标处: F5――缩小还原当前 ...

  3. 为什么要学习和使用 C 语言?

    一.前言 对于理工科学生来说,这个答案可能很简单,因为这是一门必修课.而对于程序员来说选择一门编程语言,在某种程度上,对职业生涯的发展会产生重大的影响,所以必须慎之又慎.那么,为什么要选择一门诞生了将 ...

  4. 嵌入式工程师到底要不要学习ARM汇编指令?arm学习文章汇总

    嵌入式工程师到底要不要学习ARM汇编指令? 网上搜索这个问题,答案很多,大部分的建议是不要学汇编,只要学C语言. 而一口君作为一个十几年经验的驱动工程师,个人认为,汇编语言还是需要掌握的,想要搞精.搞 ...

  5. arm32 linux 内存分布,gcc代码反汇编查看内存分布[2]: arm-linux-gcc

    arm-none-linux-gnueabi-gcc -v gcc version 4.4.1 (Sourcery G++ Lite 2010q1-202) 重点: 代码中的内存分配, 地址从低到高: ...

  6. 反汇编算法介绍和应用——递归下降算法分析

    上一篇博文我介绍了Windbg使用的线性扫描(linear sweep)反汇编算法.本文我将介绍IDA使用的递归下降(recursive descent)反汇编算法.(转载请指明来源于breaksof ...

  7. 反汇编算法介绍和应用——线性扫描算法分析

    做过逆向的朋友应该会很熟悉IDA和Windbg这类的软件.IDA的强项在于静态反汇编,Windbg的强项在于动态调试.往往将这两款软件结合使用会达到事半功倍的效果.可能经常玩这个的朋友会发现IDA反汇 ...

  8. java编写代码用什么_如何学习用Java编写代码:为什么要学习以及从哪里开始

    java编写代码用什么 by John Selawsky 约翰·塞劳斯基(John Selawsky) 如何学习用Java编写代码:为什么要学习以及从哪里开始 (How to learn to cod ...

  9. 现代hy-9600音响_从音响工程师到软件工程师-为什么我要学习编码

    现代hy-9600音响 by Kalalau Cantrell 通过Kalalau Cantrell 从音响工程师到软件工程师-为什么我要学习编码 (From Sound Engineer to So ...

最新文章

  1. mysql表文件被删_mysql表物理文件被误删的解决方法
  2. OSG的HUD抬头文字显示
  3. Zabbix安装(十):监控windows进程
  4. 用汇编实现add函数
  5. 解决Android手机 屏幕横竖屏切换
  6. VTK:PolyData之CenterOfMass
  7. win 二进制门安装mysql_windows安装mysql2 gem(包括windows 7 64位)
  8. golang语言学第四课:循环
  9. 单线程的Redis为什么却能支撑高并发?
  10. git代码托管 · 操作举例: “git bash here ”(全程操作讲解) - git命令篇
  11. 控制台无法连接_指挥中心控制台整体解决方案,告别“信息孤岛”
  12. SEO之Google--PageRank优化剖析(二)
  13. ora optimizer
  14. Pytorch:目标检测网络-FPN
  15. 国产CI520 13.56MHz非接触式读写器NFC读卡芯片替代CV520
  16. 汇编语言:协处理器浮点指令:FILD
  17. k8s中亲和性与反亲和性
  18. 中职网络安全操作系统渗透
  19. 从懵逼到恍然大悟之Java中RMI的使用
  20. 港联证券|基金和股票的区别是什么?谁更适合做短线?

热门文章

  1. listview刷新,延迟加载,用单行刷新取代notifyDataSetChanged
  2. Java 对象初始化过程
  3. Java并发编程—说说Runnable与Callable
  4. Java集合—ArrayList底层原理
  5. mongodb如何快速进行版本升级
  6. 集合已修改,可能无法执行枚举操作
  7. Spring boot 字符集编码
  8. STM32的备份寄存器测试
  9. [转]Jquery中AJAX错误信息调试参考
  10. fast_recovery_area无剩余空间(ORA-19815)