缓冲区溢出攻击实验(一)

本文介绍了作者进行缓冲区溢出攻击实验的学习过程,包括基础的at&t汇编、gdb调试技巧、gcc编译选项以及程序内存布局。作者通过示例程序分析了如何获取函数返回地址,并探讨了如何利用溢出修改返回地址以改变程序执行流程,为后续的恶意代码执行奠定基础。
摘要由CSDN通过智能技术生成

          无聊之余,想弄一下缓冲区溢出实验,之前一直听说这个,也没有亲自动手一下,发现真正弄起来的时候还是没那么简单的,其实学到的东西还是不少的。特此记下学习的过程。

一、基础知识

       这一部分主要是关于程序内存布局相关的知识,也涉及少量at&t汇编、gdb调试、gcc编译的知识。再次说明本人科班出生,所以在有些问题上要比科班出身的要纠结得多,但职业生涯还长,只要慢慢学习,静下心来,总能把问题解决。并且,我坚信在未来我能成为一名合格的程序猿和安全攻城狮。好的,言归正传,说知识点;

1、at&t汇编

        决定弄这个缓冲区实验之前,我还是花了10来天把汇编语言学习了一下,主要看的是王爽编写的《汇编语言》,其实选择这本书的原因不是因为它是什么圣经,而是觉得它薄。把这本汇编大致扫了一遍之后,开始干具体的实验细节,具体是参照的《Smashing The Stack For Fun And Profit》。曾近以为看懂一点8086汇编,应该很容易上手AT&T汇编,然而菜鸟发现自己想多了,还得变弄变查AT&T汇编语句。

       AT&T汇编的细节不在这里解释,主要可以参看资料:相关资料及全部源代码这是后面我的源码下载地址,同时把资料上传了上去。但是,这里是说一下几个特殊的语句,也就是我很费解的部分;

        lea src ,add指令:手册是说的是传送地址,简单一句话,我没有理解,一个博文上写的很好:地址是:深入理解计算机系统(3.4)---算数与逻辑运算指令详解,我还是复述一下上面的内容:

      lea 4(%edx,%ex,4),%eax和movl 4(%edx,%edx,4),%eax的区别 “假设%edx寄存器的值为x的话,那么lea 4(%edx,%ex,4),%eax这条指令的作用就是将 4 + x + 4x = 5x + 4赋给%eax寄存器。它和mov指令的区别就在于,假设是movl 4(%edx,%edx,4),%eax这个指令,它的作用是将内存地址为5x+4的内存区域的值赋给%eax寄存器,而leal指令只是将5x+4这个地址赋给目的操作数%eax而已,它并不对存储器进行引用的值的计算。”上面的博文中还有详尽的图文描述,为了方便,我一并摘下;假设执行指令之前,寄存器和存储器的状态如图1,则执行了movl 4(%edx,%edx,4),%eax后,寄存器和存储器的状态如图2,而执行了lea指令后

  • 10
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值