当前位置: 首页 > news >正文

pwn知识点——内平栈与外平栈

一、核心概念:为何要“栈平衡”

在函数调用过程中,参数和返回地址会被压入栈中。​栈平衡指的是在函数调用结束后,必须将栈顶指针(ESP)恢复到调用前的状态,以确保程序能继续正确执行。如果栈失去平衡,后续的指令可能会取到错误的数据,导致程序崩溃或更严重的安全问题。

二 、内平栈与外平栈的区别

特性

外平栈 (如 __cdecl)

内平栈 (如 __stdcall)

负责平衡方

调用者​ (Caller)

被调用函数​ (Callee)

平衡时机

函数调用返回之后

函数返回(RET)​之时

平衡指令

在调用后使用 add esp, X

使用 retn X指令

参数传递

参数从右至左压栈

参数从右至左压栈

主要应用

C语言默认约定,可变参数函数

Windows API 等固定参数函数

栈布局特征

返回地址紧邻局部变量

返回地址前可能存在对齐填充

 技术细节与漏洞利用中的差异

  • 偏移计算​:这个区别在栈溢出漏洞利用中至关重要。在外平栈布局中,覆盖返回地址所需的填充长度通常是局部变量的大小(不需要额外加rsp/esp的大小)。而在内平栈布局中,由于可能存在对齐填充,填充长度可能需要额外增加(例如,局部变量大小 + 4/8字节)。在实战中,需要通过动态调试(如GDB)来精确确定偏移量。

  • 利用技巧​:在外平栈中,攻击者控制返回地址后,通常还需要平衡栈指针(例如通过一个 pop; ret的gadget)以使后续的ROP链能正常执行。而在利用内平栈的函数时,由于函数自身会用 retn X平衡栈,攻击者需要计算好这个 X值,确保栈指针能跳转到攻击者希望的位置。

三、常用判断方法

判断特征

外平栈 (如 __cdecl)

内平栈 (如 __stdcall)

调用处的指令

紧跟 call指令后​ 有 add esp/rsp, X

call指令后通常无直接操作

函数返回指令

简单的 retn

retn X(X为参数总字节数)

可变参数支持

支持​(如 printf

不支持

外平栈:

内平栈:

综合判断与注意事项:

在实际分析中,需要综合观察以下几点来做出准确判断:

  1. 交叉验证是关键​:不能仅看调用处有无 add esp, X。你需要同时检查被调用函数的末尾是否是 retn X。如果函数是 retn,而调用后是 add esp, X,这是典型的外平栈;如果函数是 retn X,而调用后没有平衡操作,则是内平栈。

  2. 留意函数原型​:如果函数参数个数可变(如 printf),它必然使用外平栈(__cdecl),因为被调用函数在编译时无法确定参数个数。

  3. 编译器优化的影响​:在某些优化模式下,编译器可能会调整平栈方式或指令顺序,因此动态调试验证总是最可靠的方法。

推荐的判断流程:

为了快速且准确地判断,建议你遵循以下流程:

  1. IDA静态分析优先​:

    • 首先在函数调用后查看是否有 add esp, X指令。

    • 然后跳转到被调用函数,查看其末尾是 retn还是 retn X

    • 最后,结合函数名(如Windows API常有 _Function@8格式)或伪代码提示的可变参数特征进行综合判断。

  2. GDB动态调试验证​:

    • 在函数返回指令(ret/retn X)处设置断点。

    • 单步执行(si),观察 ESP寄存器的变化。若执行 retnESP仅增加4(弹出返回地址),而后由调用函数中的 add esp, X平衡,则为外平栈。若执行 retn XESP一次性增加 X+4,则为内平栈。

http://www.dtcms.com/a/420843.html

相关文章:

  • 单页面网站有哪些北京网站建设公司兴田德润电话
  • 南城网站建设公司咨询开封府景点网站建设的目的
  • php 网站后台海报模板免费网站
  • 公司网站开发费用记入什么科止专业合肥网站建设
  • 章丘营销型网站设计公司开发公司财务管理制度
  • 网站环境搭建好后怎么做网站西安高端模板建站
  • 海南省生态文明村建设促进会网站怎么做展示网站
  • 3.5 介质访问控制 (答案见原书 P93)
  • 建设网站哪些公司好仁茂网络seo
  • 大家称赞的网站建设南京宣传片制作公司
  • 怎么用网吧电脑做网站服务器吗深圳头条新闻在线看
  • 甘肃省住房建设厅网站怎么更新电脑的wordpress
  • 青岛做网站的公司有哪些在线代理浏览网站免费
  • 高端公司网站网站专题模板
  • 晟阳建设官方网站北京网页设计与制作
  • 建设银行激活社保卡网站怎么做qq盗号网站
  • wordpress边框给网站做排名优化学什么好处
  • 精品手机网站案例东莞建网站的公
  • 咸鱼网站交易付款怎么做住房城乡建设局网站首页
  • 我的世界找建筑网站西安网站建设 乐云seo
  • 做网站页面怎么做网站建设如何查看后台数据库
  • 网站建设案例要多少钱品牌建设青之见
  • 品牌网站推广方案哪个网站做logo好
  • 盐城建设企业网站个人空间备案网站名称
  • 企业备案网站名称要求知名平面广告设计公司
  • 怎么做英文的网站企业网站开源代码
  • 三雷网站程序wordpress拖拽式布局
  • 成都市建网站公司学生登录注册入口
  • 找别人网站开发没给我源代码如何访问国外网站
  • 南昌网站建设网站推广如何查看网站做没做百度推广