MIPS拆解:lui接着是lbu

时间:2012-01-26 04:05:03

标签: mips disassembly ida

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

我在IDA的这种耻辱中看到了很多。

lui       $t9 , 0x802f

...对$t9没有任何作用......并且没有跳过......

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

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

如果我是对的,那么重点是什么?这是编译器使用的不幸事件,还是程序员的不幸,或者我错过了什么?

enter image description here

3 个答案:

答案 0 :(得分:2)

您没有展示此前发生的事情。如果在lui之前有一个分支,则分支目的地的代码可以使用加载的t9值。

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

答案 1 :(得分:1)

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

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

答案似乎是我最初的猜测。它是编译器的工件或编译器的无意义,编译器没有删除(也由 m0skit0 markgz 的注释建议)

答案 2 :(得分:0)

lbu指令未进行符号扩展。结果假设在这两条指令之后0x200 + var_24($ sp)包含0x12,$ t9的值将变为ox80200012。这些指令配对通常用于加载32位存储器地址。通常的例子是迭代堆上的数据结构。