我正在使用IDA(mipsb处理器)拆卸固件
我在IDA的这种耻辱中看到了很多。
lui $t9 , 0x802f
...对$t9
没有任何作用......并且没有跳过......
lbu $t9, 0x200+var_24($sp)
这对我没有意义。
在第一行:$t9
变为0x802F0000
在第二行:$t9
成为堆栈上该位置存储的任何字节。
如果我是对的,那么重点是什么?这是编译器使用的不幸事件,还是程序员的不幸,或者我错过了什么?
答案 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位存储器地址。通常的例子是迭代堆上的数据结构。