使用 __declspec(naked) 定义的函数,编译器只会负责参数压栈、执行CALL指令,和释放参数的内存(堆栈平衡),除此之外啥也没有,比如提升堆栈,寄存器的保存和恢复,或者是函数返回,这些都要自己添加。
【Win32汇编】__declspec(naked)裸函数
上图是一个裸函数,因为连参数都没有,编译器做的事情就是一个CALL。由于没有RET,所以程序会出错。

调用处生成的CALL
【Win32汇编】__declspec(naked)裸函数

跳转到函数体,全是INT3,没有RET,函数无法返回到调用处,程序出错。
【Win32汇编】__declspec(naked)裸函数


下面给出一个裸函数实现加法的例子。
【Win32汇编】__declspec(naked)裸函数
返回值通过 EAX 返回给主函数。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-15
  • 2021-11-22
  • 2022-12-23
  • 2022-01-14
猜你喜欢
  • 2021-09-30
  • 2021-11-03
  • 2021-09-19
  • 2022-01-04
  • 2022-12-23
  • 2022-01-25
  • 2021-11-07
相关资源
相似解决方案