You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
yeah, param_1 is the r0 register. Issue is that changing the calling convention to __thiscall ends up with r0 just being forced to be void*, and changing TrashTStringInstancePlus to be a noreturn ends up ending all functions that call it early, due to it being a flow override. This is... extremely not ideal. Changing TrashTStringInstancePlus to return void just results in.. this, which isn't ideal either
How do I make r0 not killed by the call?
This picture is technically correct but really stupid. I would consider this to be a decompiler bug as it seems like it is losing the context of where it was in the struct.
Setting it to thiscall without a class namespace will just get you a void *.
I've known something wasn't quite right for a long time now, but this has got to be the clearest and simplest example.
Basically what seems to be happening is the type propagation system is considering r0 to be the type of the pointer to the field and is no longer considering it to be any pointer into the original struct. The information of what it is pointing into should be preserved when not killed by call.
This problem most likely occurs when the value is preserved by the caller on the stack too.
how do i upload a portion of the code for this to be reviewed again? I've seen that done elsewhere but i'm not sure what would need to be copied
It might be better to wait until requested. The information already provided might be sufficient. A trivial test case would probably be created for a test case in the decompiler anyway.
I'm probably just talking nonsense at this point though
This picture is technically correct but really stupid. I would consider this to be a decompiler bug as it seems like it is losing the context of where it was in the struct.
Setting it to thiscall without a class namespace will just get you a void *.
Originally posted by @astrelsky in #7864 (reply in thread)
Not sure what exactly is causing this, but it's really annoying and requires me to constantly make pointer offset overrides
The text was updated successfully, but these errors were encountered: