1

I have a MIPS64 binary (readelf tells me it's release 2), and using a corresponding objdump I can see that the first instruction of __start is:

1200009a0:  03e00025    move    zero,ra

I do not understand this. Looking at the ISA[note], the opcode (first six bits) is 000000₂, corresponding to the "special" block with function 100101₂ (last six bits): the or instruction (ref. pg. 413). In any case, we see that move is not an instruction anyway (ref. §3.2).

However, I notice that some other instructions present in the file exist and are encoded correctly.

What's going on? Is this an error in objdump or something? How do I resolve it?


[note]Apparently MIPS64 comes in six revisions. Revisions 1–5 are mostly compatible, while release 6 changes many things. I wasn't able to find a release 2 specification, so I linked revision 5. move doesn't occur at least in releases 1, 5, or 6, which is all the specifications I could find.

geometrian
  • 14,775
  • 10
  • 56
  • 132

0 Answers0