上一页 1 2 3 4 5 6 7 8 9 ··· 18 下一页
摘要: 识别类和类之间的关系 在父类中声明为私有的成员,虽然子类对象无法直接访问,但是在子类对象的内存结构中,父类私有的成员数据依然存在。 在没有提供构造函数的时候,系统会尝试提供默认的构造函数: 当子类中没有构造函数或析构函数,而它的父类却需要构造函数与析构函数是,编译器会为这个子类提供默认的构造函数与析 阅读全文
posted @ 2017-12-21 07:48 _No.47 阅读(545) 评论(0) 推荐(0)
摘要: 虚函数的机制 当类中定义有虚函数时,编译器会将该类中所有虚函数的首地址保存在一张地址表中,这张表被称为虚函数地址表。编译器还会在类中添加一个虚表指针。 举例: CVirtual类的构造函数中没有进行任何操作,但是我们来看构造函数内部,还是有一个赋初值的操作: 这个地址指向的是一个数组: 这些数组中的 阅读全文
posted @ 2017-12-19 09:26 _No.47 阅读(873) 评论(0) 推荐(0)
摘要: 局部对象 当对象所在作用域结束之后,销毁栈空间,此时析构函数被调用。 举例: 函数返回时自动调用析构函数: 堆对象 调用析构代理函数来处理析构函数: 为什么使用析构代理函数来调用析构函数?考虑到如果delete的对象是一个对象数组,可以使用析构代理函数依次析构所有的对象。举例: 调用了构造代理函数: 阅读全文
posted @ 2017-12-17 11:01 _No.47 阅读(460) 评论(0) 推荐(0)
摘要: 出现这种警告的原因是因为我们没有使用安全的字符串处理函数。如果想屏蔽这种警告,可以使用: 还可以使用其它的方法,参考: https://www.cnblogs.com/gb2013/archive/2013/03/05/SecurityEnhancementsInTheCRT.html 阅读全文
posted @ 2017-12-15 08:37 _No.47 阅读(655) 评论(0) 推荐(0)
摘要: 对象生成时会自动调用构造函数。只要找到了定义对象的地方,就找到了构造函数调用的时机。不同作用域的对象的生命周期不同,如局部对象、全局对象、静态对象等的生命周期各不相同,只要知道了对象的生命周期,便可以推断出构造函数的调用时机。 局部对象 反汇编: 获取对象首地址并调用构造函数: 对象的地址为: 进入 阅读全文
posted @ 2017-12-13 05:26 _No.47 阅读(4341) 评论(0) 推荐(1)
摘要: 全局变量和局部变量 阅读全文
posted @ 2017-01-16 22:40 _No.47 阅读(496) 评论(0) 推荐(0)
摘要: 各种调用方式的考察 示例: cdecl方式是调用者清空堆栈: 如果执行的是fastcall: 借助两个寄存器传递参数: 参数1和2借助局部变量来存储: 返回值 如果返回值是结构体: 返回值存放在eax和edx两个寄存器中: 返回之后再存放eax和edx到对应的局部变量中: 如果这个结构体中存放的值太 阅读全文
posted @ 2017-01-16 15:51 _No.47 阅读(907) 评论(0) 推荐(0)
摘要: 编辑来给大家盘点下.net的反编译工具: 1、Reflector Reflector是最为流行的.Net反编译工具。Reflector是由微软员工Lutz Roeder编写的免费程序。Reflector的出现使·NET程序员眼前豁然开朗,因为这个免费工具可以将·NET程序集中的中间语言反编译成C#或 阅读全文
posted @ 2017-01-15 11:09 _No.47 阅读(11073) 评论(0) 推荐(2)
摘要: 在Win32中使用MFC 阅读全文
posted @ 2017-01-14 18:02 _No.47 阅读(163) 评论(0) 推荐(0)
摘要: if...else...语句 示例: if构成多分支语句 switch 有序线性的switch: 3E82D8位置存放了一个表,标明了要跳转到的地址: 这里的每四字节都标明的是每个case块的首地址: 除了表中的第四个位置,因为没有case 4 所以,第四个位置直接标明的是退出的地址: 非线性索引: 阅读全文
posted @ 2017-01-14 10:28 _No.47 阅读(579) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 8 9 ··· 18 下一页