gpt4 book ai didi

assembly - MIPS汇编中的两条顺序分支指令?

转载 作者:行者123 更新时间:2023-12-04 08:35:14 24 4
gpt4 key购买 nike

我正在尝试对 MIPS 固件进行逆向工程。固件采用大端编码,适用于 32 位 r4kec 处理器。

我已经反汇编(使用 objdump)二进制文件以查看程序集的样子,一切看起来都是有效的代码,但在代码的开头我看到以下两条指令:

bfc00220    152a0001    bne t1, t2, 0xbfc00228
bfc00224 10000009 b 0xbfc0024c

第一条指令检查 t1 和 t2 寄存器的值,如果它们不相等则跳转到一个地址。第二条指令似乎处理掉线情况,直接跳到后续地址。到目前为止还好吗?

据我所知,这不合法。我读过的所有可用 MIPS 文档都指出,紧跟在任何分支/跳转指令之后的指令被视为跳转延迟槽,其指令始终(除了可能分支的指令类)在实际跳转之前执行执行。

这里的关键问题是另一个分支/跳转是 不允许 在跳转延迟槽中,这将使处理器处于未定义状态。

那么我该怎么做这段代码呢?对于以已知的确定性方式处理这种情况的 CPU,我不认为这是手工组装(尽管它不会太牵强)。我也不敢相信编译器会故意生成这样的代码。另一种可能性是我对二进制文件使用了错误的反编译器,或者我的字节序错误,或者其他什么......

谁能解释这里发生了什么?

最佳答案

“未定义行为”的意思就是——它没有指定会发生什么。它可能导致 CPU 锁定,或者它可能实际执行指令。

请参阅有关 M88K 中使用的延迟槽的一些技巧的帖子:

http://www.pagetable.com/?p=313

或者答案可能更简单:您可能正在查看数据,而不是代码。由于原始二进制文件没有关于代码/数据边界的信息,因此 objdump 默认反汇编所有内容,无论是否有意义。

关于assembly - MIPS汇编中的两条顺序分支指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21666505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com