Watcom 编译器使用了一个相当不寻常的调用约定,而 IDA 似乎放弃了一些与其内置伪代码无关的更改。根据我的经验,这通常意味着我做错了什么,而不是 IDA :)
例如,在以下函数片段中,伪代码中忽略了对ebx和的更改edx。
; 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
...
这里注意 bufPtr 和 value 都是递增的,而且 value 确实是按值传递,而不是按引用传递。
如果我通过用 an 替换void返回类型int并附加值 location 来更改函数的返回类型使其为 int @<ebx>,那么 IDAebx在伪代码中包含一个,但仍然忽略edx.
有什么办法可以告诉IDA注意这些变化吗?这edx并ebx不能仅仅通过功能宠坏了,他们是显着的变化应该逆转bufPtr ++和价值++而不是完全无法显示任何伪代码?或者这只是 IDA 无法处理的事情?