プログラム カウンター (AKA 命令ポインター) を 0 にリセットしようとしています。
次の C コードが動作することを期待していました (しかし、動作しませんでした)。
typedef void(*func)();
func reset = NULL;
reset();
VS2013 コンパイラを使用する場合の逆アセンブリは次のとおりです。
mov dword ptr[reset],0
mov esi,esp
call dword ptr[reset]
この問題は C 言語の標準ではなく、特定のコンパイラの実装の問題であることを認識しています。それにもかかわらず、私はそれがすべての適切なコンパイラでほとんど機能することを期待しています.
PC/IP をその関数のアドレスに設定する以外に、関数呼び出しを何にコンパイルできますか?
ありがとう