The Watcom compiler uses a fairly unusual calling convention, and IDA seems to be discarding some of the changes as irrelevant to its built-in pseudo-code. In my experience, that usually means I'm doing something wrong, as opposed to IDA :)
For example, in the following function fragment, the changes to ebx
and edx
are ignored in the pseudo-code.
; void __usercall RunScrIncDec(GeneralObject *object@<eax>, int *bufPtr@<edx>, int value@<ebx>)
RunScrIncDec proc near
cmp byte ptr [edx], 0Ah
jnz short loc_164288
inc ebx
inc edx
retn
...
Note here that bufPtr and value are both incremented, and value is indeed passed by value, not by reference.
If I change the function's return type so that it's an int by replacing the void
return type with an int
and appending the value location @<ebx>
, then IDA includes ebx
one in the pseudo-code, but still ignores edx
.
Is there any way to tell IDA to pay attention to these changes?
That edx
and ebx
aren't merely spoiled by the function, and that they're notable changes that should be reversed to bufPtr++ and value++ rather than not showing any pseudo-code at all?
Or is this just something that IDA isn't built to handle?