使用 IDA Pro 反转 MIPS 二进制文件时,我有两个问题。源代码如下。
int main(int argc, char* argv[])
{
int m = 1;
int n = 5;
printf("sum = %d\n", m+n);
}
.text:00080510 # int __cdecl main(int argc, const char **argv, const char **envp)
.text:00080510 .globl main
.text:00080510 main:
.text:00080510 # __unwind {
.text:00080510 02 00 1C 3C 00 8B 9C 27 li $gp, 0x18B00
.text:00080518 21 E0 99 03 addu $gp, $t9
.text:0008051C 1C 80 84 8F li $a0, 0x80000
.text:00080520 44 80 99 8F la $t9, printf
.text:00080524 A4 08 84 24 addiu $a0, (aSumD - 0x80000) # "sum = %d\n"
.text:00080528 08 00 20 03 jr $t9 ; printf
.text:0008052C 06 00 05 24 li $a1, 6
.text:0008052C # } // starts at 80510
.text:00080530
(1) 我知道偏移量 0x0008051c 处的li指令实际上是lw。其编码格式为1000 11ss ssst tttt iiii iiii iiii iiii。所以我知道 sssss = (111100)2 = 28 = $gp, ttttt = (00100)2 = 4 = $a0。但我不知道如何计算 0x80000。
(2)里在偏移0x00080510 instrution需要8个字节,但另一个立在偏移0x0008051C指令需要4个字节?第一个li指令是伪指令吗?

