2

我正在使用 IDA(mipsb 处理器)拆卸固件

我在 IDA 的dissasm 中看到了很多。

lui       $t9 , 0x802f

......什么都不做$t9......并且不跳..

lbu      $t9, 0x200+var_24($sp)

这对我来说毫无意义。在第一行: $t9变为 0x802F0000 在第二行:$t9变为存储在堆栈上该位置的任何字节。

如果我是对的,那有什么意义呢?这是使用的编译器的事故,还是程序员的事故,或者我错过了什么?

在此处输入图像描述

4

3 回答 3

3

你没有展示在此之前发生了什么。如果在 lui 之前有一个分支,则分支目标处的代码可能正在使用加载的 t9 值。

此外,在特定于处理器的选项中禁用指令简化。我怀疑 800D8328 的商店使用 t9 值作为地址的一部分,IDA 通过替换完整值来简化它。

于 2012-03-21T11:59:01.090 回答
1

这仍然是一个谜,它是如何到达这里的,但显然lui $t9 , 0x802F在这段代码中绝对没有任何目的(以及我正在查看的固件的其他部分,我看到同样的事情......同样的废话......具有相同的值lui $t9, 0x802f

hsikcah的回答肯定是错的。(lbu加载一个字节,但它将寄存器的前 3 个字节归零)..

答案似乎是我最初的猜测。它要么是编译器的工件,要么是编译器未删除的编码器的废话(m0skit0markgz的评论也建议)

于 2012-02-07T04:47:50.687 回答
0

lbu 指令没有符号扩展。结果假设 0x200+var_24($sp) 在这 2 条指令之后包含 0x12,$t9 的值将变为 ox80200012。这些指令对通常用于加载 32 位内存地址。一个常见的例子是遍历堆上的数据结构。

于 2012-02-03T14:14:25.583 回答