【问题标题】:How to Make ip point to stack segment in Assembly?如何使 ip 指向程序集中的堆栈段?
【发布时间】:2024-04-26 20:55:02
【问题描述】:

简短:我想运行堆栈段中的代码。

问题详情: 我们的任务是使用堆栈溢出方法制作一个攻击程序。

程序将代码打印到 file1.txt 目标程序有一个 PROC 分配空间并将字符放入分配的堆栈。

我们希望目标程序从 file1.txt 中获取攻击代码, 并强制它从堆栈中运行代码。 现在,我们需要将 PROC 的返回值与堆栈段中的攻击代码的地址进行交换。

我成功将PROC的ret值和code的地址交换了,但是ip认为这个有效地址是CODE SEGMENT而不是STACK SEGMENT。

那么,我们如何让ip知道堆栈段的地址而不是代码段的地址???

【问题讨论】:

  • 你忘了说什么操作系统和什么架构。现在的典型操作系统使用平面内存,因此没有代码或堆栈段。

标签: assembly stack-overflow


【解决方案1】:

假设您正在讨论一种内存模型,该模型至少通过它们在物理RAM 中的实际位置来区分codestack,并且代码在@987654321 中运行@(否则你很难确定与堆栈段地址空间匹配并允许代码在攻击期间执行的段描述符的正确值)你有三个选项:far callfar jumpfar ret 指令。有关这些指令的定义,请参阅一些 Intel x86 指令集参考,例如 this one

【讨论】:

    最近更新 更多