usercall不是标准的调用约定,但是用IDA反编译时经常能看到,应该是IDA特有的
1 | int __usercall sub_10017FF0@<eax>(int a1@<eax>, int a2@<ecx>, _BYTE *a3, _BYTE *a4) |
这样的函数声明,这个是IDA自己定义的,这种使用寄存器传参可能是编译时被编译器优化的结果。如上例子则表示参数a1使用eax传递,参数a2使用ecx传递的。a2和a4是压栈
要hook这类函数的时候,我们可以写一个stub函数将usercall转换成调用__cdecl修饰的函数.
1 | // |
https://github.com/michael-fadely/usercall-hook
本文作者:
KenYang
最后更新: 2024年03月29日 17:15:14
本文链接: http://shxi.cc/post/42ca8341.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!
最后更新: 2024年03月29日 17:15:14
本文链接: http://shxi.cc/post/42ca8341.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!