c++反汇编学习笔记(长期更新)

最近看的网课上面讲的比较好,让我感觉重新学了一遍C语言。现在我总结一下里面的知识。函数调用:介绍一下缓冲区,当函数调用的时候要提升堆栈,缓冲区里面存储局部变量。如果以某一种方式访问了存储函数返回地址的空间,那么会造成缓冲区溢出问题。...
摘要由CSDN通过智能技术生成

c++反汇编学习笔记

1.函数调用过程

现在都知道,调用函数的时候直接push参数,然后call到对应的地址,那么看下面这张图,2是第二个参数,因为参数是从右向左入栈,(这样能保证第一个参数是在低地址),1上面的是调用函数之前的ip,再往上看就是push ebp,也就是之前的ebp值,然后再将sp的值赋给ebp,之后提升堆栈(为了存储函数中的局部变量),提升完了以后保留bx si di一个一个push。
在这里插入图片描述
缓冲区是用cc填充的,那么cc是什么东西呢,比如说调试程序时候下的断点就是cc,这样懂了吧,这样子设计如果说再函数运行过程中,函数内部访问了未被初始化的地方那么程序就会停止。
讲一下缓冲区利用,按照上面的介绍,可以想象到,如果函数运行完了,那么缓冲区里面存储的东西是不变的,那么就可以利用里面的值的信息。还有就是修改函数返回地址,这样能够跳到指定的地方。
再来说一下全局变量,全局变量在程序编译的时候就被赋予了一个独一无二的内存编号。
在这里插入图片描述
像这个图上面一样,其中x就是一个全局变量,按照调试信息给出的那个地址可以找到对应的变量。
再补充一点就

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值