If you need to get in touch with me, want a place to chat, or have a question, my Discord is the best place.
XenoLua is a wrapper around Lua that provides a ton of functionality. Most notably, it provides a
LuaVariant class which wraps the functionality of converting between
Lua types. Additionally, it has helper functions for working with Lua in the
XenoScanEngine is the meat of the project. It contains the code for the scanning, data structure detection, and everything else.
XenoScanLua ties XenoScanEngine to XenoLua to provide a Lua-scriptable frontend for the scanner. Currently, this is the only entry-point to the scanner.
Additionally, this project contains some test code that ensures everything is working properly. A test is a combination of a
.h, and a
.lua file. For examples on how to use the scanner, you can check out the
.lua test files.
XenoScan uses CMake, and has been tested with Visual Studio 2017. In theory, you should be able to build the code with any modernish compiler, as long as you use CMake to generate the project files. Before you can compile, you will need to make sure you’ve checked out the submodules. Once that’s done, you’ll also have to build the luajit submodule so XenoScan can link against the libraries.
If you’re using Visual Studio, this should be easy. Simply run
buildmsvc2017.bat from a Developer Command Prompt for VS. As an example, to build a project for Visual Studio 2017, I run
Which would make a file named
XenoScan.sln appear in my
build directory (e.g.
The main development of XenoScan is done on this version of Visual Studio.
If you’re on another system or using another compiler or IDE, you’ll have to build luajit on your own and run CMake manually.
The code is designed to be platform-agnostic. Theoretically, to compile on any other platform, you would need to
- Create project/make files for your target IDE/compiler.
- Remove the
ScannerTargetWindows.hfiles from the project.
- Implement the
ScannerTargetinterface for your platform.
- Add your implementation to the project.
- ???? profit
Basic scanning functionality supports the following types:
- Integral types*:
- ascii strings
- wide strings
- Custom data structures (think
- Can consist of any combination integral and decimal types
* Lua frontend may choke on 64-bit integers, but the scanner library supports them.
Scanning supports the following types of matching:
- Equal to
- Greater than
- Greater than or equal to
- Less than
- Less than or equal to
- Ranges (
min <= check <= max)
Additionally, there is functionality to detect all instances of the following types:
- Any class with a virtual-function table