reverse-engineeringida

What does "0010 ^0.16 ___u8_ iv;" in Hex-Rays IDA Pro mean?


I want to get the parameter's value when function called, when I open the program with IDA and hover on the function name I got the message like this: 1: 0008 rsi libsm::sm4::cipher_mode::Sm4CipherMode *self;, I know this means when the function called, I can find the self parameter's value in register $rsi, but on some functions, the message is like this: enter image description here

How can I understand ^0.16? Is that means this parameter is not stores in any register?


Solution

  • You are right, it means this parameter is not stored in any register. It is stored on stack instead. First part (0) is an offset into arguments area of the stack, second part (16) is the argument's size.

    EDIT: the very first part of this (0010) is the hexadecimal argument size, while the second part (rsi or ^0.16) is the so-called argument location. I don't know if it is actually documented anywhere as a thing but this doc: https://hex-rays.com/products/ida/support/idadoc/1492.shtml - describes scattered arguments including this syntax in more details.