随笔分类 -  linux编程

git rebase 版本。。变基
摘要:git rebase,顾名思义,就是重新定义(re)起点(base)的作用,即重新定义分支的版本库状态。要搞清楚这个东西,要先看看版本库状态切换的两种情况:我们知道,在某个分支上,我们可以通过git reset,实现将当前分支切换到本分支以前的任何一个版本状态,即所谓的“回溯”。即实现了本分支的“后悔药”。也即版本控制系统的初衷。还有另一种情况,当我们的项目有多个分支的时候。我们除了在本地开发的时候可能会“回溯”外,也常常会将和自己并行开发的别人的分支修改添加到自 己本地来。这种情况下很常见。作为项目管理员,肯定会不断的合并各个子项目的补丁,并将最新版本推送到公共版本库,而作为开发人员之一,提 阅读全文

posted @ 2012-04-10 11:23 hydah 阅读(8477) 评论(0) 推荐(1)

cmu-csapp-lab2-bomb解题过程
摘要:这个题的本质是让通过gdb和objdump的工具的使用,以及对汇编代码的理解找到程序在栈中已存在的数据或者汇编代码本身的代码逻辑。从而根据固有信息确定输入,使得炸弹得以解除。这个实验有6道关卡和一道隐藏关卡。由于时间原因,我并没有想方法找出隐藏关,只是把固有的6道关卡做完了。下面说一下解题步骤。 由于炸弹爆炸是要扣分的,所以最开始需要做的任务是在炸弹爆炸函数的入口设置一个断点。这样一来当发现运行到这个断点之后就可以重新开始gdb的运行,使得爆炸函数得不到运行。由于是只有通过前一关后才能做后一关所以当做到后面几关的时候,要把前几关的答案放在一个文档里,然后运行gdb时指定这个文件,就会自动... 阅读全文

posted @ 2011-10-26 14:01 hydah 阅读(8407) 评论(2) 推荐(0)

c++ 简单的对内存的操作
摘要:最近做网络的实验题需要对内存进行操作。比如说对于一个数组char tempstr[2];tempstr[0] = 'a';tempstr[1] = 'b';要取十六位赋给一个unsigned short型的变量。对于这种要求有一下几种作法:1:unsigned short temp = 0;temp = *(unsigned short *) tempstr;cout << htons(temp)<<endl;但是这种做法有个问题就是x86架构的计算机采用的是小端序。所以对于这种情况在转换的过程中会把a放在低八位,把b放在高八位。但是这题 阅读全文

posted @ 2011-10-25 13:31 hydah 阅读(324) 评论(0) 推荐(0)

【转载】Linux下的段错误产生的原因及调试方法
摘要:简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.一般来说, 段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的 gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的信息。一旦一个程序发生了越界访问,cpu就会产生相应的异常保护,于是 阅读全文

posted @ 2011-10-25 13:25 hydah 阅读(354) 评论(0) 推荐(0)

函数指针全解析
摘要:一 通常的函数调用一个通常的函数调用的例子://自行包含头文件void MyFun(int x); //此处的申明也可写成:void MyFun( int );int main(int argc, char* argv[]){ MyFun(10); //这里是调用MyFun(10);函数 return 0;}void MyFun(int x) //这里定义一个MyFun函数{ printf(“%d\n”,x);} 这个MyFun函数是一个无返回值的函数,它并不完成什么事情。这种调用函数的格式你应该是很熟悉的吧!看主函数中调用MyFun函数的书写格式:MyFun(10); 我... 阅读全文

posted @ 2011-10-25 13:05 hydah 阅读(800) 评论(1) 推荐(0)