gpt4 book ai didi

c++ - 从一个到另一个调用裸函数?

转载 作者:太空狗 更新时间:2023-10-29 21:19:39 24 4
gpt4 key购买 nike

当我尝试将 declspec(naked) 函数调用到另一个函数时,出现错误根据函数原型(prototype),它必须返回一个值,但是当我尝试返回一个值时,我收到另一个错误消息,提示 naked 函数无法返回值。

__declspec(naked) void bar()    {
__asm {
nop
ret
}
}

__declspec(naked) NTSTATUS WINAPI foo(int a, int b) {
bar();
return NTSTATUS(1);
}

所有这些都是合理的,因为裸函数不会为函数创建堆栈框架,因此调用另一个函数是错误的,除非程序员显式地创建了一个栈帧。但是,当我尝试创建一个堆栈框架并以正确的方式进行堆栈对齐时,我得到了一个错误。

我怎样才能正确地从一个裸函数调用另一个函数?

最佳答案

裸函数 don't support return statements

The following rules and limitations apply to naked functions:

  • The return statement is not permitted.

你应该自己处理栈帧返回值,例如

__declspec( naked ) void bar()    {
__asm {
nop
ret
}
}
__declspec(naked) bool foo(int a, int b) {
bar();
__asm {
mov al,1
ret
}
}

int main() {
bool return_value = foo(2, 2);
std::cout << return_value; // 1
}

关于c++ - 从一个到另一个调用裸函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26561768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com