MIPS分解:lui后跟lbu
我正在使用IDA(mipsb处理器)反汇编固件 我在这部艾达的作品中看到了很多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($
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个字节归零)
答案似乎是我最初的猜测。这要么是编译器的工件,要么是没有被编译器删除的程序员的废话(也由m0skit0和markgz的评论提出)这仍然是一个谜,但显然
lui$t9,0x802F
在这段代码中毫无意义(以及我正在查看的固件的其他部分,我看到了相同的东西..相同的废话…具有相同的值lui$t9,0x802f
)
希克卡的答案肯定是错误的。(lbu
加载一个字节,但它将寄存器的前3个字节归零)
答案似乎是我最初的猜测。要么是编译器的工件,要么是没有被编译器删除的程序员的废话(也由m0skit0和markgz的评论建议)您没有显示在此之前发生的情况。如果在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的比较