#pragma once
#pragma section( ".xmp2" )
#pragma comment( linker, "/section:.xmp2,RWE" )
using __vmcall_t = void* (*)(...);

namespace vm
{
    struct _gen_data
    {
        unsigned char __vmcall_shell_code[3] = {0x0, 0x0, 0x0};
    } __declspec( allocate( ".xmp2" ) ) gen_data;

    inline __vmcall_t __vmcall = reinterpret_cast< __vmcall_t >( gen_data.__vmcall_shell_code );

    enum class calls : unsigned long long
    {
        get_world = 0xBFFD6FE9,
        get_hello = 0xBFFD6FE9
    };

    template < class T, class... Ts > T call( vm::calls e_call, Ts... args )
    {
        return reinterpret_cast< T >( __vmcall( e_call, args ) );
    }
} // namespace vm

int main()
{
    vm::call<unsigned long long>( vm::calls::get_hello );

}