这是我之前问题的延伸。这是使用 COM 虚拟函数和__fastcall约定的x64 Windows 可执行文件中的程序集示例。
mov [rsp+32], rdx ; 5th param
lea r9, var ; 4th param
xor r8d, r8d ; 3rd param
mov rdx, r14 ; 2nd param
mov rcx, r15 ; 1st param
mov rax, [rax+24] ; 4th function pointer
call cs:__guard_dispatch_icall_fptr ; call dynamic dispatch
在伪代码中,IDA 仅显示 4 个参数,第 5 个参数消失。
IDA 显示如下:(ppv + 24)(a, b, c, d);
但真正的函数定义将是这样的:(ppv + 24)(a, b, c, d, e);
我尝试过的: 1. 使用 Ctrl+F9 组合键在 vtable 中添加具有正确函数定义和正确位置的头文件,2. 将编译器调用约定更改为
__fastcall选项 > 编译器菜单中,3 Y.使用键更改函数定义。问题:如何允许在使用 IDA(或任何扩展)的函数中显示所有堆栈参数?