Dump interfaces

This commit is contained in:
a2x 2023-09-09 23:51:17 +10:00
parent 28e23da953
commit 2e7cc79b06
7 changed files with 1079 additions and 13 deletions

235
generated/interfaces.cs Normal file
View File

@ -0,0 +1,235 @@
public static class animationsystem_dll {
public const ulong AnimationSystemUtils_001 = 0x647c0;
public const ulong AnimationSystem_001 = 0x5f2c0;
}
public static class client_dll {
public const ulong LegacyGameUI001 = 0x84bba0;
public const ulong Source2ClientUI001 = 0x83b070;
public const ulong Source2ClientPrediction001 = 0x7608b0;
public const ulong ClientToolsInfo_001 = 0x6ebd70;
public const ulong Source2Client002 = 0x6ebd90;
public const ulong GameClientExports001 = 0x6ebd80;
public const ulong EmptyWorldService001_Client = 0x439cb0;
public const ulong Source2ClientConfig001 = 0x421090;
}
public static class engine2_dll {
public const ulong SimpleEngineLoopService_001 = 0x1e2800;
public const ulong ClientServerEngineLoopService_001 = 0x1d88b0;
public const ulong KeyValueCache001 = 0x1d4c80;
public const ulong HostStateMgr001 = 0x1d26c0;
public const ulong GameEventSystemServerV001 = 0x1ce090;
public const ulong GameEventSystemClientV001 = 0x1ce080;
public const ulong EngineServiceMgr001 = 0x1c9980;
public const ulong VProfService_001 = 0x1b7b30;
public const ulong ToolService_001 = 0x1b68d0;
public const ulong StatsService_001 = 0x1b1b60;
public const ulong SplitScreenService_001 = 0x1aede0;
public const ulong SoundService_001 = 0x1a9970;
public const ulong ScreenshotService001 = 0x1a5840;
public const ulong RenderService_001 = 0x1a2bc0;
public const ulong NetworkService_001 = 0x1a26d0;
public const ulong NetworkServerService_001 = 0x19d8e0;
public const ulong NetworkP2PService_001 = 0x1993d0;
public const ulong NetworkClientService_001 = 0x193020;
public const ulong MapListService_001 = 0x18c040;
public const ulong InputService_001 = 0x179e30;
public const ulong GameUIService_001 = 0x174910;
public const ulong GameResourceServiceServerV001 = 0x172690;
public const ulong GameResourceServiceClientV001 = 0x172680;
public const ulong BugService001 = 0x16b6b0;
public const ulong BenchmarkService001 = 0x169e90;
public const ulong VENGINE_GAMEUIFUNCS_VERSION005 = 0x117640;
public const ulong EngineGameUI001 = 0x116900;
public const ulong INETSUPPORT_001 = 0xe6520;
public const ulong Source2EngineToServerStringTable001 = 0xa1550;
public const ulong Source2EngineToServer001 = 0x8b000;
public const ulong Source2EngineToClientStringTable001 = 0x839f0;
public const ulong Source2EngineToClient001 = 0x59810;
}
public static class filesystem_stdio_dll {
public const ulong VAsyncFileSystem2_001 = 0x1eed0;
public const ulong VFileSystem017 = 0x1eec0;
}
public static class host_dll {
public const ulong Source2Host001 = 0x18e50;
public const ulong SinglePlayerSharedMemory001 = 0x18ad0;
public const ulong SaveRestoreDataVersion001 = 0x18ac0;
public const ulong PredictionDiffManager001 = 0x16e60;
public const ulong HostUtils001 = 0x123f0;
public const ulong GameSystem2HostHook = 0x11c40;
public const ulong GameModelInfo001 = 0x11b60;
public const ulong DebugDrawQueueManager001 = 0x115b0;
}
public static class imemanager_dll {
public const ulong IMEManager001 = 0xc470;
}
public static class inputsystem_dll {
public const ulong InputSystemVersion001 = 0x28d0;
public const ulong InputStackSystemVersion001 = 0x16f0;
}
public static class localize_dll {
public const ulong Localize_001 = 0x3830;
}
public static class matchmaking_dll {
public const ulong GameTypes001 = 0x506a0;
public const ulong MATCHFRAMEWORK_001 = 0x101570;
}
public static class materialsystem2_dll {
public const ulong MaterialUtils_001 = 0x4da90;
public const ulong TextLayout_001 = 0x4a1e0;
public const ulong PostProcessingSystem_001 = 0x429e0;
public const ulong FontManager_001 = 0x377c0;
public const ulong VMaterialSystem2_001 = 0x25f30;
}
public static class meshsystem_dll {
public const ulong MeshSystem001 = 0x7140;
}
public static class navsystem_dll {
public const ulong NavSystem001 = 0x7590;
}
public static class networksystem_dll {
public const ulong SerializedEntitiesVersion001 = 0xd3510;
public const ulong NetworkSystemVersion001 = 0xbd6e0;
public const ulong NetworkMessagesVersion001 = 0x9ca30;
public const ulong FlattenedSerializersVersion001 = 0x7c430;
}
public static class panorama_dll {
public const ulong PanoramaUIEngine001 = 0x5e7b0;
}
public static class panorama_text_pango_dll {
public const ulong PanoramaTextServices001 = 0x4caa0;
}
public static class panoramauiclient_dll {
public const ulong PanoramaUIClient001 = 0x12570;
}
public static class particles_dll {
public const ulong ParticleSystemMgr003 = 0x4c710;
}
public static class pulse_system_dll {
public const ulong IPulseSystem_001 = 0x5a20;
}
public static class rendersystemdx11_dll {
public const ulong RenderUtils_001 = 0x53390;
public const ulong VRenderDeviceMgrBackdoor001 = 0x4aab0;
public const ulong RenderDeviceMgr001 = 0x4aaa0;
}
public static class resourcesystem_dll {
public const ulong ResourceSystem013 = 0x106b0;
}
public static class scenefilecache_dll {
public const ulong SceneFileCache002 = 0x6970;
public const ulong ResponseRulesCache001 = 0x3210;
}
public static class scenesystem_dll {
public const ulong SceneUtils_001 = 0x138e40;
public const ulong SceneSystem_002 = 0xc6f30;
public const ulong RenderingPipelines_001 = 0x8b170;
}
public static class schemasystem_dll {
public const ulong SchemaSystem_001 = 0xa820;
}
public static class server_dll {
public const ulong NavGameTest001 = 0xa88160;
public const ulong ServerToolsInfo_001 = 0x89c1d0;
public const ulong Source2GameClients001 = 0x89c1e0;
public const ulong Source2GameEntities001 = 0x89c1f0;
public const ulong Source2Server001 = 0x89c200;
public const ulong EmptyWorldService001_Server = 0x5a09a0;
public const ulong Source2ServerConfig001 = 0x580c00;
public const ulong EntitySubclassUtilsV001 = 0x2e4d50;
public const ulong customnavsystem001 = 0x258400;
public const ulong Source2GameDirector001 = 0x14d580;
}
public static class soundsystem_dll {
public const ulong SoundOpSystem001 = 0x155570;
public const ulong SoundOpSystemEdit001 = 0x8ab40;
public const ulong VMixEditTool001 = 0x70f80;
public const ulong SoundSystem001 = 0x46620;
}
public static class steamaudio_dll {
public const ulong SteamAudio001 = 0x12cf0;
}
public static class steamclient64_dll {
public const ulong IVALIDATE001 = 0x82a280;
public const ulong CLIENTENGINE_INTERFACE_VERSION005 = 0x826000;
public const ulong SteamClient020 = 0x621de0;
public const ulong SteamClient019 = 0x621dd0;
public const ulong SteamClient018 = 0x621dc0;
public const ulong SteamClient017 = 0x621db0;
public const ulong SteamClient016 = 0x621da0;
public const ulong SteamClient015 = 0x621d90;
public const ulong SteamClient014 = 0x621d80;
public const ulong SteamClient013 = 0x621d70;
public const ulong SteamClient012 = 0x621d60;
public const ulong SteamClient011 = 0x621d50;
public const ulong SteamClient010 = 0x621d40;
public const ulong SteamClient009 = 0x621d30;
public const ulong SteamClient008 = 0x621d20;
public const ulong SteamClient007 = 0x621d10;
public const ulong SteamClient006 = 0x621d00;
public const ulong p2pvoice002 = 0xd8b70;
public const ulong p2pvoicesingleton002 = 0xd5510;
}
public static class tier0_dll {
public const ulong VStringTokenSystem001 = 0x18add0;
public const ulong TestScriptMgr001 = 0x13d3e0;
public const ulong VProcessUtils002 = 0x12d730;
public const ulong VEngineCvar007 = 0x5fff0;
}
public static class v8system_dll {
public const ulong Source2V8System001 = 0x1670;
}
public static class valve_avi_dll {
public const ulong VAvi001 = 0x2f90;
}
public static class valve_wmf_dll {
public const ulong VMediaFoundation001 = 0x12d0;
}
public static class vphysics2_dll {
public const ulong VPhysics2_Handle_Interface_001 = 0x5e7b0;
public const ulong VPhysics2_Interface_001 = 0x5a550;
}
public static class vscript_dll {
public const ulong VScriptManager010 = 0x2c880;
}
public static class vstdlib_s64_dll {
public const ulong IVALIDATE001 = 0x24ff0;
public const ulong VEngineCvar002 = 0x5750;
}
public static class worldrenderer_dll {
public const ulong WorldRendererMgr001 = 0x216f0;
}

239
generated/interfaces.hpp Normal file
View File

@ -0,0 +1,239 @@
#pragma once
#include <cstddef>
namespace animationsystem_dll {
constexpr std::ptrdiff_t AnimationSystemUtils_001 = 0x647c0;
constexpr std::ptrdiff_t AnimationSystem_001 = 0x5f2c0;
}
namespace client_dll {
constexpr std::ptrdiff_t LegacyGameUI001 = 0x84bba0;
constexpr std::ptrdiff_t Source2ClientUI001 = 0x83b070;
constexpr std::ptrdiff_t Source2ClientPrediction001 = 0x7608b0;
constexpr std::ptrdiff_t ClientToolsInfo_001 = 0x6ebd70;
constexpr std::ptrdiff_t Source2Client002 = 0x6ebd90;
constexpr std::ptrdiff_t GameClientExports001 = 0x6ebd80;
constexpr std::ptrdiff_t EmptyWorldService001_Client = 0x439cb0;
constexpr std::ptrdiff_t Source2ClientConfig001 = 0x421090;
}
namespace engine2_dll {
constexpr std::ptrdiff_t SimpleEngineLoopService_001 = 0x1e2800;
constexpr std::ptrdiff_t ClientServerEngineLoopService_001 = 0x1d88b0;
constexpr std::ptrdiff_t KeyValueCache001 = 0x1d4c80;
constexpr std::ptrdiff_t HostStateMgr001 = 0x1d26c0;
constexpr std::ptrdiff_t GameEventSystemServerV001 = 0x1ce090;
constexpr std::ptrdiff_t GameEventSystemClientV001 = 0x1ce080;
constexpr std::ptrdiff_t EngineServiceMgr001 = 0x1c9980;
constexpr std::ptrdiff_t VProfService_001 = 0x1b7b30;
constexpr std::ptrdiff_t ToolService_001 = 0x1b68d0;
constexpr std::ptrdiff_t StatsService_001 = 0x1b1b60;
constexpr std::ptrdiff_t SplitScreenService_001 = 0x1aede0;
constexpr std::ptrdiff_t SoundService_001 = 0x1a9970;
constexpr std::ptrdiff_t ScreenshotService001 = 0x1a5840;
constexpr std::ptrdiff_t RenderService_001 = 0x1a2bc0;
constexpr std::ptrdiff_t NetworkService_001 = 0x1a26d0;
constexpr std::ptrdiff_t NetworkServerService_001 = 0x19d8e0;
constexpr std::ptrdiff_t NetworkP2PService_001 = 0x1993d0;
constexpr std::ptrdiff_t NetworkClientService_001 = 0x193020;
constexpr std::ptrdiff_t MapListService_001 = 0x18c040;
constexpr std::ptrdiff_t InputService_001 = 0x179e30;
constexpr std::ptrdiff_t GameUIService_001 = 0x174910;
constexpr std::ptrdiff_t GameResourceServiceServerV001 = 0x172690;
constexpr std::ptrdiff_t GameResourceServiceClientV001 = 0x172680;
constexpr std::ptrdiff_t BugService001 = 0x16b6b0;
constexpr std::ptrdiff_t BenchmarkService001 = 0x169e90;
constexpr std::ptrdiff_t VENGINE_GAMEUIFUNCS_VERSION005 = 0x117640;
constexpr std::ptrdiff_t EngineGameUI001 = 0x116900;
constexpr std::ptrdiff_t INETSUPPORT_001 = 0xe6520;
constexpr std::ptrdiff_t Source2EngineToServerStringTable001 = 0xa1550;
constexpr std::ptrdiff_t Source2EngineToServer001 = 0x8b000;
constexpr std::ptrdiff_t Source2EngineToClientStringTable001 = 0x839f0;
constexpr std::ptrdiff_t Source2EngineToClient001 = 0x59810;
}
namespace filesystem_stdio_dll {
constexpr std::ptrdiff_t VAsyncFileSystem2_001 = 0x1eed0;
constexpr std::ptrdiff_t VFileSystem017 = 0x1eec0;
}
namespace host_dll {
constexpr std::ptrdiff_t Source2Host001 = 0x18e50;
constexpr std::ptrdiff_t SinglePlayerSharedMemory001 = 0x18ad0;
constexpr std::ptrdiff_t SaveRestoreDataVersion001 = 0x18ac0;
constexpr std::ptrdiff_t PredictionDiffManager001 = 0x16e60;
constexpr std::ptrdiff_t HostUtils001 = 0x123f0;
constexpr std::ptrdiff_t GameSystem2HostHook = 0x11c40;
constexpr std::ptrdiff_t GameModelInfo001 = 0x11b60;
constexpr std::ptrdiff_t DebugDrawQueueManager001 = 0x115b0;
}
namespace imemanager_dll {
constexpr std::ptrdiff_t IMEManager001 = 0xc470;
}
namespace inputsystem_dll {
constexpr std::ptrdiff_t InputSystemVersion001 = 0x28d0;
constexpr std::ptrdiff_t InputStackSystemVersion001 = 0x16f0;
}
namespace localize_dll {
constexpr std::ptrdiff_t Localize_001 = 0x3830;
}
namespace matchmaking_dll {
constexpr std::ptrdiff_t GameTypes001 = 0x506a0;
constexpr std::ptrdiff_t MATCHFRAMEWORK_001 = 0x101570;
}
namespace materialsystem2_dll {
constexpr std::ptrdiff_t MaterialUtils_001 = 0x4da90;
constexpr std::ptrdiff_t TextLayout_001 = 0x4a1e0;
constexpr std::ptrdiff_t PostProcessingSystem_001 = 0x429e0;
constexpr std::ptrdiff_t FontManager_001 = 0x377c0;
constexpr std::ptrdiff_t VMaterialSystem2_001 = 0x25f30;
}
namespace meshsystem_dll {
constexpr std::ptrdiff_t MeshSystem001 = 0x7140;
}
namespace navsystem_dll {
constexpr std::ptrdiff_t NavSystem001 = 0x7590;
}
namespace networksystem_dll {
constexpr std::ptrdiff_t SerializedEntitiesVersion001 = 0xd3510;
constexpr std::ptrdiff_t NetworkSystemVersion001 = 0xbd6e0;
constexpr std::ptrdiff_t NetworkMessagesVersion001 = 0x9ca30;
constexpr std::ptrdiff_t FlattenedSerializersVersion001 = 0x7c430;
}
namespace panorama_dll {
constexpr std::ptrdiff_t PanoramaUIEngine001 = 0x5e7b0;
}
namespace panorama_text_pango_dll {
constexpr std::ptrdiff_t PanoramaTextServices001 = 0x4caa0;
}
namespace panoramauiclient_dll {
constexpr std::ptrdiff_t PanoramaUIClient001 = 0x12570;
}
namespace particles_dll {
constexpr std::ptrdiff_t ParticleSystemMgr003 = 0x4c710;
}
namespace pulse_system_dll {
constexpr std::ptrdiff_t IPulseSystem_001 = 0x5a20;
}
namespace rendersystemdx11_dll {
constexpr std::ptrdiff_t RenderUtils_001 = 0x53390;
constexpr std::ptrdiff_t VRenderDeviceMgrBackdoor001 = 0x4aab0;
constexpr std::ptrdiff_t RenderDeviceMgr001 = 0x4aaa0;
}
namespace resourcesystem_dll {
constexpr std::ptrdiff_t ResourceSystem013 = 0x106b0;
}
namespace scenefilecache_dll {
constexpr std::ptrdiff_t SceneFileCache002 = 0x6970;
constexpr std::ptrdiff_t ResponseRulesCache001 = 0x3210;
}
namespace scenesystem_dll {
constexpr std::ptrdiff_t SceneUtils_001 = 0x138e40;
constexpr std::ptrdiff_t SceneSystem_002 = 0xc6f30;
constexpr std::ptrdiff_t RenderingPipelines_001 = 0x8b170;
}
namespace schemasystem_dll {
constexpr std::ptrdiff_t SchemaSystem_001 = 0xa820;
}
namespace server_dll {
constexpr std::ptrdiff_t NavGameTest001 = 0xa88160;
constexpr std::ptrdiff_t ServerToolsInfo_001 = 0x89c1d0;
constexpr std::ptrdiff_t Source2GameClients001 = 0x89c1e0;
constexpr std::ptrdiff_t Source2GameEntities001 = 0x89c1f0;
constexpr std::ptrdiff_t Source2Server001 = 0x89c200;
constexpr std::ptrdiff_t EmptyWorldService001_Server = 0x5a09a0;
constexpr std::ptrdiff_t Source2ServerConfig001 = 0x580c00;
constexpr std::ptrdiff_t EntitySubclassUtilsV001 = 0x2e4d50;
constexpr std::ptrdiff_t customnavsystem001 = 0x258400;
constexpr std::ptrdiff_t Source2GameDirector001 = 0x14d580;
}
namespace soundsystem_dll {
constexpr std::ptrdiff_t SoundOpSystem001 = 0x155570;
constexpr std::ptrdiff_t SoundOpSystemEdit001 = 0x8ab40;
constexpr std::ptrdiff_t VMixEditTool001 = 0x70f80;
constexpr std::ptrdiff_t SoundSystem001 = 0x46620;
}
namespace steamaudio_dll {
constexpr std::ptrdiff_t SteamAudio001 = 0x12cf0;
}
namespace steamclient64_dll {
constexpr std::ptrdiff_t IVALIDATE001 = 0x82a280;
constexpr std::ptrdiff_t CLIENTENGINE_INTERFACE_VERSION005 = 0x826000;
constexpr std::ptrdiff_t SteamClient020 = 0x621de0;
constexpr std::ptrdiff_t SteamClient019 = 0x621dd0;
constexpr std::ptrdiff_t SteamClient018 = 0x621dc0;
constexpr std::ptrdiff_t SteamClient017 = 0x621db0;
constexpr std::ptrdiff_t SteamClient016 = 0x621da0;
constexpr std::ptrdiff_t SteamClient015 = 0x621d90;
constexpr std::ptrdiff_t SteamClient014 = 0x621d80;
constexpr std::ptrdiff_t SteamClient013 = 0x621d70;
constexpr std::ptrdiff_t SteamClient012 = 0x621d60;
constexpr std::ptrdiff_t SteamClient011 = 0x621d50;
constexpr std::ptrdiff_t SteamClient010 = 0x621d40;
constexpr std::ptrdiff_t SteamClient009 = 0x621d30;
constexpr std::ptrdiff_t SteamClient008 = 0x621d20;
constexpr std::ptrdiff_t SteamClient007 = 0x621d10;
constexpr std::ptrdiff_t SteamClient006 = 0x621d00;
constexpr std::ptrdiff_t p2pvoice002 = 0xd8b70;
constexpr std::ptrdiff_t p2pvoicesingleton002 = 0xd5510;
}
namespace tier0_dll {
constexpr std::ptrdiff_t VStringTokenSystem001 = 0x18add0;
constexpr std::ptrdiff_t TestScriptMgr001 = 0x13d3e0;
constexpr std::ptrdiff_t VProcessUtils002 = 0x12d730;
constexpr std::ptrdiff_t VEngineCvar007 = 0x5fff0;
}
namespace v8system_dll {
constexpr std::ptrdiff_t Source2V8System001 = 0x1670;
}
namespace valve_avi_dll {
constexpr std::ptrdiff_t VAvi001 = 0x2f90;
}
namespace valve_wmf_dll {
constexpr std::ptrdiff_t VMediaFoundation001 = 0x12d0;
}
namespace vphysics2_dll {
constexpr std::ptrdiff_t VPhysics2_Handle_Interface_001 = 0x5e7b0;
constexpr std::ptrdiff_t VPhysics2_Interface_001 = 0x5a550;
}
namespace vscript_dll {
constexpr std::ptrdiff_t VScriptManager010 = 0x2c880;
}
namespace vstdlib_s64_dll {
constexpr std::ptrdiff_t IVALIDATE001 = 0x24ff0;
constexpr std::ptrdiff_t VEngineCvar002 = 0x5750;
}
namespace worldrenderer_dll {
constexpr std::ptrdiff_t WorldRendererMgr001 = 0x216f0;
}

203
generated/interfaces.json Normal file
View File

@ -0,0 +1,203 @@
{
"animationsystem_dll": {
"AnimationSystemUtils_001": 411584,
"AnimationSystem_001": 389824
},
"client_dll": {
"ClientToolsInfo_001": 7257456,
"EmptyWorldService001_Client": 4431024,
"GameClientExports001": 7257472,
"LegacyGameUI001": 8698784,
"Source2Client002": 7257488,
"Source2ClientConfig001": 4329616,
"Source2ClientPrediction001": 7735472,
"Source2ClientUI001": 8630384
},
"engine2_dll": {
"BenchmarkService001": 1482384,
"BugService001": 1488560,
"ClientServerEngineLoopService_001": 1935536,
"EngineGameUI001": 1140992,
"EngineServiceMgr001": 1874304,
"GameEventSystemClientV001": 1892480,
"GameEventSystemServerV001": 1892496,
"GameResourceServiceClientV001": 1517184,
"GameResourceServiceServerV001": 1517200,
"GameUIService_001": 1526032,
"HostStateMgr001": 1910464,
"INETSUPPORT_001": 943392,
"InputService_001": 1547824,
"KeyValueCache001": 1920128,
"MapListService_001": 1622080,
"NetworkClientService_001": 1650720,
"NetworkP2PService_001": 1676240,
"NetworkServerService_001": 1693920,
"NetworkService_001": 1713872,
"RenderService_001": 1715136,
"ScreenshotService001": 1726528,
"SimpleEngineLoopService_001": 1976320,
"SoundService_001": 1743216,
"Source2EngineToClient001": 366608,
"Source2EngineToClientStringTable001": 539120,
"Source2EngineToServer001": 569344,
"Source2EngineToServerStringTable001": 660816,
"SplitScreenService_001": 1764832,
"StatsService_001": 1776480,
"ToolService_001": 1796304,
"VENGINE_GAMEUIFUNCS_VERSION005": 1144384,
"VProfService_001": 1801008
},
"filesystem_stdio_dll": {
"VAsyncFileSystem2_001": 126672,
"VFileSystem017": 126656
},
"host_dll": {
"DebugDrawQueueManager001": 71088,
"GameModelInfo001": 72544,
"GameSystem2HostHook": 72768,
"HostUtils001": 74736,
"PredictionDiffManager001": 93792,
"SaveRestoreDataVersion001": 101056,
"SinglePlayerSharedMemory001": 101072,
"Source2Host001": 101968
},
"imemanager_dll": {
"IMEManager001": 50288
},
"inputsystem_dll": {
"InputStackSystemVersion001": 5872,
"InputSystemVersion001": 10448
},
"localize_dll": {
"Localize_001": 14384
},
"matchmaking_dll": {
"GameTypes001": 329376,
"MATCHFRAMEWORK_001": 1054064
},
"materialsystem2_dll": {
"FontManager_001": 227264,
"MaterialUtils_001": 318096,
"PostProcessingSystem_001": 272864,
"TextLayout_001": 303584,
"VMaterialSystem2_001": 155440
},
"meshsystem_dll": {
"MeshSystem001": 28992
},
"navsystem_dll": {
"NavSystem001": 30096
},
"networksystem_dll": {
"FlattenedSerializersVersion001": 508976,
"NetworkMessagesVersion001": 641584,
"NetworkSystemVersion001": 775904,
"SerializedEntitiesVersion001": 865552
},
"panorama_dll": {
"PanoramaUIEngine001": 386992
},
"panorama_text_pango_dll": {
"PanoramaTextServices001": 314016
},
"panoramauiclient_dll": {
"PanoramaUIClient001": 75120
},
"particles_dll": {
"ParticleSystemMgr003": 313104
},
"pulse_system_dll": {
"IPulseSystem_001": 23072
},
"rendersystemdx11_dll": {
"RenderDeviceMgr001": 305824,
"RenderUtils_001": 340880,
"VRenderDeviceMgrBackdoor001": 305840
},
"resourcesystem_dll": {
"ResourceSystem013": 67248
},
"scenefilecache_dll": {
"ResponseRulesCache001": 12816,
"SceneFileCache002": 26992
},
"scenesystem_dll": {
"RenderingPipelines_001": 569712,
"SceneSystem_002": 814896,
"SceneUtils_001": 1281600
},
"schemasystem_dll": {
"SchemaSystem_001": 43040
},
"server_dll": {
"EmptyWorldService001_Server": 5900704,
"EntitySubclassUtilsV001": 3034448,
"NavGameTest001": 11043168,
"ServerToolsInfo_001": 9028048,
"Source2GameClients001": 9028064,
"Source2GameDirector001": 1365376,
"Source2GameEntities001": 9028080,
"Source2Server001": 9028096,
"Source2ServerConfig001": 5770240,
"customnavsystem001": 2458624
},
"soundsystem_dll": {
"SoundOpSystem001": 1398128,
"SoundOpSystemEdit001": 568128,
"SoundSystem001": 288288,
"VMixEditTool001": 462720
},
"steamaudio_dll": {
"SteamAudio001": 77040
},
"steamclient64_dll": {
"CLIENTENGINE_INTERFACE_VERSION005": 8544256,
"IVALIDATE001": 8561280,
"SteamClient006": 6429952,
"SteamClient007": 6429968,
"SteamClient008": 6429984,
"SteamClient009": 6430000,
"SteamClient010": 6430016,
"SteamClient011": 6430032,
"SteamClient012": 6430048,
"SteamClient013": 6430064,
"SteamClient014": 6430080,
"SteamClient015": 6430096,
"SteamClient016": 6430112,
"SteamClient017": 6430128,
"SteamClient018": 6430144,
"SteamClient019": 6430160,
"SteamClient020": 6430176,
"p2pvoice002": 887664,
"p2pvoicesingleton002": 873744
},
"tier0_dll": {
"TestScriptMgr001": 1299424,
"VEngineCvar007": 393200,
"VProcessUtils002": 1234736,
"VStringTokenSystem001": 1617360
},
"v8system_dll": {
"Source2V8System001": 5744
},
"valve_avi_dll": {
"VAvi001": 12176
},
"valve_wmf_dll": {
"VMediaFoundation001": 4816
},
"vphysics2_dll": {
"VPhysics2_Handle_Interface_001": 386992,
"VPhysics2_Interface_001": 370000
},
"vscript_dll": {
"VScriptManager010": 182400
},
"vstdlib_s64_dll": {
"IVALIDATE001": 151536,
"VEngineCvar002": 22352
},
"worldrenderer_dll": {
"WorldRendererMgr001": 136944
}
}

237
generated/interfaces.rs Normal file
View File

@ -0,0 +1,237 @@
#![allow(non_snake_case, non_upper_case_globals)]
pub mod animationsystem_dll {
pub const AnimationSystemUtils_001: usize = 0x647c0;
pub const AnimationSystem_001: usize = 0x5f2c0;
}
pub mod client_dll {
pub const LegacyGameUI001: usize = 0x84bba0;
pub const Source2ClientUI001: usize = 0x83b070;
pub const Source2ClientPrediction001: usize = 0x7608b0;
pub const ClientToolsInfo_001: usize = 0x6ebd70;
pub const Source2Client002: usize = 0x6ebd90;
pub const GameClientExports001: usize = 0x6ebd80;
pub const EmptyWorldService001_Client: usize = 0x439cb0;
pub const Source2ClientConfig001: usize = 0x421090;
}
pub mod engine2_dll {
pub const SimpleEngineLoopService_001: usize = 0x1e2800;
pub const ClientServerEngineLoopService_001: usize = 0x1d88b0;
pub const KeyValueCache001: usize = 0x1d4c80;
pub const HostStateMgr001: usize = 0x1d26c0;
pub const GameEventSystemServerV001: usize = 0x1ce090;
pub const GameEventSystemClientV001: usize = 0x1ce080;
pub const EngineServiceMgr001: usize = 0x1c9980;
pub const VProfService_001: usize = 0x1b7b30;
pub const ToolService_001: usize = 0x1b68d0;
pub const StatsService_001: usize = 0x1b1b60;
pub const SplitScreenService_001: usize = 0x1aede0;
pub const SoundService_001: usize = 0x1a9970;
pub const ScreenshotService001: usize = 0x1a5840;
pub const RenderService_001: usize = 0x1a2bc0;
pub const NetworkService_001: usize = 0x1a26d0;
pub const NetworkServerService_001: usize = 0x19d8e0;
pub const NetworkP2PService_001: usize = 0x1993d0;
pub const NetworkClientService_001: usize = 0x193020;
pub const MapListService_001: usize = 0x18c040;
pub const InputService_001: usize = 0x179e30;
pub const GameUIService_001: usize = 0x174910;
pub const GameResourceServiceServerV001: usize = 0x172690;
pub const GameResourceServiceClientV001: usize = 0x172680;
pub const BugService001: usize = 0x16b6b0;
pub const BenchmarkService001: usize = 0x169e90;
pub const VENGINE_GAMEUIFUNCS_VERSION005: usize = 0x117640;
pub const EngineGameUI001: usize = 0x116900;
pub const INETSUPPORT_001: usize = 0xe6520;
pub const Source2EngineToServerStringTable001: usize = 0xa1550;
pub const Source2EngineToServer001: usize = 0x8b000;
pub const Source2EngineToClientStringTable001: usize = 0x839f0;
pub const Source2EngineToClient001: usize = 0x59810;
}
pub mod filesystem_stdio_dll {
pub const VAsyncFileSystem2_001: usize = 0x1eed0;
pub const VFileSystem017: usize = 0x1eec0;
}
pub mod host_dll {
pub const Source2Host001: usize = 0x18e50;
pub const SinglePlayerSharedMemory001: usize = 0x18ad0;
pub const SaveRestoreDataVersion001: usize = 0x18ac0;
pub const PredictionDiffManager001: usize = 0x16e60;
pub const HostUtils001: usize = 0x123f0;
pub const GameSystem2HostHook: usize = 0x11c40;
pub const GameModelInfo001: usize = 0x11b60;
pub const DebugDrawQueueManager001: usize = 0x115b0;
}
pub mod imemanager_dll {
pub const IMEManager001: usize = 0xc470;
}
pub mod inputsystem_dll {
pub const InputSystemVersion001: usize = 0x28d0;
pub const InputStackSystemVersion001: usize = 0x16f0;
}
pub mod localize_dll {
pub const Localize_001: usize = 0x3830;
}
pub mod matchmaking_dll {
pub const GameTypes001: usize = 0x506a0;
pub const MATCHFRAMEWORK_001: usize = 0x101570;
}
pub mod materialsystem2_dll {
pub const MaterialUtils_001: usize = 0x4da90;
pub const TextLayout_001: usize = 0x4a1e0;
pub const PostProcessingSystem_001: usize = 0x429e0;
pub const FontManager_001: usize = 0x377c0;
pub const VMaterialSystem2_001: usize = 0x25f30;
}
pub mod meshsystem_dll {
pub const MeshSystem001: usize = 0x7140;
}
pub mod navsystem_dll {
pub const NavSystem001: usize = 0x7590;
}
pub mod networksystem_dll {
pub const SerializedEntitiesVersion001: usize = 0xd3510;
pub const NetworkSystemVersion001: usize = 0xbd6e0;
pub const NetworkMessagesVersion001: usize = 0x9ca30;
pub const FlattenedSerializersVersion001: usize = 0x7c430;
}
pub mod panorama_dll {
pub const PanoramaUIEngine001: usize = 0x5e7b0;
}
pub mod panorama_text_pango_dll {
pub const PanoramaTextServices001: usize = 0x4caa0;
}
pub mod panoramauiclient_dll {
pub const PanoramaUIClient001: usize = 0x12570;
}
pub mod particles_dll {
pub const ParticleSystemMgr003: usize = 0x4c710;
}
pub mod pulse_system_dll {
pub const IPulseSystem_001: usize = 0x5a20;
}
pub mod rendersystemdx11_dll {
pub const RenderUtils_001: usize = 0x53390;
pub const VRenderDeviceMgrBackdoor001: usize = 0x4aab0;
pub const RenderDeviceMgr001: usize = 0x4aaa0;
}
pub mod resourcesystem_dll {
pub const ResourceSystem013: usize = 0x106b0;
}
pub mod scenefilecache_dll {
pub const SceneFileCache002: usize = 0x6970;
pub const ResponseRulesCache001: usize = 0x3210;
}
pub mod scenesystem_dll {
pub const SceneUtils_001: usize = 0x138e40;
pub const SceneSystem_002: usize = 0xc6f30;
pub const RenderingPipelines_001: usize = 0x8b170;
}
pub mod schemasystem_dll {
pub const SchemaSystem_001: usize = 0xa820;
}
pub mod server_dll {
pub const NavGameTest001: usize = 0xa88160;
pub const ServerToolsInfo_001: usize = 0x89c1d0;
pub const Source2GameClients001: usize = 0x89c1e0;
pub const Source2GameEntities001: usize = 0x89c1f0;
pub const Source2Server001: usize = 0x89c200;
pub const EmptyWorldService001_Server: usize = 0x5a09a0;
pub const Source2ServerConfig001: usize = 0x580c00;
pub const EntitySubclassUtilsV001: usize = 0x2e4d50;
pub const customnavsystem001: usize = 0x258400;
pub const Source2GameDirector001: usize = 0x14d580;
}
pub mod soundsystem_dll {
pub const SoundOpSystem001: usize = 0x155570;
pub const SoundOpSystemEdit001: usize = 0x8ab40;
pub const VMixEditTool001: usize = 0x70f80;
pub const SoundSystem001: usize = 0x46620;
}
pub mod steamaudio_dll {
pub const SteamAudio001: usize = 0x12cf0;
}
pub mod steamclient64_dll {
pub const IVALIDATE001: usize = 0x82a280;
pub const CLIENTENGINE_INTERFACE_VERSION005: usize = 0x826000;
pub const SteamClient020: usize = 0x621de0;
pub const SteamClient019: usize = 0x621dd0;
pub const SteamClient018: usize = 0x621dc0;
pub const SteamClient017: usize = 0x621db0;
pub const SteamClient016: usize = 0x621da0;
pub const SteamClient015: usize = 0x621d90;
pub const SteamClient014: usize = 0x621d80;
pub const SteamClient013: usize = 0x621d70;
pub const SteamClient012: usize = 0x621d60;
pub const SteamClient011: usize = 0x621d50;
pub const SteamClient010: usize = 0x621d40;
pub const SteamClient009: usize = 0x621d30;
pub const SteamClient008: usize = 0x621d20;
pub const SteamClient007: usize = 0x621d10;
pub const SteamClient006: usize = 0x621d00;
pub const p2pvoice002: usize = 0xd8b70;
pub const p2pvoicesingleton002: usize = 0xd5510;
}
pub mod tier0_dll {
pub const VStringTokenSystem001: usize = 0x18add0;
pub const TestScriptMgr001: usize = 0x13d3e0;
pub const VProcessUtils002: usize = 0x12d730;
pub const VEngineCvar007: usize = 0x5fff0;
}
pub mod v8system_dll {
pub const Source2V8System001: usize = 0x1670;
}
pub mod valve_avi_dll {
pub const VAvi001: usize = 0x2f90;
}
pub mod valve_wmf_dll {
pub const VMediaFoundation001: usize = 0x12d0;
}
pub mod vphysics2_dll {
pub const VPhysics2_Handle_Interface_001: usize = 0x5e7b0;
pub const VPhysics2_Interface_001: usize = 0x5a550;
}
pub mod vscript_dll {
pub const VScriptManager010: usize = 0x2c880;
}
pub mod vstdlib_s64_dll {
pub const IVALIDATE001: usize = 0x24ff0;
pub const VEngineCvar002: usize = 0x5750;
}
pub mod worldrenderer_dll {
pub const WorldRendererMgr001: usize = 0x216f0;
}

View File

@ -3,12 +3,19 @@
#include <cstdint> #include <cstdint>
#include <optional> #include <optional>
#include <string_view> #include <string_view>
#include <vector>
namespace process { namespace process {
bool attach(std::string_view process_name); bool attach(std::string_view process_name);
[[nodiscard]] std::optional<std::uintptr_t> find_pattern(std::string_view module_name, std::string_view pattern) noexcept; [[nodiscard]] std::optional<std::uintptr_t> find_pattern(std::string_view module_name, std::string_view pattern) noexcept;
[[nodiscard]] std::optional<std::uintptr_t> get_export(std::uintptr_t module_base, std::string_view function_name) noexcept;
[[nodiscard]] std::optional<std::uintptr_t> get_export(std::string_view module_name, std::string_view function_name) noexcept;
[[nodiscard]] std::optional<std::vector<std::string>> get_loaded_modules() noexcept;
[[nodiscard]] std::optional<std::uintptr_t> get_module_base(std::string_view module_name) noexcept; [[nodiscard]] std::optional<std::uintptr_t> get_module_base(std::string_view module_name) noexcept;
[[nodiscard]] std::optional<std::uintptr_t> resolve_jmp(std::uintptr_t address) noexcept; [[nodiscard]] std::optional<std::uintptr_t> resolve_jmp(std::uintptr_t address) noexcept;

View File

@ -20,6 +20,12 @@ static const std::array<std::pair<std::string_view, std::unique_ptr<builder::IFi
} }
}; };
std::string sanitize_module_name(const std::string& name) {
static std::regex double_colon_pattern("\\.");
return std::regex_replace(name, double_colon_pattern, "_");
}
template <class IFileBuilder> template <class IFileBuilder>
void generate_file(const std::string_view file_name, const Entries& entries, IFileBuilder& builder) { void generate_file(const std::string_view file_name, const Entries& entries, IFileBuilder& builder) {
const std::string output_file_path = std::format("generated/{}.{}", file_name, builder.get_extension()); const std::string output_file_path = std::format("generated/{}.{}", file_name, builder.get_extension());
@ -32,18 +38,18 @@ void generate_file(const std::string_view file_name, const Entries& entries, IFi
return; return;
} }
builder.write_top_level(output); const auto sanitize_namespace_name = [](const std::string& namespace_name) -> std::string {
static std::regex double_colon_pattern("\\::");
const auto sanitize_namespace = [](const std::string& namespace_name) -> std::string { return std::regex_replace(namespace_name, double_colon_pattern, "_");
static std::regex namespace_regex("\\::");
return std::regex_replace(namespace_name, namespace_regex, "_");
}; };
builder.write_top_level(output);
for (auto it = entries.begin(); it != entries.end(); ++it) { for (auto it = entries.begin(); it != entries.end(); ++it) {
const auto& [namespace_name, variables] = *it; const auto& [namespace_name, variables] = *it;
const std::string sanitized_namespace = sanitize_namespace(namespace_name); const std::string sanitized_namespace = sanitize_namespace_name(namespace_name);
builder.write_namespace(output, sanitized_namespace); builder.write_namespace(output, sanitized_namespace);
@ -148,7 +154,59 @@ std::optional<std::uint64_t> get_view_matrix() noexcept {
return process::resolve_rip_relative_address(address.value()).value_or(0); return process::resolve_rip_relative_address(address.value()).value_or(0);
} }
void fetch_offsets() noexcept { void dump_interfaces() noexcept {
const std::optional<std::vector<std::string>> loaded_modules = process::get_loaded_modules();
if (!loaded_modules.has_value()) {
spdlog::error("failed to get loaded modules.");
return;
}
spdlog::info("generating interface files...");
Entries entries;
for (const auto& module_name : loaded_modules.value()) {
const std::optional<std::uint64_t> module_base = process::get_module_base(module_name);
if (!module_base.has_value())
continue;
const std::optional<std::uint64_t> create_interface_address = process::get_export(module_base.value(), "CreateInterface");
if (!create_interface_address.has_value())
continue;
std::optional<std::uint64_t> interface_registry = process::resolve_rip_relative_address(create_interface_address.value());
if (!interface_registry.has_value())
continue;
interface_registry = process::read_memory<std::uint64_t>(interface_registry.value());
if (!interface_registry.has_value())
continue;
while (interface_registry.value() != 0) {
const auto interface_ptr = process::read_memory<std::uint64_t>(interface_registry.value());
const std::string interface_version_name = process::read_string(process::read_memory<std::uint64_t>(interface_registry.value() + 0x8), 64);
entries[sanitize_module_name(module_name)].emplace_back(interface_version_name, interface_ptr - module_base.value());
interface_registry = process::read_memory<std::uint64_t>(interface_registry.value() + 0x10);
}
}
for (const auto& [extension, builder] : builders) {
generate_file("interfaces", entries, *builder);
spdlog::info(" > generated {}.{}!", "interfaces", extension);
}
}
void dump_offsets() noexcept {
const std::optional<std::uint64_t> client_base = process::get_module_base("client.dll"); const std::optional<std::uint64_t> client_base = process::get_module_base("client.dll");
if (!client_base.has_value()) { if (!client_base.has_value()) {
@ -167,11 +225,12 @@ void fetch_offsets() noexcept {
const std::uint64_t view_angles_rva = get_client_rva(get_view_angles().value_or(0)); const std::uint64_t view_angles_rva = get_client_rva(get_view_angles().value_or(0));
const std::uint64_t view_matrix_rva = get_client_rva(get_view_matrix().value_or(0)); const std::uint64_t view_matrix_rva = get_client_rva(get_view_matrix().value_or(0));
spdlog::info("entity list: {:#x}", entity_list_rva); spdlog::info("found offsets!");
spdlog::info("global vars: {:#x}", global_vars_rva); spdlog::info(" > entity list: {:#x}", entity_list_rva);
spdlog::info("local player controller: {:#x}", local_player_controller_rva); spdlog::info(" > global vars: {:#x}", global_vars_rva);
spdlog::info("view angles: {:#x}", view_angles_rva); spdlog::info(" > local player controller: {:#x}", local_player_controller_rva);
spdlog::info("view matrix: {:#x}", view_matrix_rva); spdlog::info(" > view angles: {:#x}", view_angles_rva);
spdlog::info(" > view matrix: {:#x}", view_matrix_rva);
const Entries entries = { const Entries entries = {
{ "client_dll", { { "client_dll", {
@ -217,7 +276,9 @@ int main() {
for (const sdk::CSchemaSystemTypeScope* type_scope : schema_system->get_type_scopes()) for (const sdk::CSchemaSystemTypeScope* type_scope : schema_system->get_type_scopes())
generate_files_for_type_scope(type_scope); generate_files_for_type_scope(type_scope);
fetch_offsets(); dump_interfaces();
dump_offsets();
spdlog::info("finished!"); spdlog::info("finished!");

View File

@ -118,6 +118,90 @@ namespace process {
return std::nullopt; return std::nullopt;
} }
std::optional<std::uintptr_t> get_export(const std::uintptr_t module_base, const std::string_view function_name) noexcept {
const auto buffer = std::make_unique<std::uint8_t[]>(0x1000);
if (!read_memory(module_base, buffer.get(), 0x1000))
return std::nullopt;
const auto dos_header = reinterpret_cast<PIMAGE_DOS_HEADER>(buffer.get());
if (dos_header->e_magic != IMAGE_DOS_SIGNATURE)
return std::nullopt;
const auto nt_headers = reinterpret_cast<PIMAGE_NT_HEADERS>(buffer.get() + dos_header->e_lfanew);
if (nt_headers->Signature != IMAGE_NT_SIGNATURE)
return std::nullopt;
const IMAGE_DATA_DIRECTORY export_data_directory = nt_headers->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
if (export_data_directory.VirtualAddress == 0 || export_data_directory.Size == 0)
return std::nullopt;
const auto export_directory_buffer = std::make_unique<std::uint8_t[]>(export_data_directory.Size);
if (!read_memory(module_base + export_data_directory.VirtualAddress, export_directory_buffer.get(), export_data_directory.Size))
return std::nullopt;
const auto export_directory = reinterpret_cast<PIMAGE_EXPORT_DIRECTORY>(export_directory_buffer.get());
const std::uintptr_t delta = reinterpret_cast<std::uintptr_t>(export_directory) - export_data_directory.VirtualAddress;
const auto name_table = reinterpret_cast<std::uint32_t*>(export_directory->AddressOfNames + delta);
const auto name_ordinal_table = reinterpret_cast<std::uint16_t*>(export_directory->AddressOfNameOrdinals + delta);
const auto function_table = reinterpret_cast<std::uint32_t*>(export_directory->AddressOfFunctions + delta);
for (std::size_t i = 0; i < export_directory->NumberOfNames; ++i) {
const std::string_view current_function_name = reinterpret_cast<const char*>(name_table[i] + delta);
if (current_function_name != function_name)
continue;
const std::uint16_t function_ordinal = name_ordinal_table[i];
const std::uintptr_t function_address = module_base + function_table[function_ordinal];
if (function_address >= module_base + export_data_directory.VirtualAddress &&
function_address <= module_base + export_data_directory.VirtualAddress + export_data_directory.Size
) {
// TODO: Handle forwarded exports.
return std::nullopt;
}
return function_address;
}
return std::nullopt;
}
std::optional<std::uintptr_t> get_export(const std::string_view module_name, const std::string_view function_name) noexcept {
const std::optional<std::uintptr_t> module_base = get_module_base(module_name);
if (!module_base.has_value())
return std::nullopt;
return get_export(module_base.value(), function_name);
}
std::optional<std::vector<std::string>> get_loaded_modules() noexcept {
const base::SafeHandle snapshot(CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, process_id));
if (snapshot.get() == INVALID_HANDLE_VALUE)
return std::nullopt;
MODULEENTRY32 module_entry = {};
module_entry.dwSize = sizeof(MODULEENTRY32);
std::vector<std::string> loaded_modules;
for (Module32First(snapshot.get(), &module_entry); Module32Next(snapshot.get(), &module_entry);)
loaded_modules.emplace_back(module_entry.szModule);
return loaded_modules;
}
std::optional<std::uintptr_t> get_module_base(const std::string_view module_name) noexcept { std::optional<std::uintptr_t> get_module_base(const std::string_view module_name) noexcept {
const base::SafeHandle snapshot(CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, process_id)); const base::SafeHandle snapshot(CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, process_id));