MIPS分解:lui后跟lbu

MIPS分解:lui后跟lbu,mips,disassembly,ida,Mips,Disassembly,Ida,我正在使用IDA(mipsb处理器)反汇编固件 我在这部艾达的作品中看到了很多 lui $t9 , 0x802f …不使用$t9…执行任何操作,并且不会跳转 lbu $t9, 0x200+var_24($sp) 这对我来说毫无意义。 在第一行:$t9变为0x802F0000 在第二行:$t9成为堆栈上该位置存储的任何字节 如果我是对的,那有什么意义?这是使用的编译器的失误,还是程序员的失误,还是我遗漏了什么 lbu指令没有符号扩展。因此,假设0x200+var_24($

我正在使用IDA(mipsb处理器)反汇编固件

我在这部艾达的作品中看到了很多

lui       $t9 , 0x802f
…不使用
$t9
…执行任何操作,并且不会跳转

lbu      $t9, 0x200+var_24($sp)
这对我来说毫无意义。 在第一行:
$t9
变为0x802F0000 在第二行:
$t9
成为堆栈上该位置存储的任何字节

如果我是对的,那有什么意义?这是使用的编译器的失误,还是程序员的失误,还是我遗漏了什么


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

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

这仍然是一个谜,但显然
lui$t9,0x802F
在这段代码中毫无意义(以及我正在查看的固件的其他部分,我看到了相同的东西..相同的废话…具有相同的值
lui$t9,0x802F

西卡的回答肯定是错误的。(
lbu
加载单个字节,但它将寄存器的前3个字节归零)


答案似乎是我最初的猜测。这要么是编译器的工件,要么是没有被编译器删除的程序员的废话(也由m0skit0markgz的评论提出)

这仍然是一个谜,但显然
lui$t9,0x802F
在这段代码中毫无意义(以及我正在查看的固件的其他部分,我看到了相同的东西..相同的废话…具有相同的值
lui$t9,0x802f

希克卡的答案肯定是错误的。(
lbu
加载一个字节,但它将寄存器的前3个字节归零)


答案似乎是我最初的猜测。要么是编译器的工件,要么是没有被编译器删除的程序员的废话(也由m0skit0markgz的评论建议)

您没有显示在此之前发生的情况。如果在lui之前有分支,则分支目标处的代码可能使用加载的t9值


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

您没有显示在此之前发生的情况。如果lui之前有分支,则destina处的代码可以使用加载的t9值对分支进行初始化


此外,请禁用处理器特定选项中的指令简化。我怀疑800D8328处的存储区正在使用t9值作为地址的一部分,IDA通过替换完整值对其进行简化。

对我来说也没有意义。可能是一个旧的坏编译器或某种执行NOP的神秘方式……代码错误ht是用
-O0
编译的。优化通常会删除像这样的废话。对我来说也没有意义。可能是一个旧的坏编译器或某种神秘的方法来执行NOP…代码可能是用
-O0
编译的。优化通常会删除像这样的废话。嗯…所以你说的是alr现在,在$t9的前3个字节中,lbu$t9之后仍然会存在…基本上就像一个ADD指令..要向基址添加偏移量,我添加了一张图片。注意
$t6=0x000000EE
和它下面的
bne
比较
$t9
$t6
…如果你是这样做的话,
bne
将是无用的说的是真的,对吗?我是说bne中的比较…如果你是对的,那么总是错的…但我认为你错了对不起,你的图片与你的问题不匹配。在屏幕上,lbu进入T8,而不是T9。我的答案仍然有效,因为你可以阅读mips指令集,看到lbu没有符号扩展。??我突出显示了$T9看第一行,请看黄色…跟随黄色。当然
lbu
load byte unsigned
。但是一个字节就是一个字节,
$t9
可以容纳4个字节。您是说
$t9
中的其他3个字节保持不变,但代码显示了其他情况…正如我所知,
bne
有时会跳转,有时会跳转s不是跳转..只是根据与0xEEhmmm比较的字节…所以你是说,在$t9的前3个字节中,已经存在的任何东西,在lbu$t9之后仍将存在…基本上就像一条添加指令..要向基添加偏移量,我添加了一张图片。注意,
$t6=0x000000EE
和它下面的
bne
$t9
$t6
…如果你说的是真的,
bne
将是无用的,对吗?我的意思是bne中的比较…如果你是对的,将永远是错误的…但我认为你错了对不起,你的图片与你的问题不匹配。在那个屏幕盖中,lbu将进入T8,而不是t9。我的答案仍然是正确的您可以读取mips指令集,并看到lbu没有符号扩展。??我突出显示$t9供您查看第一行,请参见黄色…跟随黄色。当然
lbu
load byte unsigned
。但是一个字节是一个字节,
$t9
包含4个字节。您是说
$t9
中的其他3个字节保持不变,但code显示了另一种情况……正如我所知道的,
bne
有时会跳转,有时不会跳转……只是基于字节与0xEE的比较