
汇编
文章平均质量分 67
shiyuqing1207
这个作者很懒,什么都没留下…
展开
-
底层理解函数调用实现过程 栈结构 栈过程
首先寄存器使用惯例:eip :指令地址寄存器,保存程序计数器的值,当前执行的指令的下一条指令的地址值,16位中为ip,32位为eip。eip不可以直接赋值,一般都是cpu自动加1来更新,指令call和ret以及jmp可以改变eip的值。另外汇编代码格式有ATT和intel格式,gcc和objdump的默认格式就是ATT。几个小区别,1首先是指令ATT汇编指令后面有一个l,比如intel格式原创 2015-05-31 18:26:25 · 3388 阅读 · 1 评论 -
CSAPP课程实验 bomb实验 拆炸弹实验(1)
由于内容较长,所以打算分成几个部分来写。实验准备知识:实验三是CSAPP课程中的bomb炸弹实验。一个非常有意思的实验。实验主要提供了2个文件,一个bomb二进制可执行文件,一个bomb.c C源文件。实验主要设置6个关卡phase,要求你每一关输入一个特定的字符串,来拆掉炸弹。主要是考察对汇编语言的熟悉理解程度,反汇编和逆向工程以及gdb调试。感觉datalab主要是对应教材的第二章原创 2015-05-19 20:26:35 · 25236 阅读 · 1 评论 -
从汇编和高级语言的角度理解传值方式,传值,传引用,传指针的本质机制与区别。白话通俗易懂。
函数的传参与返回值的方式有传值和传递引用,c语言中就是传值,而c++扩展传引用。而传值分为传递值(实参的值,此时形参是实参在内存中的一份拷贝,形参在使用时分配内存,结束时释放,实参和形参在内存中的地址不同,因此对形参的改变不会改变实参)传值的另外一种是传指针(传递的值是实参的地址,此时形参的值为实参的地址,所以对形参的修改就会修改实参的值)而传引用,从高级语言的层面看,引用是实参的别名原创 2015-05-23 21:22:28 · 1620 阅读 · 0 评论 -
CSAPP课程实验 bomb实验 拆炸弹实验 (2)
关卡1-3 phase1-3正式进入关卡1,phase_1首先是关卡1的汇编代码为:可以看到前3句是非常熟悉的栈开辟代码,下面一起来看一下基本的栈调用过程的汇编代码:在gcc下是AT&T格式的,源操作数,目的操作数Push %ebp 保存 ebp原有的值,防止被新调用的函数覆盖修改,在退出函数时通过pop ebp 恢。ebp每次原创 2015-05-19 20:39:52 · 13160 阅读 · 1 评论 -
CSAPP 深入理解计算机系统课程实验 bomb实验 反向编译 汇编(4)
隐藏关卡。Secretphase这个隐藏关卡还是很难发现的,自己带的班上的学生中,仅有3个学生发现并解除了炸弹。中间也出现了一些小小问题,在给他们验收的时候也有意识的去引导他们发现一些小问题,并讨论解决。首先是隐藏关卡的发现,其实在汇编代码中就有一个secret_phase.就是看怎么跳到隐藏关卡了,搜索发现,是通过phase_defused作为入口点的。其实这里可以不分析这个函数,看到在原创 2015-05-20 20:30:09 · 5203 阅读 · 1 评论 -
从汇编的底层代码实现角度深入理解形参和实参
形参是在函数定义时给出的参数,实参是主调函数中调用某一个函数时给出的。形参和实参的作用是实现主调函数与被调函数之间的数据传递,也就是我们通常所说的传参。形参实际是实参在被调函数中的一份拷贝,调用时压入栈中,分配内存,当调用函数结束,内存就会释放,那一份拷贝随之释放。从底层汇编代码来看,主调函数在调用另外一个函数的时候,会先将参数传入,调用函数是通过栈过程来实现的,被调函数把参数压入栈中原创 2015-05-23 16:36:15 · 1625 阅读 · 0 评论 -
CSAPP课程与实验
这个学期一直很忙,还没有入学,就预先收到了导师对CSAPP课程助教的邀请,去网上了解了一下CSAPP课程,感觉非常有用的一门课,可惜当年我们读大学的时候没有开。今年这个学期我们学校也是第一次课程改革,将大二的计算机组成这门课换成了CSAPP。教学模式也是完全效仿国外教学制度,大班授课,小班辅导,由11班级的大班,5个授课老师,由于是第一年课改,之前没有学过这门课程,做起来这门课的助教的任务和压力也原创 2015-05-19 11:17:28 · 6236 阅读 · 0 评论 -
CSAPP 深入理解计算机系统 Buflab实验,缓冲区溢出攻击实验(2)
Level0首先是test函数和getbuf函数以及smoke函数的c代码如下: Level0 就很简单,就是本来test函数调用getbuf函数,调用完以后还返回test函数,现在我们要做的是调用getbuf函数后,通过输入我们的exploit,使得调用完以后不返回test函数了而是执行smoke函数。这里的实现就很简单,只需要输入超出缓冲区大小的字符串来覆盖到g原创 2015-06-01 19:26:33 · 8076 阅读 · 2 评论 -
CSAPP 深入理解计算机系统 Buflab实验,缓冲区溢出攻击实验(6)
level4前面4个level都是栈基址是固定的,所以我们可以猜测到栈帧的结构进行覆盖篡改,这一关就是引入了缓冲区溢出攻击的一种保护措施,就是栈基址随机化,让栈基址不可以猜测,我们来实施缓冲区溢出攻击,那么我们就要用到nop雪橇了。nop只是执行eip自加1不进行其他的操作。在我们无法猜测的时候,只需要找到最大的地址,然后前面用nop雪橇那么只要在nop段中都会自动划入。这一level用的原创 2015-06-01 21:06:45 · 7155 阅读 · 4 评论 -
CSAPP 深入理解计算机系统 Buflab实验,缓冲区溢出攻击实验(5)
level3前面的几个实验都是不管是去执行别的函数比如bang还是去执行我们自己的exploit的函数,最后都没有返回就退出了,我们通过我们的漏洞利用代码可以修改内存(比如把全局变量修改为我们的cookie)修改寄存器中的值,比如当前的level3,我们都把原来的恢复现场需要用的返回地址和原test的ebp给破坏了,这一关中,我们将修复这些被我们破坏的栈状态信息,让最后还是回到test中,让被原创 2015-06-01 21:04:52 · 6551 阅读 · 1 评论 -
CSAPP 深入理解计算机系统 Buflab实验,缓冲区溢出攻击实验(4)
level2Level2是更进了一步,也是不返回到test,而是去执行函数bang,但是区别是bang也要传入参数,但是参数是是一个全局变量,这里就是不同于level1那样在栈上覆盖了,因为全局变量要去内存地址中修改了,但是又不能调用个一个可以修改全局变量的函数,这里就只能利用我们的exploit代码了,让我们的exploit代码具有执行这些功能的函数,那么怎么执行起来呢,那就是把区别与之前是原创 2015-06-01 20:19:28 · 8591 阅读 · 0 评论 -
CSAPP 深入理解计算机系统 Buflab实验,缓冲区溢出攻击实验(1)
由于实验太长所以还是采用分开其实感觉之前做过那个bomb实验以后,这个实验相对来说还是很容易的,主要是要搞懂缓冲区溢出原理,以及堆栈的过程,函数调用的实现过程,做完这个实验如果认认真真的做完,对于堆栈的过程,还有缓存溢出攻击的原理就会掌握的比较清楚的。个人感觉实验设计的还是非常的好的,非常值得做一做。做这个实验首先是要建立在bomb实验和对函数调用栈过程的基础上,如果你觉得你理解起来有困难原创 2015-06-01 19:18:53 · 18282 阅读 · 0 评论 -
CSAPP 深入理解计算机系统 Buflab实验,缓冲区溢出攻击实验(3)
Level1Level1是和level0一样调用完getbuf以后我们不返回getbuf的调用者test而是去执行fizz函数,区别就是这个fizz函数要求我们传入参数,而且传入的参数必须是我们的cookie。所以在level0的方法我们轻松的知道了如何去执行fizz,就是用fizz函数的入口地址去覆盖返回地址,这里的关键就是找到fizz函数的参数从栈中的什么地方传入的,然后我们把我们的coo原创 2015-06-01 19:46:30 · 7089 阅读 · 2 评论 -
CSAPP深入理解操作系统 课程实验 bomb 反向编译 汇编(3)
第四关: 首先也是栈开辟:然后由第三关以及前面对sscanf函数的分析可知,这里应该也是要输入两个数。参数1从-0xc(%ebp)加载,参数2从-0x10(%ebp)处加载。0x804a23e应该里面的内容也是sscanf的输入格式之类的。返回值要等于2,不然会引爆炸弹。接一下来一段说明输入的第一个参数的范围要在0-14之间接下来,赋初始原创 2015-05-20 16:34:04 · 5591 阅读 · 1 评论