2 #include "memorymanip.hpp"
6 template<typename T
, typename U
, U (*rfun
)(uint32_t addr
)>
7 class lua_read_memory
: public lua_function
10 lua_read_memory(const std::string
& name
) : lua_function(name
) {}
11 int invoke(lua_State
* LS
)
13 uint32_t addr
= get_numeric_argument
<uint32_t>(LS
, 1, fname
.c_str());
14 lua_pushnumber(LS
, static_cast<T
>(rfun(addr
)));
19 template<typename T
, bool (*wfun
)(uint32_t addr
, T value
)>
20 class lua_write_memory
: public lua_function
23 lua_write_memory(const std::string
& name
) : lua_function(name
) {}
24 int invoke(lua_State
* LS
)
26 uint32_t addr
= get_numeric_argument
<uint32_t>(LS
, 1, fname
.c_str());
27 T value
= get_numeric_argument
<T
>(LS
, 2, fname
.c_str());
33 lua_read_memory
<uint8_t, uint8_t, memory_read_byte
> rub("memory.readbyte");
34 lua_read_memory
<int8_t, uint8_t, memory_read_byte
> rsb("memory.readsbyte");
35 lua_read_memory
<uint16_t, uint16_t, memory_read_word
> ruw("memory.readword");
36 lua_read_memory
<int16_t, uint16_t, memory_read_word
> rsw("memory.readsword");
37 lua_read_memory
<uint32_t, uint32_t, memory_read_dword
> rud("memory.readdword");
38 lua_read_memory
<int32_t, uint32_t, memory_read_dword
> rsd("memory.readsdword");
39 lua_read_memory
<uint64_t, uint64_t, memory_read_qword
> ruq("memory.readqword");
40 lua_read_memory
<int64_t, uint64_t, memory_read_qword
> rsq("memory.readsqword");
41 lua_write_memory
<uint8_t, memory_write_byte
> wb("memory.writebyte");
42 lua_write_memory
<uint16_t, memory_write_word
> ww("memory.writeword");
43 lua_write_memory
<uint32_t, memory_write_dword
> wd("memory.writedword");
44 lua_write_memory
<uint64_t, memory_write_qword
> wq("memory.writeqword");