当我尝试将declspec(naked)函数调用到另一个函数时,出现错误。根据函数原型,它必须返回一个值,但当我尝试返回一个值时,会出现另一个错误提示naked函数无法返回值。
__declspec(naked) void bar() {
__asm {
nop
ret
}
}
__declspec(naked) NTSTATUS WINAPI foo(int a, int b) {
bar();
return NTSTATUS(1);
}
所有这些都是合理的,因为裸函数不为函数创建堆栈帧,因此除非程序员显式地创建堆栈帧,否则调用另一个函数会出错。但是,当我尝试以正确的方式创建堆栈帧并进行堆栈对齐时,我会遇到错误。
如何从裸函数正确地调用另一个函数?