上海网站策划天河做网站系统
上海网站策划,天河做网站系统,运营好的网站制作中心,简历自我评价VS2008中V表结束标记的分析 在逆向C目标时#xff0c;我们有时候可能会关注一个V表中到底有多少个虚函数。 这种细节大概多半是与编译器实现相关。 为了弄清楚这个问题#xff0c;我在VS2008下写了一个简单的测试程序来探求这个问题的答案。 下面是C的测试程序源码#xff1… VS2008中V表结束标记的分析 在逆向C目标时我们有时候可能会关注一个V表中到底有多少个虚函数。 这种细节大概多半是与编译器实现相关。 为了弄清楚这个问题我在VS2008下写了一个简单的测试程序来探求这个问题的答案。 下面是C的测试程序源码 class IBox {public: virtual void f1() 0; virtual void f2() 0; virtual void f3() 0; virtual void f4() 0;};class Box : public IBox {protected: int id;public: Box() { id 0; } Box(int boxId) { id boxId; } Box(Box const box) { id box.id; }public: virtual void f1() { printf(f1: %d\n, id); } virtual void f2() { printf(f2: %d\n, id); } virtual void f3() { printf(f3: %d\n, id); } virtual void f4() { printf(f4: %d\n, id); }}; 上面例子中在IBox中依次定义了4个虚函数分别为f1, f2, f3, f4 我将使用Windbg调试器进行测试。 测试过程分为次4次测试每次测试调整虚函数数量为 no1: vtbl: f1 no2: vtbl: f1 f2 no3: vtbl: f1 f2 f3 no4: vtbl: f1 f2 f3 f4 每次测试又包括了Debug和Release版本下面是实际上的V表输出 no1 /debug: 00df1023 00000000 00000000 00000000 no1 /release: 011b1000 00000048 00000000 00000000 no2 /debug: 00c41023 00c4119a 00000000 00000000 no2 /release: 00d21000 00d21020 00000048 00000000 no3 /debug: 00321023 00321230 0032122b 00000000 no3 /release: 011d1000 011d1020 011d1040 00000048 no4 /debug: 00a81023 00a8119a 00a81226 00a81221 00000000 005f005f 0061006e 00690074 no4 /release: 011b1000 011b1020 011b1040 011b1060 00000000 00000048 00000000 00000000 总结 相信上面的结果已经一目了然了。我们可以得出初步结论 在Debug下V表是以0结束而在Release下V表是48结束。 对于其它类型的编译器例如VC8,VC6或者G而言大家可以自行测试。 通过以上结论我们可以容易得定位出一个V表到底有多少个虚函数 posted on 2013-01-06 22:54 孤注一掷 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/bitxj/archive/2013/01/06/2848418.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/90192.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!