首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何截取写入内存段的指令的地址?

如何截取写入内存段的指令的地址?
EN

Stack Overflow用户
提问于 2020-01-23 05:59:38
回答 1查看 89关注 0票数 0

想象一下,我们有一个通常的指令,比如这个。

代码语言:javascript
复制
mov [eax], ebx

eax包含了一些我们想要写的地址。

这样做的目的是编写一个c程序,告诉您包含指令的地址,如果我们已经知道它将要写入的地址。

真正的问题是:使用免费的索尼pspsdk编写一个c程序,完成同样的任务。

psp使用MIPS III / IV,指令看起来类似于

代码语言:javascript
复制
sw a0 $00(t0)
##which literally spells out store register a0 at offset t0 + 0 bytes. where t0 would
## contain something like 0x08800000

免责声明:知道如何在windows上这样做仍然是有用的,因此,如果有人只知道如何在windows或甚至osx上这样做,那还是值得赞赏的,因为它可以提供有关类似编程实践的相关信息,以完成这一特定任务。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-23 12:30:56

截取写入特定地址的指令不是程序中的正常活动。

这是一些调试器提供的特性。调试器至少有三种方式可以做到这一点:

  • 调试器可以检查程序代码,并找到特定指令写入特定地址的位置。这实际上是一个非常复杂的活动,需要解释说明。通常,调试器不能完全完成它;因为这样做一般等同于完全解释和执行程序,就像计算机处理器所做的那样,而且在软件中执行得非常慢。相反,调试器可以计划部分程序执行,并在无法轻松继续的位置放置断点,例如依赖调试器未准备计算的值的分支指令。断点是中断程序执行的特殊指令,在这种情况下,会导致操作系统将控制转移到调试器。此时,调试器删除断点,请求指令是单步执行(处理器执行单条指令,然后立即中断程序执行),检查结果,并继续。
  • 调试器可以将包含所需地址的内存页标记为不可访问。然后,每当程序访问该内存时,硬件将中断程序执行,操作系统将控制转移到调试器。调试器检查导致中断的指令。如果指令正在访问目标地址,调试器就会对此进行操作。如果不是,调试器将内存保护更改为允许访问,请求指令单步执行,将内存保护更改为不允许访问,并恢复程序以等待下一次中断。(调试器可能只是模仿指令,而不是单步执行指令,因为这可能避免两次更改内存保护,这可以是expensive.)
  • Some计算机处理器模型具有支持这种调试功能的特性。调试器可以请求监视部分内存,以便硬件在访问特定地址时中断程序执行,而不是在访问整个内存页的任何部分时中断程序执行。

我不能和你正在使用的索尼平台通话。您必须检查它的文档,或者询问其他人这些特性的可用性。由于这是调试器最常使用的特性,因此研究有关调试的文档可以用来确定系统是否支持这样的功能。

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

https://stackoverflow.com/questions/59872367

复制
相关文章

相似问题

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