C++反汇编与逆向分析技术揭秘的笔记(19)

>我来写笔记

按有用程度 按页码先后 最新笔记

  • 辣舞斯旮雷特

    辣舞斯旮雷特 (下片如山倒 看片如抽丝)

    到底是SIG还是SGI。 我们还可以编写SIG测试程序,通过制作SGI文件解析出程序中使用的函数,见代码清单1-1。

    2015-11-28 21:00

  • 阎王

    阎王

    断断续续,除了最后几章实战外,几乎看完此书了,发发我看此书的笔记。 看此书的童鞋可当作是导引,我提到了一些与本书相关的一些基础知识的获得方法,还有读本书的方法。 其实基本上除了第四章讲编译器除法优化的部分之外,我都是蜻蜓点水,所以本笔记对看第四章不明白的童鞋会更有帮助。 笔记下载地址:[http://yun.baidu.com/share/link?shareid=2849339737&uk=1746716968]   (1回应)

    2014-05-11 17:41

  • 稔稔

    稔稔 (我说你像云捉摸不定)

    栈结构在内存中占用一段连续的存储空间,通过esp与ebp两个栈指针寄存器来保存当前的起始地址与结束地址(栈顶与栈底) 栈帧中可以寻址的数据有局部变量,函数返回地址,函数参数等 不同的两次函数调用,所形成的栈帧也不相同。当由一个函数进入到另一个函数中时,就会针对调用函数开辟出其所需要的栈空间,形成此函数的栈帧。当这个函数结束调用时,需要清除它所使用的帧空间,关闭栈帧。(栈平衡) 0040D3E0 push ebp...

    2013-10-07 16:21

  • koo

    koo

    数组名是个地址常量值,保存数组元素的首地址。 对于数组的识别,应判断数据在内存中是否连续并且类型一致,符合即可将此段数据视为数组。 字符串处理函数在Debug版本下直接识别call xxx, 而release版本下被作为内联编译处理,因此没有call。 以下说点题外话,以C标准来说的话,1.数组是数组,数组名是数组名;2.指针是指针,地址是地址。都不可以无条件替换。 尽管内建&名为address-of,实际上取的是指针。地址无法被语言...

    2013-05-31 10:57

  • koo

    koo

    全局变量和局部变量: 访问全局变量与访问常量类似----都是通过立即数来访问。 全局静态变量,局部静态变量和全局变量生命周期一样(汇编访问方式也一样。)

    2013-05-31 10:52

  • koo

    koo

    这个更是基础了。基本上就是玩栈帧。调用约定之类的云云。 大多数情况下,利用ebp间接访问局部变量只能在非O2选项中产生,这样做事为了方便调试和检测栈平衡,使目标代码可读性更高。 在O2中,因为栈顶是稳定的,就不再使用ebp了,利用esp直接访问局部变量,可以节省一个寄存器资源。 对了,关于call, 是先push函数返回地址,再jmp到函数入口。这点不要忘记。 在O2选项下,_cdecl函数调用结束后,并不一定会马上平衡栈顶。并...

    2013-05-31 10:41

  • koo

    koo

    由于现在对一些简单的比较熟悉了,所以我笔记不会写得太详细 O2优化原则在优化方向上更注重效率,而不是节省空间,就会尽量减少分支中指令的使用。 switch的优化有点复杂,当两个case值间隔比较大的时候,就难以构成跳转表了。对于非线性的switch可以采用制作索引表的方法来优化。一个case语句块地址表,一个语句块索引表。索引表中保存地址表的编号。(case最大值和最小值之差在255以内。) case最大值和最小值之差在255以上。...

    2013-05-31 10:25

  • koo

    koo

    关于编译器优化的相关总结: 因为有些时候我需要看反汇编,对于一些算法(或者说计算方法),编译器可以做一些相关优化。 详细参考: 鲸书 所谓代码优化,是指为了达到某一种优化目的对程序代码进行变换。这样的变换有一个原则:变换前和变换后等价(不改变程序运行结果) 以下只讨论速度优化,不做其他方面优化讨论(比如,编译时间优化) No.1 常量传播 (Constant Propagation) & 复制传播 (Copy Propagation) 这是两个非...

    2013-05-31 09:44

  • koo

    koo

    关于优化: 编译器常常会采用“常量传播”和“常量折叠”的方案对代码中的变量和常量进行优化。(详细是编译原理的范畴,笔记中暂不讨论,实在想看,参考鲸书) 常量传播--------将编译期间可计算出结果的变量转换成常量,这样就减少的变量的使用。 常量折叠----当计算公式中出现多个常量进行计算的情况,且编译器可以在编译期间计算机出结果时,源码中所有常量计算都将被结果代替。 乘法: 乘法指令执行周期较长,在编译过程中...

    2013-05-30 20:25

  • koo

    koo

    书中的VC6过时了,不过似乎天朝的大多数学校还在用它? VC6控制台和多字节编码环境下的启动函数为mainCRTStartup,由系统库kernel32.dll调用(这个其实看main函数的调用栈就行了。) 该函数做了一系列的初始化工作: GetVersion _init_init 初始化堆空间 _GetCommandLineA 获取命令行参数 _crtGetEnviromentStringsA 获取环境变量基址 _setargv _setenvp 最后才调用了main函数

    2013-05-30 20:07

<前页 1 2 后页>

笔记是你写在书页留白边上的内容;是你阅读中的批注、摘抄及随感。

笔记必须是自己所写,不欢迎转载。摘抄原文的部分应该进行特殊标明。

C++反汇编与逆向分析技术揭秘

>C++反汇编与逆向分析技术揭秘