summaryrefslogtreecommitdiff
path: root/cheat/tf2/mem.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'cheat/tf2/mem.hpp')
-rw-r--r--cheat/tf2/mem.hpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/cheat/tf2/mem.hpp b/cheat/tf2/mem.hpp
new file mode 100644
index 0000000..22e8fbf
--- /dev/null
+++ b/cheat/tf2/mem.hpp
@@ -0,0 +1,66 @@
+#pragma once
+#include <intrin.h>
+#include "util.hpp"
+
+#define get_baseptr( ) ( ( uintptr_t )( _AddressOfReturnAddress( ) ) - sizeof( uintptr_t ) )
+
+class stack_t {
+ uintptr_t m_ptr;
+
+public:
+ __forceinline stack_t( ) : m_ptr( get_baseptr( ) ) { }
+
+ __forceinline stack_t( uintptr_t ptr ) : m_ptr( ptr ) { }
+
+ template < typename t = uintptr_t >
+ __forceinline t get( ) {
+ return ( t )m_ptr;
+ }
+
+ template < typename t = uintptr_t >
+ __forceinline t return_address( ) {
+ return *( t* )( m_ptr + sizeof( void* ) );
+ }
+
+ template < typename t = uintptr_t >
+ __forceinline t address_of_return_address( ) {
+ return ( t )( m_ptr + sizeof( uintptr_t ) );
+ }
+
+ __forceinline stack_t& next( ) {
+ return *( stack_t* )( m_ptr );
+ }
+
+ template < typename t = uintptr_t >
+ __forceinline t local( size_t at ) {
+ return ( t )( m_ptr - at );
+ }
+
+ template < typename t = uintptr_t >
+ __forceinline t arg( size_t at ) {
+ return ( t )( m_ptr + at );
+ }
+};
+
+namespace util {
+ template < typename t = uint8_t >
+ __forceinline t* memcpy( t* dst, t* src, size_t size = sizeof( t ) ) {
+ __movsb(
+ ( uint8_t* )dst,
+ ( uint8_t* )src,
+ size
+ );
+
+ return dst;
+ }
+
+ __forceinline void* memset( uint8_t* dst, uint8_t val, size_t size ) {
+ __stosb(
+ dst,
+ val,
+ size
+ );
+
+ return dst;
+ }
+} \ No newline at end of file