mirror of
https://github.com/momo5502/hypervisor.git
synced 2025-04-19 05:32:55 +00:00
Progress
This commit is contained in:
parent
b56b9e5afa
commit
eef4a9a5a2
1
.gitmodules
vendored
1
.gitmodules
vendored
@ -4,3 +4,4 @@
|
|||||||
[submodule "external/vcrtl"]
|
[submodule "external/vcrtl"]
|
||||||
path = external/vcrtl
|
path = external/vcrtl
|
||||||
url = https://github.com/avakar/vcrtl.git
|
url = https://github.com/avakar/vcrtl.git
|
||||||
|
ignore = dirty
|
||||||
|
@ -73,21 +73,21 @@ endfunction()
|
|||||||
##########################################
|
##########################################
|
||||||
|
|
||||||
function(get_all_targets var)
|
function(get_all_targets var)
|
||||||
set(targets)
|
set(targets)
|
||||||
get_all_targets_recursive(targets ${CMAKE_CURRENT_SOURCE_DIR})
|
get_all_targets_recursive(targets ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
set(${var} ${targets} PARENT_SCOPE)
|
set(${var} ${targets} PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
##########################################
|
##########################################
|
||||||
|
|
||||||
macro(get_all_targets_recursive targets dir)
|
macro(get_all_targets_recursive targets dir)
|
||||||
get_property(subdirectories DIRECTORY ${dir} PROPERTY SUBDIRECTORIES)
|
get_property(subdirectories DIRECTORY ${dir} PROPERTY SUBDIRECTORIES)
|
||||||
foreach(subdir ${subdirectories})
|
foreach(subdir ${subdirectories})
|
||||||
get_all_targets_recursive(${targets} ${subdir})
|
get_all_targets_recursive(${targets} ${subdir})
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
get_property(current_targets DIRECTORY ${dir} PROPERTY BUILDSYSTEM_TARGETS)
|
get_property(current_targets DIRECTORY ${dir} PROPERTY BUILDSYSTEM_TARGETS)
|
||||||
list(APPEND ${targets} ${current_targets})
|
list(APPEND ${targets} ${current_targets})
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
##########################################
|
##########################################
|
||||||
|
4
external/CMakeLists.txt
vendored
4
external/CMakeLists.txt
vendored
@ -9,6 +9,7 @@ ExternalProject_Add(
|
|||||||
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vcrtl
|
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vcrtl
|
||||||
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/vcrtl
|
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/vcrtl
|
||||||
BUILD_COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_CURRENT_BINARY_DIR}/vcrtl --config $<CONFIG> --target vcrtl_driver
|
BUILD_COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_CURRENT_BINARY_DIR}/vcrtl --config $<CONFIG> --target vcrtl_driver
|
||||||
|
PATCH_COMMAND cmd /C "echo. > ${CMAKE_CURRENT_SOURCE_DIR}/vcrtl/src/runtime.cpp"
|
||||||
INSTALL_COMMAND ""
|
INSTALL_COMMAND ""
|
||||||
USES_TERMINAL_CONFIGURE 1
|
USES_TERMINAL_CONFIGURE 1
|
||||||
USES_TERMINAL_BUILD 1
|
USES_TERMINAL_BUILD 1
|
||||||
@ -16,7 +17,6 @@ ExternalProject_Add(
|
|||||||
BUILD_BYPRODUCTS "${VCRTL_LIBRARY}"
|
BUILD_BYPRODUCTS "${VCRTL_LIBRARY}"
|
||||||
CMAKE_ARGS
|
CMAKE_ARGS
|
||||||
"-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
|
"-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
|
||||||
"-DCMAKE_CONFIGURATION_TYPES=${CMAKE_CONFIGURATION_TYPES}"
|
|
||||||
|
|
||||||
"-DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS}"
|
"-DCMAKE_SHARED_LINKER_FLAGS=${CMAKE_SHARED_LINKER_FLAGS}"
|
||||||
"-DCMAKE_MODULE_LINKER_FLAGS=${CMAKE_MODULE_LINKER_FLAGS}"
|
"-DCMAKE_MODULE_LINKER_FLAGS=${CMAKE_MODULE_LINKER_FLAGS}"
|
||||||
@ -31,8 +31,6 @@ ExternalProject_Add(
|
|||||||
"-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}"
|
"-DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE}"
|
||||||
|
|
||||||
"-DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY}"
|
"-DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY}"
|
||||||
|
|
||||||
"-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(vcrtl_driver INTERFACE)
|
add_library(vcrtl_driver INTERFACE)
|
||||||
|
@ -1,7 +1,14 @@
|
|||||||
|
string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})
|
||||||
|
|
||||||
|
file(GLOB driver_sources ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
|
||||||
|
file(GLOB driver_headers ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp)
|
||||||
|
|
||||||
wdk_add_driver(driver
|
wdk_add_driver(driver
|
||||||
driver_main.cpp
|
${driver_sources}
|
||||||
thread.cpp
|
${driver_header}
|
||||||
new.cpp
|
)
|
||||||
|
target_precompile_headers(driver
|
||||||
|
PRIVATE std_include.hpp
|
||||||
)
|
)
|
||||||
|
|
||||||
cmake_path(NATIVE_PATH PROJECT_SOURCE_DIR NORMALIZE WINDOWS_PROJECT_DIR)
|
cmake_path(NATIVE_PATH PROJECT_SOURCE_DIR NORMALIZE WINDOWS_PROJECT_DIR)
|
||||||
|
@ -258,11 +258,19 @@ void throw_test()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" void __cdecl __std_terminate()
|
||||||
|
{
|
||||||
|
KeBugCheckEx(DRIVER_VIOLATION, 14, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
extern "C" NTSTATUS DriverEntry(const PDRIVER_OBJECT DriverObject, PUNICODE_STRING /*RegistryPath*/)
|
extern "C" NTSTATUS DriverEntry(const PDRIVER_OBJECT DriverObject, PUNICODE_STRING /*RegistryPath*/)
|
||||||
{
|
{
|
||||||
DriverObject->DriverUnload = unload;
|
DriverObject->DriverUnload = unload;
|
||||||
debug_log("Hello World\n");
|
debug_log("Hello World\n");
|
||||||
|
|
||||||
|
delete(new int);
|
||||||
|
|
||||||
volatile long i = 0;
|
volatile long i = 0;
|
||||||
|
|
||||||
thread::dispatch_on_all_cores([&i]()
|
thread::dispatch_on_all_cores([&i]()
|
||||||
|
55
src/driver/functional.hpp
Normal file
55
src/driver/functional.hpp
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "unique_ptr.hpp"
|
||||||
|
|
||||||
|
namespace std
|
||||||
|
{
|
||||||
|
template <typename T>
|
||||||
|
struct function;
|
||||||
|
|
||||||
|
template <typename Result, typename... Args>
|
||||||
|
struct function<Result(Args ...)>
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
struct fn_interface
|
||||||
|
{
|
||||||
|
virtual ~fn_interface() = default;
|
||||||
|
virtual Result operator()(Args ...) const = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename F>
|
||||||
|
struct fn_implementation : fn_interface
|
||||||
|
{
|
||||||
|
fn_implementation(F&& f) : f_(std::forward<F>(f))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Result operator()(Args ... a) const override
|
||||||
|
{
|
||||||
|
f_(std::forward<Args>(a)...);
|
||||||
|
}
|
||||||
|
|
||||||
|
F f_;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::unique_ptr<fn_interface> fn{};
|
||||||
|
|
||||||
|
public:
|
||||||
|
template <typename T>
|
||||||
|
function(T&& t)
|
||||||
|
: fn(new fn_implementation<T>(std::forward<T>(t)))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
~function() = default;
|
||||||
|
function(function<Result(Args ...)>&&) noexcept = default;
|
||||||
|
function& operator=(function<Result(Args ...)>&&) noexcept = default;
|
||||||
|
|
||||||
|
function(const function<Result(Args ...)>&) = delete;
|
||||||
|
function& operator=(const function<Result(Args ...)>&) = delete;
|
||||||
|
|
||||||
|
Result operator()(Args ... args) const
|
||||||
|
{
|
||||||
|
return (*fn)(std::forward<Args>(args)...);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
#include "std_include.hpp"
|
#include "std_include.hpp"
|
||||||
#include "new.hpp"
|
#include "new.hpp"
|
||||||
|
#include "logging.hpp"
|
||||||
|
|
||||||
void* __cdecl operator new(const size_t size, const POOL_TYPE pool, const unsigned long tag)
|
void* __cdecl operator new(const size_t size, const POOL_TYPE pool, const unsigned long tag)
|
||||||
{
|
{
|
||||||
|
@ -11,44 +11,3 @@ void __cdecl operator delete(void *ptr, size_t);
|
|||||||
void __cdecl operator delete(void *ptr);
|
void __cdecl operator delete(void *ptr);
|
||||||
void __cdecl operator delete[](void *ptr, size_t);
|
void __cdecl operator delete[](void *ptr, size_t);
|
||||||
void __cdecl operator delete[](void *ptr);
|
void __cdecl operator delete[](void *ptr);
|
||||||
|
|
||||||
// TEMPLATE CLASS remove_reference
|
|
||||||
template<class _Ty>
|
|
||||||
struct remove_reference
|
|
||||||
{ // remove reference
|
|
||||||
typedef _Ty type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<class _Ty>
|
|
||||||
struct remove_reference<_Ty&>
|
|
||||||
{ // remove reference
|
|
||||||
typedef _Ty type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<class _Ty>
|
|
||||||
struct remove_reference<_Ty&&>
|
|
||||||
{ // remove rvalue reference
|
|
||||||
typedef _Ty type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
typename remove_reference<T>::type&& move(T&& arg)
|
|
||||||
{
|
|
||||||
return static_cast<typename remove_reference<T>::type&&>(arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
// TEMPLATE FUNCTION forward
|
|
||||||
template<class _Ty> inline
|
|
||||||
constexpr _Ty&& forward(
|
|
||||||
typename remove_reference<_Ty>::type& _Arg)
|
|
||||||
{ // forward an lvalue as either an lvalue or an rvalue
|
|
||||||
return (static_cast<_Ty&&>(_Arg));
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class _Ty> inline
|
|
||||||
constexpr _Ty&& forward(
|
|
||||||
typename remove_reference<_Ty>::type&& _Arg)
|
|
||||||
{ // forward an rvalue as an rvalue
|
|
||||||
return (static_cast<_Ty&&>(_Arg));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
2
src/driver/sleep_callback.cpp
Normal file
2
src/driver/sleep_callback.cpp
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#include "std_include.hpp"
|
||||||
|
#include "sleep_callback.hpp"
|
2
src/driver/sleep_callback.hpp
Normal file
2
src/driver/sleep_callback.hpp
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "functional.hpp"
|
54
src/driver/type_traits.hpp
Normal file
54
src/driver/type_traits.hpp
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace std
|
||||||
|
{
|
||||||
|
// TEMPLATE CLASS remove_reference
|
||||||
|
template <class _Ty>
|
||||||
|
struct remove_reference
|
||||||
|
{
|
||||||
|
// remove reference
|
||||||
|
typedef _Ty type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class _Ty>
|
||||||
|
struct remove_reference<_Ty&>
|
||||||
|
{
|
||||||
|
// remove reference
|
||||||
|
typedef _Ty type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class _Ty>
|
||||||
|
struct remove_reference<_Ty&&>
|
||||||
|
{
|
||||||
|
// remove rvalue reference
|
||||||
|
typedef _Ty type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
typename remove_reference<T>::type&& move(T&& arg)
|
||||||
|
{
|
||||||
|
return static_cast<typename remove_reference<T>::type&&>(arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class _Ty>
|
||||||
|
using remove_reference_t = typename remove_reference<_Ty>::type;
|
||||||
|
|
||||||
|
// TEMPLATE FUNCTION forward
|
||||||
|
template <class _Ty>
|
||||||
|
inline
|
||||||
|
constexpr _Ty&& forward(
|
||||||
|
typename remove_reference<_Ty>::type& _Arg)
|
||||||
|
{
|
||||||
|
// forward an lvalue as either an lvalue or an rvalue
|
||||||
|
return (static_cast<_Ty&&>(_Arg));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class _Ty>
|
||||||
|
inline
|
||||||
|
constexpr _Ty&& forward(
|
||||||
|
typename remove_reference<_Ty>::type&& _Arg)
|
||||||
|
{
|
||||||
|
// forward an rvalue as an rvalue
|
||||||
|
return (static_cast<_Ty&&>(_Arg));
|
||||||
|
}
|
||||||
|
}
|
69
src/driver/unique_ptr.hpp
Normal file
69
src/driver/unique_ptr.hpp
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "type_traits.hpp"
|
||||||
|
|
||||||
|
namespace std
|
||||||
|
{
|
||||||
|
template <typename T>
|
||||||
|
class unique_ptr
|
||||||
|
{
|
||||||
|
unique_ptr() = default;
|
||||||
|
|
||||||
|
unique_ptr(T* pointer)
|
||||||
|
: pointer_(pointer)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
~unique_ptr()
|
||||||
|
{
|
||||||
|
if (this->pointer_)
|
||||||
|
{
|
||||||
|
delete this->pointer_;
|
||||||
|
this->pointer_ = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unique_ptr(unique_ptr<T>&& obj) noexcept
|
||||||
|
: unique_ptr()
|
||||||
|
{
|
||||||
|
this->operator=(std::move(obj));
|
||||||
|
}
|
||||||
|
|
||||||
|
unique_ptr& operator=(unique_ptr<T>&& obj) noexcept
|
||||||
|
{
|
||||||
|
if (this != &obj)
|
||||||
|
{
|
||||||
|
this->~unique_ptr();
|
||||||
|
this->pointer_ = obj.pointer_;
|
||||||
|
obj.pointer_ = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
unique_ptr(const unique_ptr<T>& obj) = delete;
|
||||||
|
unique_ptr& operator=(const unique_ptr<T>& obj) = delete;
|
||||||
|
|
||||||
|
T* operator->()
|
||||||
|
{
|
||||||
|
return this->pointer_;
|
||||||
|
}
|
||||||
|
|
||||||
|
const T* operator->() const
|
||||||
|
{
|
||||||
|
return this->pointer_;
|
||||||
|
}
|
||||||
|
|
||||||
|
T& operator*()
|
||||||
|
{
|
||||||
|
return *this->pointer_;
|
||||||
|
}
|
||||||
|
|
||||||
|
const T& operator*() const
|
||||||
|
{
|
||||||
|
return *this->pointer_;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
T* pointer_{nullptr};
|
||||||
|
};
|
||||||
|
}
|
@ -1,9 +1,9 @@
|
|||||||
|
file(GLOB runner_sources ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
|
||||||
|
file(GLOB runner_headers ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp)
|
||||||
|
|
||||||
add_executable(runner
|
add_executable(runner
|
||||||
main.cpp
|
${runner_sources}
|
||||||
driver.cpp
|
${runner_headers}
|
||||||
service_handle.cpp
|
|
||||||
native_handle.cpp
|
|
||||||
driver_device.cpp
|
|
||||||
)
|
)
|
||||||
|
|
||||||
target_precompile_headers(runner
|
target_precompile_headers(runner
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#pragma once
|
||||||
#include "service_handle.hpp"
|
#include "service_handle.hpp"
|
||||||
|
|
||||||
class driver
|
class driver
|
||||||
|
@ -30,9 +30,9 @@ bool driver_device::send(const DWORD ioctl_code, const data& input, data& output
|
|||||||
const auto success = DeviceIoControl(this->device_,
|
const auto success = DeviceIoControl(this->device_,
|
||||||
ioctl_code,
|
ioctl_code,
|
||||||
const_cast<uint8_t*>(input.data()),
|
const_cast<uint8_t*>(input.data()),
|
||||||
input.size(),
|
static_cast<DWORD>(input.size()),
|
||||||
output.data(),
|
output.data(),
|
||||||
output.size(),
|
static_cast<DWORD>(output.size()),
|
||||||
&size_returned,
|
&size_returned,
|
||||||
nullptr
|
nullptr
|
||||||
) != FALSE;
|
) != FALSE;
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#pragma once
|
||||||
#include "native_handle.hpp"
|
#include "native_handle.hpp"
|
||||||
|
|
||||||
class driver_device
|
class driver_device
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
class native_handle
|
class native_handle
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
class service_handle
|
class service_handle
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user