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.