My sources for CS and low level programming

ZIP indir
0
main
1 dal
git@carbon4code.com:ozsipahi/Sources.git
Ömer's Mac vbe3_0.pdf
7 commit
Asm.h 2.2 KB
/*!
    @file Asm.h

    @brief MASM-written functions.

    @author Satoshi Tanda

    @copyright Copyright (c) 2020 - , Satoshi Tanda. All rights reserved.
 */
#pragma once
#include "Common.h"

#if defined(MV_PLATFORM_WINDOWS)
#include "Platform/Windows/WinAsm.h"
#else
#include "Platform/EFI/EfiAsm.h"
#endif

/*!
    @brief The entry point for the hypervisor.

    @details See Asm.asm.
 */
VOID
AsmHypervisorEntryPoint (
    );

/*!
    @brief Invalidates translations derived from EPT.

    @param[in] InvEptType - The type of invalidation.

    @param[in] InvEptDescriptor - The description of translations to invalidate.

    @return An appropriate VMX_RESULT value.
 */
VMX_RESULT
AsmInvept (
    _In_ INVEPT_TYPE InvEptType,
    _In_ CONST INVEPT_DESCRIPTOR* InvEptDescriptor
    );

/*!
    @brief Invalidates translations based on VPID.

    @param[in] InvVpidType - The type of invalidation.

    @param[in] InvVpidDescriptor - The description of translations to invalidate.

    @return An appropriate VMX_RESULT value.
 */
VMX_RESULT
AsmInvvpid (
    _In_ INVVPID_TYPE InvVpidType,
    _In_ CONST INVVPID_DESCRIPTOR* InvVpidDescriptor
    );

/*!
    @brief Reads the access rights byte of the segment.

    @details See: LAR-Load Access Rights Byte

    @param[in] SegmentSelector - The selector of the segment to read.

    @return The access rights byte of the segment, or 0 on failure.
 */
UINT32
AsmLoadAccessRightsByte (
    _In_ UINT16 SegmentSelector
    );

/*!
    @brief Issues hypercall.

    @param[in] HyperCallNumber - The hypercall number.

    @param[in] Parameter1 - The arbitrary 64bit parameter 1.

    @param[in] Parameter2 - The arbitrary 64bit parameter 2.

    @param[in] Parameter3 - The arbitrary 64bit parameter 3.

    @return The 64bit return value. Meaning is depends on HyperCallNumber.
 */
UINT64
AsmVmxCall (
    _In_ UINT64 HyperCallNumber,
    _In_ UINT64 Parameter1,
    _In_ UINT64 Parameter2,
    _In_ UINT64 Parameter3
    );

/*!
    @brief Returns the return address from this function.

    @return The return address from this function.
 */
UINT64
AsmGetCurrentInstructionPointer (
    );

/*!
    @brief Returns the current value of RSP.

    @return The current value of RSP.
 */
UINT64
AsmGetCurrentStackPointer (
    );