存档

2011年9月 的存档

Copy On Write(写时复制)

2011年9月29日 7 条评论

Copy On Write(写时复制)是在编程中比较常见的一个技术,面试中也会偶尔出现(好像Java中就经常有字符串写时复制的笔试题),今天在看《More Effective C++》的引用计数时就讲到了Copy On Write——写时复制。下面简单介绍下Copy On Write(写时复制),我们假设STL中的string支持写时复制(只是假设,具体未经考证,这里以Mircosoft Visual Studio 6.0为例,如果有兴趣,可以自己翻阅源码)
Copy On Write(写时复制[……]

继续阅读

Member Function Templates(成员函数模板)

2011年9月28日 2 条评论

Member Function Templates翻译成中文就是成员函数模板,这个东西我个人见得少,最初是在STL的auto_ptr源代码里面看到的,当时候也不是很明白;这几天又翻了翻《More Effective C++》,正好看到上面介绍的比较详细,就找了点资料总结一下。
为了更好的说明问题,我们自己定义一个Smart Pointer(智能指针,这里只是示例,所以定义是不完整和不完善的),假设现在我们手上有这样三个类:MusicProduct、CD、MP3,类之间的关系图如下:(Visual[……]

继续阅读

PE文件格式学习资料

2011年9月26日 5 条评论

以前学习时收集了一些资料,感觉其中有些资料还是很不错的,现在电脑上的文件也是乱七八糟的,拿出来做个备份。
学习PE最权威的资料当属微软官方的《Microsoft Portable Executable and Common Object File Format Specification》,可能现在文档的名字变了,最新的下载地址在http://msdn.microsoft.com/en-us/windows/hardware/gg463119,点击Accept就可以看到了。
上面的PE文件介绍是[……]

继续阅读

分类: PE文件格式 标签: , ,

虚拟机安装Windows8攻略

2011年9月19日 7 条评论

最近微软发布了一款全新的Windows系列操作系统,没错,那就是Windows 8. 于是我也想来凑个热闹(尽管我一直在使用Windows XP);既然只是玩玩,那就网虚拟机里面弄吧(我用的是VMWare),不过中间却遇到了几个小问题,记下来和大家分享一下。
1.下载Windows 8的安装镜像
“微软官方这次提供了64位含开发工具的版本,和64、32位不含开发工具的版本,均为iso光盘镜像格式,你可以使用刻录工具刻录成光盘安装,或者使用虚拟光驱载入来安装。你可以在Windows7、Vista [……]

继续阅读

湖南省第七届大学生程序设计竞赛题目

2011年9月16日 没有评论

湖南省第七届大学生计算机程序设计竞赛
The Seventh Hunan Collegiate Programming Contest

2011年9月15日
本次比赛11道题目,共12页。如有缺页,请立即通知赛场工作人员。
所有题目均采用标准输入输出,请不要读写任何文件。
所有题目的正确输出均是惟一的。你的输出只有和正确输出完全一致时才能通过。
传送(如不能在线查看请使用迅雷下载):
http://plcdn.qiniudn.com/wp-content/uploads/2011/09/HNCP[……]

继续阅读

POJ 1161 The Suspects[并查集]

2011年9月13日 2 条评论

并查集分三个操作,并、查、初始化。初始化时把秩初始化为0,值和父亲都是自己;查的时候看看节点的父亲是不是自己,如果是,则停止查找,如果不是,查找父节点的父节点,同时压缩路径,把子孙节点的父节点都更新为最后找到的父节点。并的时候判断下两个节点是不是在一个集合中,如果不在,判断两个节点的父节点的秩,秩大的做父节点。如果秩相等,则任意一个节点作为父节点,作为父节点的秩增加1.
传送题目地址:POJ 1161 The Suspects http://poj.org/problem?id=1611

1
[……]

继续阅读

POJ 1050 To the Max[DP]

2011年9月13日 没有评论

POJ 2479/2593的拓展,从一维数组变成了二维矩阵,不过我们可以把情况模拟成一维的情况,在DP的基础上需要加上枚举。
题目要求求出给定的一个矩阵的和最大的子矩阵。
我们可以枚举第a行到第c行的情况(假设已经确定矩阵已经确定为最上面为第a行,最下面为第c行),那么只需要确定列的范围即可。我们可以把每一列都求和,这样会得到单独的一行,就可以直接求这一行的最大子段和即可。
POJ 1050 To the Max[DP] 传送:POJ 1050 To the Max http://poj.org[……]

继续阅读

POJ 2479 Maximum sum[DP]

2011年9月12日 没有评论

类似于HDU 1003 Max Sum这一题,只不过这里是说把数组分为两段,把这两段的最大子段和求出来相加,求出最大的这样的值。
方法还是DP,跟HDU1003一样,从i = 0 to n – 1求一次最大子段和,然后从i = n – 1 to 0求一次最大子段和,最后相加判断即可。
POJ 2593 Maximum sum
传送:
POJ 2479 Maximum sum http://poj.org/problem?id=2479
POJ 2593 Max Sequence http://poj.org/p[……]

继续阅读

HDU 1003 Max Sum[DP]

2011年9月12日 1 条评论

水题,很久以前做过的,现在做起来竟然WA了不少次,唉,好久没接触DP了。
这个题就是最大子段和了,不过要求出子段的起始位置和结束位置。答案会有多种,比如某一个连续子段和为0的,要不要算进去,实际上测试的时候算进去和不算进去都是AC的。
状态转移方程:sum[i + 1] = sum[i] > 0 ? sum[i] + num[i + 1] : num[i + 1](这里写成sum[i] >= 0不影响正确性)
下面是AC代码,比较混乱。
HDU 1003 Max Sum[DP] 题目地址:http[……]

继续阅读

两次内存断点法寻找OEP

2011年9月11日 没有评论

逆向过程中通过会遇到脱壳的过程,而脱壳的方式有有多重,如果手工脱壳,需要找到OEP。
所谓“两次内存断点法寻找OEP”,按照《加密与解密*第三版》上的解释来说,就是这样的。
一般的外壳会依次对.text、.rdata、.data、.rsrc区块进行解压(解密)处理,所以,可以先在.rdata、.data等区块下内存访问断点,中断后,此时代码已解压,接着再对代码段(.text)下内存访问断点,即可到达OEP。
我个人的理解是所有节区都解压完毕之后,然后程序的执行流会转移到OEP,这个时候自然回去访[……]

继续阅读

分类: 逆向调试 标签: , , , ,