首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux:通过信号处理程序模拟内存

Linux:通过信号处理程序模拟内存
EN

Stack Overflow用户
提问于 2022-08-11 12:35:13
回答 1查看 73关注 0票数 0

基本上,我希望通过将SIGSEGV捕获到特定位置来模拟内存。这些位置将是零权限映射使用mmap()。表现并不重要,因为它只是一个实验。我想出了如何计算在处理程序中访问的内存位置,但我一直在试图弄清楚是否发生了写入的读取,以及如何用假数据模拟成功的读取,或者如何模拟成功的写入,拦截写入的数据。

你能给我一些提示吗?或者其他的方法(也许是与信号无关的东西)?

我希望能在广域网上找到更多关于这一点的信息,我想在lol之前没有人有过这样愚蠢的想法。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-12 06:18:46

我不太明白你所说的模拟是什么意思。有更多的未知-访问的宽度,副作用等。无论如何,如果你要找到所有缺失的部分,你下一步要做什么?

如果您只是模拟一个访问,并从处理程序返回,CPU将重新运行错误的指令,并猜怎么着?-它将立即分段错误再次。

现在打开一罐蠕虫.

你可以试着

registers)

  • ucontext中找到指向

  • 的指令指针对指定指令进行解码,按照您想要的方式(棘手的)
  • 来模拟它,记住指令可能会产生副作用(比如设置/清除标志,或者修改
  • )。

计算出(doubleplustricky)

  • doctor ucontext appropriately

  • and将从处理程序.

返回的

  • 指令。

我相信拐角处的案件会太多。

现在打开另一罐蠕虫

另一种更像调试器的方法是实现一个单步处理程序.在分段故障处理程序中

protection

  • enable

  • 备份受保护区域,并为读取

  • 做准备,删除ucontext

  • get中的单步标志,以便处理单步exception

  • return

在一个单步处理程序中

  • 将保护区与后备区域进行比较。如果它们不同,则是写访问;执行被认为是necessary
  • restore protection
  • return

的操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73320747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档