Skip to content

Releases: blueshank-gh/plugin_crashcapture

v1.5.1

Choose a tag to compare

@blueshank-gh blueshank-gh released this 08 Sep 17:55

Full Changelog: v1.5.0...v1.5.1

Features

Warning

We recommend not using "require" GMCL on single-player, as the pause mechanics break the watchdog.
We are working on fixing this by detecting for single-player pause mechanics.
Please see #10 for further tracking of this problem.

Client Isolation

Because some servers do not like client-state being tampered with, or the server's own trust towards users aren't maintained, this solves that issue by blocking the client-state from having the API & Pulse from existing.

Console Commands

We now have console commands under the cc_* prefix, this allows you to have control without the need for lua execution.

New Patch

gm.phys.mindist_event_illegal - patches the assert and fixes the teardown from mindist's illegal event.

Installation

This is a list of possible routes for you to install the binary into the game engine.
I highly recommend carefully reading which ones you would like to chose.

Windows

  • Rename the CL/SV binary into version.dll and place it near the executable of garry's mod
  • Rename the CL/SV binary as gm(cl/sv)_crashcapture_win(32/64).dll and place it in the lua/bin folder for require
  • Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  • Inject the CL/SV binary into the garry's mod process

Note

Some garry's mod branches contain different locations for where gmod.exe real executable may be.
For no.1, we recommend that you do not place crash capture next to the gmod.exe launcher

Linux

  • Rename the CL/SV binary as gm(cl/sv)_crashcapture_linux(null/64).dll and place it in the lua/bin folder for require
  • Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  • Inject the CL/SV binary into the garry's mod process

Note

Client native linux builds are experimental due to a lack of testing infrastructure.

v1.5.0

Choose a tag to compare

@blueshank-gh blueshank-gh released this 01 Sep 15:05
ca26c50

What's Changed

Features

Warning

We recommend not using "require" GMCL on single-player, as the pause mechanics break the watchdog.
We are working on fixing this by detecting for single-player pause mechanics.
Please see #10 for further tracking of this problem.

Hang Mapper

The code bellow was used to intentionally hang the server based on #33
Hang mapper is expected to indicate several locations of interest based on this as Lua and C is traversed.

local f = file.Open("gmod.exe", "rb", "BASE_PATH")
while true do f:ReadByte() end
image

Profiler Improvements

On v1.4.1 there was confusion on the method of profiling from lua:hook.lua's self-ms and downstream hooks, this is no longer the case to clear up confusion.
This also comes with addition support for command lua boundary to profile the execution of console commands.
{F874507E-D211-4286-9B40-3DD29C6DA4E3}

API Layer

A new API layer was added to this PR to allow for third-party binary developers to make use of:

#include "crashcapture_api.h"

#ifdef _WIN32
#define EXPORT_GM13 extern "C" __declspec(dllexport)
#else
#define EXPORT_GM13 extern "C" __attribute__((visibility("default")))
#endif

EXPORT_GM13 int gmod13_open(struct lua_State* L)
{
    CCAPI* cc = CC_ENSURE_API(); // I would cache this in a static variable...
    cc->dump("example_dump"); // force a dump
    return 0;
}

EXPORT_GM13 int gmod13_close(struct lua_State* L)
{
    return 0;
}

Installation

This is a list of possible routes for you to install the binary into the game engine.
I highly recommend carefully reading which ones you would like to chose.

Windows

  • Rename the CL/SV binary into version.dll and place it near the executable of garry's mod
  • Rename the CL/SV binary as gm(cl/sv)_crashcapture_win(32/64).dll and place it in the lua/bin folder for require
  • Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  • Inject the CL/SV binary into the garry's mod process

Note

Some garry's mod branches contain different locations for where gmod.exe real executable may be.
For no.1, we recommend that you do not place crash capture next to the gmod.exe launcher

Linux

  • Rename the CL/SV binary as gm(cl/sv)_crashcapture_linux(null/64).dll and place it in the lua/bin folder for require
  • Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  • Inject the CL/SV binary into the garry's mod process

Note

Client native linux builds are experimental due to a lack of testing infrastructure.

v1.4.0

Choose a tag to compare

@blueshank-gh blueshank-gh released this 17 Aug 18:59
f0c212d

What's Changed

Features

Note

This release was edited to contain a latent patch.
See commit ebdf3ea
Version uplifted to v1.4.1

Warning

We recommend not using "require" GMCL on single-player, as the pause mechanics break the watchdog.
We are working on fixing this by detecting for single-player pause mechanics.
Please see #10 for further tracking of this problem.

This version of crash capture implements a patcher with traceability, which serves as a way to quick-fix issues within the game engine.
The current set of patches are the following targeting vphysics:

gm.phys.contact_stale_core - gmod IVP teardown UAF
gm.phys.mindist_null_edge - gmod IVP retained-mindist UAF
gm.phys.mindist_stale_ff - gmod IVP retained-mindist UAF
gm.phys.oo_collision_hash_index - gmod IVP OO-watcher collision-hash sign-extension
gm.phys.oo_collision_hash_swap - gmod IVP OO-watcher collision-hash sign-extension
gm.phys.watcher_stale_mindist - gmod IVP teardown UAF - stale mindist double-removal
gm.phys.ovtree_hash_remove - gmod IVP teardown UAF
gm.phys.vhash_remove_null - gmod IVP VHash absent-key fatal
gm.phys.minlist_walk_bound_a - gmod IVP min-list walk bound
gm.phys.minlist_walk_bound_b - gmod IVP min-list walk bound
gm.phys.minlist_skip_list - gmod IVP min-list skip-list (long-jump) corruption
gm.phys.minlist_replace - gmod IVP min-list add() replacement (skip-list corruption fix)
gm.phys.ctrl_remove_absent - gmod IVP teardown UAF
gm.phys.coc_absent_bail - gmod IVP controller-list UAF
gm.phys.vhash_store_remove_bound - gmod IVP friction-hash unbounded scan
gm.phys.friction_hash_init_size - gmod IVP friction-hash warmup

The purpose of the patcher is to provide everyone with patches that Facepunch has yet to implement or have been abandoned, similar to vphysic's current issue that prevents Facepunch from implementing said patches.

Installation

This is a list of possible routes for you to install the binary into the game engine.
I highly recommend carefully reading which ones you would like to chose.

Windows

  • Rename the CL/SV binary into version.dll and place it near the executable of garry's mod
  • Rename the CL/SV binary as gm(cl/sv)_crashcapture_win(32/64).dll and place it in the lua/bin folder for require
  • Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  • Inject the CL/SV binary into the garry's mod process

Note

Some garry's mod branches contain different locations for where gmod.exe real executable may be.
For no.1, we recommend that you do not place crash capture next to the gmod.exe launcher

Linux

  • Rename the CL/SV binary as gm(cl/sv)_crashcapture_linux(null/64).dll and place it in the lua/bin folder for require
  • Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  • Inject the CL/SV binary into the garry's mod process

Note

Client native linux builds are experimental due to a lack of testing infrastructure.

v1.3.0

Choose a tag to compare

@blueshank-gh blueshank-gh released this 04 Aug 15:59
de7bbe9

What's Changed

  • feature - high performance profiler for c -> lua transitions by @blueshank-gh in #21

Full Changelog: v1.2.2...v1.3.0

Warning

We recommend not using "require" GMCL on single-player, as the pause mechanics break the watchdog.
We are working on fixing this by detecting for single-player pause mechanics.
Please see #10 for further tracking of this problem.

This contains a new high performance runtime profiler.
Unlike traditional profilers such as lua-based profilers to vprof, this can be run with virtually no noticeable performance loss.
Implementation of #19
Fixes #12

Using the profiler functions you can create your own high performance profiler dashboard like this:

{F803B7FD-367C-46FA-963F-6BD597BFCB88}

high performance profiler dashboard example

Windows

  1. Rename the CL/SV binary into version.dll and place it near the executable of garry's mod
  2. Rename the CL/SV binary as gm(cl/sv)_crashcapture_win(32/64).dll and place it in the lua/bin folder for require
  3. Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  4. Inject the CL/SV binary into the garry's mod process

Note

Some garry's mod branches contain different locations for where gmod.exe real executable may be.
For no.1, we recommend that you do not place crash capture next to the gmod.exe launcher

Linux

  1. Rename the CL/SV binary as gm(cl/sv)_crashcapture_linux(null/64).dll and place it in the lua/bin folder for require
  2. Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  3. Inject the CL/SV binary into the garry's mod process

Note

Client native linux builds are experimental due to a lack of testing infrastructure.

v1.2.2

Choose a tag to compare

@blueshank-gh blueshank-gh released this 01 Aug 16:01

Full Changelog: v1.2.1...v1.2.2

Warning

We recommend not using "require" GMCL on single-player, as the pause mechanics break the watchdog.
We are working on fixing this by detecting for single-player pause mechanics.
Please see #10 for further tracking of this problem.

This contains patches to the vphysics recovery methods, specifically those we have caught under Buildstruct's endurance tests.
We have also patched up issues with ELF load base and RVA for stack tracing.
Also having realized that the features we created where not exposed to lua, so now they are.

Windows

  1. Rename the CL/SV binary into version.dll and place it near the executable of garry's mod
  2. Rename the CL/SV binary as gm(cl/sv)_crashcapture_win(32/64).dll and place it in the lua/bin folder for require
  3. Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  4. Inject the CL/SV binary into the garry's mod process

Note

Some garry's mod branches contain different locations for where gmod.exe real executable may be.
For no.1, we recommend that you do not place crash capture next to the gmod.exe launcher

Linux

  1. Rename the CL/SV binary as gm(cl/sv)_crashcapture_linux(null/64).dll and place it in the lua/bin folder for require
  2. Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  3. Inject the CL/SV binary into the garry's mod process

Note

Client native linux builds are experimental due to a lack of testing infrastructure.

v1.2.1

Choose a tag to compare

@blueshank-gh blueshank-gh released this 23 Jul 01:37

Full Changelog: v1.2.0...v1.2.1

Warning

We recommend not using "require" GMCL on single-player, as the pause mechanics break the watchdog.
We are working on fixing this by detecting for single-player pause mechanics.
Please see #10 for further tracking of this problem.

We have added an new MEMAPI to the main lua_State, and before you ask, its gated behind CRASHCAPTURE_MEMAPI.
crashcapture.set cannot change it, must be done at either the ENV or PARAM level.

fixed #16 - Crashlog generate twice on engine error
addition #17 - Make crashlog names more user friendly

Windows

  1. Rename the CL/SV binary into version.dll and place it near the executable of garry's mod
  2. Rename the CL/SV binary as gm(cl/sv)_crashcapture_win(32/64).dll and place it in the lua/bin folder for require
  3. Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  4. Inject the CL/SV binary into the garry's mod process

Note

Some garry's mod branches contain different locations for where gmod.exe real executable may be.
For no.1, we recommend that you do not place crash capture next to the gmod.exe launcher

Linux

  1. Rename the CL/SV binary as gm(cl/sv)_crashcapture_linux(null/64).dll and place it in the lua/bin folder for require
  2. Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  3. Inject the CL/SV binary into the garry's mod process

Note

Client native linux builds are experimental due to a lack of testing infrastructure.

v1.2.0

Choose a tag to compare

@blueshank-gh blueshank-gh released this 21 Jul 21:01

Full Changelog: v1.1.1...v1.2.0

Warning

We recommend not using "require" GMCL on single-player, as the pause mechanics break the watchdog.
We are working on fixing this by detecting for single-player pause mechanics.
Please see #10 for further tracking of this problem.

This is a major milestone in the development of crash capture, features and refactoring.
We now support hooking/signature scanning fully, with features baked for vphysics hang mitigations.
We now also support in-game console outputs and sign on grace periods.

Windows

  1. Rename the CL/SV binary into version.dll and place it near the executable of garry's mod
  2. Rename the CL/SV binary as gm(cl/sv)_crashcapture_win(32/64).dll and place it in the lua/bin folder for require
  3. Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  4. Inject the CL/SV binary into the garry's mod process

Note

Some garry's mod branches contain different locations for where gmod.exe real executable may be.
For no.1, we recommend that you do not place crash capture next to the gmod.exe launcher

Linux

  1. Rename the CL/SV binary as gm(cl/sv)_crashcapture_linux(null/64).dll and place it in the lua/bin folder for require
  2. Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  3. Inject the CL/SV binary into the garry's mod process

Note

Client native linux builds are experimental due to a lack of testing infrastructure.

v1.1.1

Choose a tag to compare

@blueshank-gh blueshank-gh released this 09 Jul 00:29

Full Changelog: v1.1.0...v1.1.1

You can now trigger a manual dumb via signals to the process!
There are several ways you can attach the binary to your game process.

Windows

  1. Rename the CL/SV binary into version.dll and place it near the executable of garry's mod
  2. Rename the CL/SV binary as gm(cl/sv)_crashcapture_win(32/64).dll and place it in the lua/bin folder for require
  3. Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  4. Inject the CL/SV binary into the garry's mod process

Linux

  1. Rename the CL/SV binary as gm(cl/sv)_crashcapture_linux(null/64).dll and place it in the lua/bin folder for require
  2. Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  3. Inject the CL/SV binary into the garry's mod process

v1.1.0

Choose a tag to compare

@blueshank-gh blueshank-gh released this 28 Jun 19:44

Full Changelog: v1.0.0...v1.1.0

This version now comes with hooks, allowing you to diagnose recoveries on the main lua_State!
There are several ways you can attach the binary to your game process.

Note: this release was edited to include a latent patch:
81b2d0a - patch - end grace period as soon as pulse arrives

Windows

  1. Rename the CL/SV binary into version.dll and place it near the executable of garry's mod
  2. Rename the CL/SV binary as gm(cl/sv)_crashcapture_win(32/64).dll and place it in the lua/bin folder for require
  3. Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  4. Inject the CL/SV binary into the garry's mod process

Linux

  1. Rename the CL/SV binary as gm(cl/sv)_crashcapture_linux(null/64).dll and place it in the lua/bin folder for require
  2. Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  3. Inject the CL/SV binary into the garry's mod process

v1.0

Choose a tag to compare

@blueshank-gh blueshank-gh released this 27 Jun 14:46

Full Changelog: https://github.com/blueshank-gh/plugin_crashcapture/commits/v1.0.0

Crash Capture - Captures failures from garry's mod and generates reports
This is the first release of binaries from artifacts.

There are several ways you can attach the binary to your game process.

Windows

  1. Rename the CL/SV binary into version.dll and place it near the executable of garry's mod
  2. Rename the CL/SV binary as gm(cl/sv)_crashcapture_win(32/64).dll and place it in the lua/bin folder for require
  3. Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  4. Inject the CL/SV binary into the garry's mod process

Linux

  1. Rename the CL/SV binary as gm(cl/sv)_crashcapture_linux(null/64).dll and place it in the lua/bin folder for require
  2. Place the SV binary as a plugin in lua/bin folder and create a .vdf in the addon's folder to load it
  3. Inject the CL/SV binary into the garry's mod process