3

I'm trying to understand this part of a MIPS binary I am reversing using IDA. I have attached screenshots of the decompilation, disassembly, and the offset passed into the jalr instruction.

I am quite new to MIPS, so I think I am misunderstanding what's going on here.

The mktime() is a stub, so I guess that must be the reason for the odd output?

To me it looks like its just jumping to the start of the Global Offset Table, which makes no sense. Maybe it's trying to reference some function from the .got? I'm not too sure what's going on here. .GOT entry to memmove is at .got:004D0D78.

.got:004D0D78 memmove_ptr: .word memmove

decompilation disassembly global offset table

1 Answer 1

2

The first slot of the GOT is special. At runtime, it is patched by the dynamic loader to point to its resolver function (_dl_runtime_resolve or similar). That function uses information in $t8 (symbol/relocation offset) to look up the symbol in one of the dependent shared objects and jumps to it. It also usually patches the corresponding GOT slot so that next calls go directly to the destination function and need not go through the resolver again.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.