SyntaxHighlighter

StackEdit CSS

2013年3月26日火曜日

return関数実装したった

もうなんかありそうなネタ。
思い立ったので、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