Version and Platform (required):
- Binary Ninja Version: 5.4.10468-dev Ultimate, 32fed8b7
- OS: macos
- OS Version: 26.5.2
- CPU Architecture: arm64
Bug Description:
Changing the return type of a function in a mac-x86_64 binary:
100000390 struct Class* Class::big(struct Class* this)
to Big results in:
100000390 struct Big Class::big(struct Class* this @ rdi)
Big is:
struct Big
{
int64_t a;
int64_t b;
int64_t c;
int64_t d;
};
and causes the return value to be passed indirectly. this should move to rsi, but becomes explicitly pinned to rdi.
Steps To Reproduce:
- Download
dynamic mountain raises freely.
- Define these types:
struct Big
{
int64_t a;
int64_t b;
int64_t c;
int64_t d;
};
struct Class
{
int64_t x;
};
struct Huge
{
int64_t v[0x10];
};
struct Pair
{
int64_t a;
int64_t b;
};
struct Small
{
int64_t a;
};
- Change the return types of each of
Class::small, Class::pair, Class::big, and Class:huge to their matching type.
Expected Behavior:
this does not grow an explicit location in Class::big or Class::huge.
Binary:
dynamic mountain raises freely
Version and Platform (required):
Bug Description:
Changing the return type of a function in a mac-x86_64 binary:
to
Bigresults in:Bigis:and causes the return value to be passed indirectly.
thisshould move torsi, but becomes explicitly pinned tordi.Steps To Reproduce:
dynamic mountain raises freely.Class::small,Class::pair,Class::big, andClass:hugeto their matching type.Expected Behavior:
thisdoes not grow an explicit location inClass::bigorClass::huge.Binary:
dynamic mountain raises freely