思い立ったので、return関数をC++のインラインアセンブリを使って実装してみた。
#include <stdio.h>
void _return(){
__asm{
pop ebp //フレームポインタ回収
pop ebp //_returnから脱出
pop ebp //呼び出し元のフレームポインタ回収
ret
}
}
void _return(int val){
__asm{
mov eax, dword ptr [ebp + 8] //返り値セット
pop ebp
pop ebp
add esp, 4 //呼び出し側の仕事
pop ebp
ret
}
}
void func1(){
_return();
puts("ここは実行されない");
return;
}
int func2(){
_return(10);
puts("ここは実行されない");
return -1;
}
int main(){
func1();
printf("%d\n", func2()); //=> 10
return 0;
}
実装してから思ったが誰得だwww