Add new and delete operator

This commit is contained in:
momo5502 2022-03-14 20:49:36 +01:00
parent 466a0e845e
commit 81a2aff035
6 changed files with 110 additions and 5 deletions

View File

@ -1,6 +1,7 @@
wdk_add_driver(driver
main.cpp
thread.cpp
new.cpp
)
cmake_path(NATIVE_PATH PROJECT_SOURCE_DIR NORMALIZE WINDOWS_PROJECT_DIR)

View File

@ -1,6 +1,5 @@
#include <ntddk.h>
#include "std_include.hpp"
#include "logging.hpp"
#include "nt_ext.hpp"
#include "thread.hpp"
@ -14,7 +13,6 @@ void unload(PDRIVER_OBJECT /*DriverObject*/)
extern "C" NTSTATUS DriverEntry(const PDRIVER_OBJECT DriverObject, PUNICODE_STRING /*RegistryPath*/)
{
DriverObject->DriverUnload = unload;
debug_log("Hello World\n");
volatile long i = 0;

48
src/new.cpp Normal file
View File

@ -0,0 +1,48 @@
#include "std_include.hpp"
#include "new.hpp"
void* __cdecl operator new(const size_t size, const POOL_TYPE pool, const unsigned long tag)
{
return ExAllocatePoolWithTag(pool, size, tag);
}
void* __cdecl operator new[](const size_t size, const POOL_TYPE pool, const unsigned long tag)
{
return ExAllocatePoolWithTag(pool, size, tag);
}
void* __cdecl operator new(const size_t size)
{
return operator new(size, NonPagedPool);
}
void* __cdecl operator new[](const size_t size)
{
return operator new[](size, NonPagedPool);
}
// Placement new
inline void* operator new(size_t, void* where)
{
return where;
}
void __cdecl operator delete(void* ptr, size_t)
{
ExFreePool(ptr);
}
void __cdecl operator delete(void* ptr)
{
ExFreePool(ptr);
}
void __cdecl operator delete[](void* ptr, size_t)
{
ExFreePool(ptr);
}
void __cdecl operator delete[](void* ptr)
{
ExFreePool(ptr);
}

54
src/new.hpp Normal file
View File

@ -0,0 +1,54 @@
#pragma once
void* __cdecl operator new(size_t size, POOL_TYPE pool, unsigned long tag = 'momo');
void* __cdecl operator new[](size_t size, POOL_TYPE pool, unsigned long tag = 'momo');
void* __cdecl operator new(size_t size);
void* __cdecl operator new[](size_t size);
inline void* operator new(size_t, void* where);
void __cdecl operator delete(void *ptr, size_t);
void __cdecl operator delete(void *ptr);
void __cdecl operator delete[](void *ptr, size_t);
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));
}

5
src/std_include.hpp Normal file
View File

@ -0,0 +1,5 @@
#pragma once
#include <ntddk.h>
#include "nt_ext.hpp"
#include "new.hpp"

View File

@ -1,6 +1,5 @@
#include "thread.hpp"
#include <ntddk.h>
#include "nt_ext.hpp"
#include "std_include.hpp"
namespace thread
{