思い立ったので、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
0 件のコメント:
コメントを投稿