1

我目前正在努力解决 Microrupt CTF 中的河内阶段。此 CTF 侧重于 MSP430 系列(RISC,16 位)。

我偶然发现了以下几行:

445c:  c443 fcff      mov.b #0x0, -0x4(r4)
.
.
.
4472:  5f44 fcff      mov.b -0x4(r4), r15

其中包含引用 (r4) 前面的负操作数的移动指令。我假设这将指向存储在 r4 中的任何内容(前面两个字)前面的寄存器,但是查看内存转储,这个假设似乎不正确。

我使用https://www.ti.com/lit/ug/slau049f/slau049f.pdf作为参考,第 3-52 页是对 mov.b 的参考。

请填写我这里到底发生了什么,或者给我一些关键字来搜索。

任何帮助表示赞赏!

PS:请不要剧透如何解决这个阶段,我想自己想办法。谢谢!

4

1 回答 1

2

正如Peter Cordes在评论中指出的那样,我最初的想法是正确的。(尽管措辞已关闭)

存储在 memoryaddress 中的值,等于存储在 r4 中的值加上偏移量 -4 的总和,由寄存器加上 -4(偏移量)递减 并存储在 r15 中。就是这样。


例子:

如果

r4 = 0x43FC 和 0x43F8 = 0xAB

该指令

mov.b -0x4(r4), r15

将导致值 0x43FC - 0x4 = 0x43F8

在这个地址,0xAB 被存储。

结果:

r15 = 0xAB

于 2020-12-22T22:30:52.013 回答