Thread aware Signal/Slot library

Overview

CsSignal

Introduction

CsSignal is a library for thread aware Signal/Slot delivery. This library does not depend upon CopperSpice or any other libraries.

One of the major benefits of CsSignal is how the library delivers signals in a multithreaded application. Signals can be delivered using a queued connection or a blocking queued connection.

In the CsSignal library signals and slots are both methods whereas in many other signal/slot libraries each signal is a separate object.

System Requirements

To use CsSignal you will need a C++17 compiler and a C++17 standard library.

Uses the CMake build system for building and running the unit test suite. The library has been tested with clang sanitizer and a major code review.

Documentation

Class level documentation for CsSignal is available on the CopperSpice website:

www.copperspice.com/docs/cs_signal/index.html

Presentations

Multiple videos discussing Signals and Slots can be found on the following pages:

www.youtube.com/copperspice
www.copperspice.com/presentations.html

Authors / Contributors

  • Ansel Sermersheim
  • Barbara Geller

License

This library is released under the BSD 2-clause license. For more information refer to the LICENSE file provided with this project.

References

Comments
  • CMake build script

    CMake build script

    Can you provide a CMake build script for building cs_signal? I tried building them with autotool and it did succeed but I couldn't find any generated lib to link against. The only output files I got were the following -

    bin/libCsSignal-0.dll lib/licCsSignal.dll.a // This looks like the library but has the wrong extension? lib/libCsSignal.la

    Also, install should have created a "include" directory with necessary public headers which was also missing. The included autoconf doesn't have an option to build debug and release configurations.

    Optionally, additional instructions/documentation on how to build these libraries for different platforms would help.

    opened by ghost 10
  • Not compiling using VS2019

    Not compiling using VS2019

    I tried to create a new project and dragging cs_signal.cpp, main.cpp and peach.cpp in.

    image

    1>cs_signal.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) const CsSignal::SignalBase::`vftable'" ([email protected]@@[email protected]) referenced in function "public: virtual __cdecl CsSignal::SignalBase::~SignalBase(void)" ([email protected]@@[email protected])
    1>cs_slot.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl CsSignal::PendingSlot::~PendingSlot(void)" ([email protected]@@[email protected]) referenced in function "private: virtual void __cdecl CsSignal::SlotBase::queueSlot(class CsSignal::PendingSlot,enum CsSignal::ConnectionKind)" ([email protected]@[email protected]@[email protected]@[email protected]@@Z)
    1>main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __cdecl CsSignal::PendingSlot::~PendingSlot(void)" ([email protected]@@[email protected])
    1>peach.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __cdecl CsSignal::PendingSlot::~PendingSlot(void)" ([email protected]@@[email protected])
    1>cs_slot.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) const CsSignal::SlotBase::`vftable'" ([email protected]@@[email protected]) referenced in function "public: __cdecl CsSignal::SlotBase::SlotBase(class CsSignal::SlotBase const &)" ([email protected]@@[email protected]@@Z)
    1>main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl CsSignal::PendingSlot::PendingSlot(class CsSignal::PendingSlot &&)" ([email protected]@@[email protected][email protected]@Z) referenced in function "void __cdecl CsSignal::activate<class TestPushButton,class TestPushButton>(class TestPushButton &,void (__cdecl TestPushButton::*)(void))" ([email protected]@@[email protected][email protected]@@[email protected]@[email protected]@Z)
    1>peach.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __cdecl CsSignal::PendingSlot::PendingSlot(class CsSignal::PendingSlot &&)" ([email protected]@@[email protected][email protected]@Z)
    1>  Hint on symbols that are defined and could potentially match:
    1>    "__declspec(dllimport) public: __cdecl CsSignal::PendingSlot::PendingSlot(class CsSignal::SignalBase *,class std::unique_ptr<class CsSignal::Internal::BentoAbstract,struct std::default_delete<class CsSignal::Internal::BentoAbstract> >,class CsSignal::SlotBase *,class std::unique_ptr<class CsSignal::Internal::BentoAbstract,struct std::default_delete<class CsSignal::Internal::BentoAbstract> >,class std::unique_ptr<class CsSignal::Internal::TeaCupAbstract,struct std::default_delete<class CsSignal::Internal::TeaCupAbstract> >)" ([email protected]@@[email protected]@[email protected][email protected]@[email protected]@@[email protected]@[email protected]@@@[email protected]@@[email protected]@[email protected]@[email protected]@[email protected]@@[email protected]@[email protected]@@@[email protected]@@[email protected]@Z)
    1>main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl CsSignal::SignalBase::SignalBase(void)" ([email protected]@@[email protected]) referenced in function "public: __cdecl TestPushButton::TestPushButton(void)" ([email protected]@[email protected])
    1>peach.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class CsSignal::SlotBase * __cdecl CsSignal::PendingSlot::receiver(void)const " ([email protected]@[email protected]@[email protected]@XZ) referenced in function "private: virtual void __cdecl Peach::queueSlot(class CsSignal::PendingSlot,enum CsSignal::ConnectionKind)" ([email protected]@@[email protected]@@[email protected]@@Z)
    1>D:\project2\cs_signal\vs2019\x64\Debug\cs_signal.exe : fatal error LNK1120: 6 unresolved externals
    1>Done building project "cs_signal.vcxproj" -- FAILED.
    
    opened by janwilmans 5
  • possible thread safety issue

    possible thread safety issue

    Hello, I added cs_signal to my signal-slot-benchmarks project and have encountered issues trying to run the threaded portion of the benchmark. I'm not sure if the issue is solely in cs_signal or due to a bad integration on my part.

    Please refer to the rework branch of signal-slot-benchmarks including my integration of cs_signal.

    For reference here is the location of the sometimes encountered exception:

    cs_signal

    Edit: The file is cs_signal.h

    opened by NoAvailableAlias 3
  • reliable source download

    reliable source download

    As mentionned in https://github.com/copperspice/cs_signal/issues/14#issuecomment-776098982, this project does not uses tags. It does use some kind of versionning though, as can be seen on https://github.com/copperspice/cs_signal/commit/6add8228fee3a2aff537500d654ba2e424968be8#diff-1e7de1ae2d059d21e1dd75d5812d5a34b0222cef273b7c3a2af62eb747f9d20a There is currently no documented way to download a given version of this library. This is a problem because it prevents reliable use of this library. Some possibilities:

    • remove version numbers from cmake files, and clearly documents that it's some kind of "live at head"
    • create tags
    • host source tarballs somewhere, and document them

    These repos have the same problem, but I'm not duplicating the issue: https://github.com/copperspice/cs_string, https://github.com/copperspice/cs_libguarded, https://github.com/copperspice/cs_paint

    opened by ericLemanissier 2
  • Wrong target in src/signal.cmake

    Wrong target in src/signal.cmake

    While compilingCsSignal on Windows, CMake complained about this:

      Cannot specify link options for target "CsCore" which is not built by this
      project.
    

    On line 40 in src/signal.cmake it says "target_link_options(CsCore ...", not CsSignal.

    opened by jvoosten 1
  • Proposal: alternative signal declaration syntax

    Proposal: alternative signal declaration syntax

    Currently the syntax is quite ugly:

    SIGNAL_1(void someSignal(int arg1, int arg2))
    SIGNAL_2(someSignal, arg1, arg2)
    

    Duplication of the signal name and argument names can't be avoided without complicated macro and even more strange syntax (like Boost::Fusion).

    But the following alternative seems equivalent, but looks a bit cleaner to me:

    void someSignal(int arg1, int arg2) { ACTIVATE(someSignal, arg1, arg2); }
    

    or

    void someSignal(int arg1, int arg2) ACTIVATE(someSignal, arg1, arg2)
    
    opened by misanthrop 1
  • documentation?

    documentation?

    Hi,

    I would love some documention and examples in Wiki or in a readme. Maybe a minimal effort would be to link to this documention?: http://www.copperspice.com/docs/cs_signal/lib-overview.html

    Thanks Kjell Hedstrom

    opened by KjellKod 1
  • Draft:Conan: First attempt at adding conan

    Draft:Conan: First attempt at adding conan

    This is one way in which cs_signal could support conan. This one builds its own package and you would be able to consume it and build it yourself should you want to .

    However, we should probably aim at getting it into https://github.com/conan-io/conan-center-index/ So that anyone can just grab it. That would require a different approach, but this approach might be interesting for having a package file in source The other way is to pull the tags that are available and Conan will build the packages in their CI and make them available (multiple settings) Since I don't have a windows machine, a windows test would be nice.

    opened by paulbendixen 0
  • conflict with CsLibGuarded

    conflict with CsLibGuarded

    Both CsSignal and CsLibGuarded provide the class template rcu_guarded in the namespace libguarded: https://github.com/copperspice/cs_signal/blob/master/src/cs_rcu_guarded.h https://github.com/copperspice/cs_libguarded/blob/master/src/cs_rcu_guarded.h This has a very high likelihood of producing ODR violation per https://eel.is/c++draft/basic.def.odr#10.sentence-1 https://eel.is/c++draft/basic.def.odr#13.sentence-1 https://eel.is/c++draft/basic.def.odr#13.8 https://eel.is/c++draft/basic.def.odr#15 because there is no way a user of both these libraries can know if these two definitions consist of the same sequence of tokens, without brute-forcing the comparison of sources.

    some possibilities:

    • make CsSignal depend on CsLibGuarded instead of duplicating its sources
    • document that both libraries cannot be used in the same program
    • document which versions of these libraries are compatible (requires fixing https://github.com/copperspice/cs_signal/issues/15 beforehand)
    • put these classes in different namespaces or rename the classes

    The same situation happens with https://github.com/copperspice/copperspice which embeds CsSignal, CsLibGuarded and CsString

    opened by ericLemanissier 0
  • Problems using vs2019 in Release mode

    Problems using vs2019 in Release mode

    Hi.

    Thanks for making this project and your YouTube videos available! I appreciate your efforts!!!

    I am hitting a problem with cs_signal compiled with vs2019. Everything works as expected in Debug mode. But in Release mode when signals/slots have the same signature the incorrect slot can be called. . My guess is this is due to some compiler optimization.

    I made a minimalist version of my project that demonstrates the problem https://github.com/Hurleyworks/MVC

    Running in Debug you can see that each signal generated by a button press goes to the correct slot. But in Release mode, if you press the Send 1 button, for example, all 4 slots with the same signature in Model get called

    -Steve

    opened by Hurleyworks 1
  • Object destruction and cross thread signal activation

    Object destruction and cross thread signal activation

    I think I've found a serious bug in CsSignal. I had several program crashes before I figured out what was going on. If we have two objects assigned to two different threads (so these two threads decide when to destroy those objects), and one object gets destroyed by its associated thread while another object emits a signal, this line of code will crash the entire program: https://github.com/copperspice/cs_signal/blob/f20001ae097be983a0e5cf6f3f7ddbd862d05824/src/cs_signal.h#L183 The problem here is the following: the receiver is half-destroyed and it didn't have any chance to disconnect itself in its own thread (base destructor runs last), but another thread !synchronously! tests the receiver's thread affinity and then even calls receiver->queueSlot() on that half-destroyed object. This makes the entire activate() method not thread safe.

    opened by coolcode123 1
  • Compilation error using clang-cl

    Compilation error using clang-cl

    I'm using visual studio 2019 with it's clang-cl:

    [1/4] C:\PROGRA~2\MICROS~2\2019\COMMUN~1\VC\Tools\Llvm\bin\clang-cl.exe /nologo -TP -DBUILDING_LIB_CS_SIGNAL -DCsSignal_EXPORTS -I. -I..\..\..\ -I..\..\..\src -m32 -fdiagnostics-absolute-paths /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /Zi /O2 /Ob1 /DNDEBUG -std:c++17 /showIncludes /FoCMakeFiles\CsSignal.dir\src\cs_signal.cpp.obj /FdCMakeFiles\CsSignal.dir\ -c ..\..\..\src\cs_signal.cpp FAILED: CMakeFiles/CsSignal.dir/src/cs_signal.cpp.obj C:\PROGRA~2\MICROS~2\2019\COMMUN~1\VC\Tools\Llvm\bin\clang-cl.exe /nologo -TP -DBUILDING_LIB_CS_SIGNAL -DCsSignal_EXPORTS -I. -I..\..\..\ -I..\..\..\src -m32 -fdiagnostics-absolute-paths /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /Zi /O2 /Ob1 /DNDEBUG -std:c++17 /showIncludes /FoCMakeFiles\CsSignal.dir\src\cs_signal.cpp.obj /FdCMakeFiles\CsSignal.dir\ -c ..\..\..\src\cs_signal.cpp In file included from ..\..\..\src\cs_signal.cpp:19: In file included from ..\..\..\src/cs_signal.h:33: In file included from ..\..\..\src/cs_slot.h:29: C:\Users\fradd\Downloads\cs_signal-master\src\rcu_guarded.hpp(143,7): error : no matching constructor for initialization of 'libguarded::rcu_list<CsSignal::SignalBase::ConnectStruct, std::mutex, std::allocator<CsSignal::SignalBase::ConnectStruct> >' : m_obj(std::forward<Us>(data)...) ^ ~~~~~~~~~~~~~~~~~~~~~~ C:\Users\fradd\Downloads\cs_signal-master\src\cs_signal.h(83,22): note: in instantiation of function template specialization 'libguarded::rcu_guarded<libguarded::rcu_list<CsSignal::SignalBase::ConnectStruct, std::mutex, std::allocator<CsSignal::SignalBase::ConnectStruct> > >::rcu_guarded<libguarded::rcu_guarded<libguarded::rcu_list<CsSignal::SignalBase::ConnectStruct, std::mutex, std::allocator<CsSignal::SignalBase::ConnectStruct> > > &>' requested here class LIB_SIG_EXPORT SignalBase ^ C:\Users\fradd\Downloads\cs_signal-master\src\rcu_list.hpp(75,16): note: candidate constructor not viable: no known conversion from 'libguarded::rcu_guarded<libguarded::rcu_list<CsSignal::SignalBase::ConnectStruct, std::mutex, std::allocator<CsSignal::SignalBase::ConnectStruct> > >' to 'const std::allocator<CsSignal::SignalBase::ConnectStruct>' for 1st argument explicit rcu_list(const Alloc &alloc); ^ C:\Users\fradd\Downloads\cs_signal-master\src\rcu_list.hpp(77,7): note: candidate constructor not viable: no known conversion from 'libguarded::rcu_guarded<libguarded::rcu_list<CsSignal::SignalBase::ConnectStruct, std::mutex, std::allocator<CsSignal::SignalBase::ConnectStruct> > >' to 'const libguarded::rcu_list<CsSignal::SignalBase::ConnectStruct, std::mutex, std::allocator<CsSignal::SignalBase::ConnectStruct> >' for 1st argument rcu_list(const rcu_list &) = delete; ^ C:\Users\fradd\Downloads\cs_signal-master\src\rcu_list.hpp(78,7): note: candidate constructor not viable: no known conversion from 'libguarded::rcu_guarded<libguarded::rcu_list<CsSignal::SignalBase::ConnectStruct, std::mutex, std::allocator<CsSignal::SignalBase::ConnectStruct> > >' to 'libguarded::rcu_list<CsSignal::SignalBase::ConnectStruct, std::mutex, std::allocator<CsSignal::SignalBase::ConnectStruct> >' for 1st argument rcu_list(rcu_list &&) = delete; ^ C:\Users\fradd\Downloads\cs_signal-master\src\rcu_list.hpp(74,7): note: candidate constructor not viable: requires 0 arguments, but 1 was provided rcu_list(); ^ 1 error generated. [2/4] C:\PROGRA~2\MICROS~2\2019\COMMUN~1\VC\Tools\Llvm\bin\clang-cl.exe /nologo -TP -DBUILDING_LIB_CS_SIGNAL -DCsSignal_EXPORTS -I. -I..\..\..\ -I..\..\..\src -m32 -fdiagnostics-absolute-paths /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /Zi /O2 /Ob1 /DNDEBUG -std:c++17 /showIncludes /FoCMakeFiles\CsSignal.dir\src\cs_slot.cpp.obj /FdCMakeFiles\CsSignal.dir\ -c ..\..\..\src\cs_slot.cpp FAILED: CMakeFiles/CsSignal.dir/src/cs_slot.cpp.obj C:\PROGRA~2\MICROS~2\2019\COMMUN~1\VC\Tools\Llvm\bin\clang-cl.exe /nologo -TP -DBUILDING_LIB_CS_SIGNAL -DCsSignal_EXPORTS -I. -I..\..\..\ -I..\..\..\src -m32 -fdiagnostics-absolute-paths /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MD /Zi /O2 /Ob1 /DNDEBUG -std:c++17 /showIncludes /FoCMakeFiles\CsSignal.dir\src\cs_slot.cpp.obj /FdCMakeFiles\CsSignal.dir\ -c ..\..\..\src\cs_slot.cpp In file included from ..\..\..\src\cs_slot.cpp:19: In file included from ..\..\..\src/cs_signal.h:33: In file included from ..\..\..\src/cs_slot.h:29: C:\Users\fradd\Downloads\cs_signal-master\src\rcu_guarded.hpp(143,7): error : no matching constructor for initialization of 'libguarded::rcu_list<CsSignal::SignalBase::ConnectStruct, std::mutex, std::allocator<CsSignal::SignalBase::ConnectStruct> >' : m_obj(std::forward<Us>(data)...) ^ ~~~~~~~~~~~~~~~~~~~~~~ C:\Users\fradd\Downloads\cs_signal-master\src\cs_signal.h(83,22): note: in instantiation of function template specialization 'libguarded::rcu_guarded<libguarded::rcu_list<CsSignal::SignalBase::ConnectStruct, std::mutex, std::allocator<CsSignal::SignalBase::ConnectStruct> > >::rcu_guarded<libguarded::rcu_guarded<libguarded::rcu_list<CsSignal::SignalBase::ConnectStruct, std::mutex, std::allocator<CsSignal::SignalBase::ConnectStruct> > > &>' requested here class LIB_SIG_EXPORT SignalBase ^ C:\Users\fradd\Downloads\cs_signal-master\src\rcu_list.hpp(75,16): note: candidate constructor not viable: no known conversion from 'libguarded::rcu_guarded<libguarded::rcu_list<CsSignal::SignalBase::ConnectStruct, std::mutex, std::allocator<CsSignal::SignalBase::ConnectStruct> > >' to 'const std::allocator<CsSignal::SignalBase::ConnectStruct>' for 1st argument explicit rcu_list(const Alloc &alloc); ^ C:\Users\fradd\Downloads\cs_signal-master\src\rcu_list.hpp(77,7): note: candidate constructor not viable: no known conversion from 'libguarded::rcu_guarded<libguarded::rcu_list<CsSignal::SignalBase::ConnectStruct, std::mutex, std::allocator<CsSignal::SignalBase::ConnectStruct> > >' to 'const libguarded::rcu_list<CsSignal::SignalBase::ConnectStruct, std::mutex, std::allocator<CsSignal::SignalBase::ConnectStruct> >' for 1st argument rcu_list(const rcu_list &) = delete; ^ C:\Users\fradd\Downloads\cs_signal-master\src\rcu_list.hpp(78,7): note: candidate constructor not viable: no known conversion from 'libguarded::rcu_guarded<libguarded::rcu_list<CsSignal::SignalBase::ConnectStruct, std::mutex, std::allocator<CsSignal::SignalBase::ConnectStruct> > >' to 'libguarded::rcu_list<CsSignal::SignalBase::ConnectStruct, std::mutex, std::allocator<CsSignal::SignalBase::ConnectStruct> >' for 1st argument rcu_list(rcu_list &&) = delete; ^ C:\Users\fradd\Downloads\cs_signal-master\src\rcu_list.hpp(74,7): note: candidate constructor not viable: requires 0 arguments, but 1 was provided rcu_list(); ^ 1 error generated. ninja: build stopped: subcommand failed.

    opened by iKoznov 1
  • Add macros to support overloaded signal names

    Add macros to support overloaded signal names

    Copperspice has the macros that allows overloaded functions to be used as signals but cs_signal is missing those functions.

    Following code throws compile error in cs_signal but works as expected (with alternative macros) in copperspice.

    SIGNAL_1(void added(ClassA *a)
    SIGNAL_2(added, a)
    
    SIGNAL_1(void added(ClassB *b)
    SIGNAL_2(added, b)
    

    There are some discussions (#2) that talk about supporting overloaded signals but I can't seem to find any examples of how to use it.

    opened by hs-apotell 0
Owner
CopperSpice
CopperSpice
Itpp - IT++ library mirror/fork. C++ library of mathematical, signal processing and communication classes and functions.

Introduction ************ IT++ is a C++ library of mathematical, signal processing and communication classes and functions. Its main use is in simula

null 19 Oct 20, 2022
The PNT Integrity Library provides users a method to verify the integrity of the received GPS data and ranging signals, thereby improving resiliency against potential GPS signal loss.

PNT Integrity Library The PNT Integrity Library provides users a method to verify the integrity of the received GPS data and ranging signals, thereby

Cybersecurity and Infrastructure Security Agency 40 Oct 21, 2022
Digital control and signal processing library for DSPs developed in C

digital-control Overview Thisis a simple C library containing very useful digital control and signal processing functionalities destinated for DSP's a

CLECIO JUNG 4 Oct 25, 2022
Aquila is a digital signal processing library for C++11.

What is Aquila? Aquila is an open source and cross-platform DSP (Digital Signal Processing) library for C++11. Example #include "aquila/aquila.h" int

Zbigniew Siciarz 413 Nov 14, 2022
Digital Signal Processing Library and Audio Toolbox for the Modern Synthesist.

Digital Signal Processing Library and Audio Toolbox for the Modern Synthesist. Attention This library is still under development! Read the docs and ch

everdrone 80 Aug 15, 2022
Header-only library providing unicode aware string support for C++

CsString Introduction CsString is a standalone library which provides unicode aware string support. The CsBasicString class is a templated class which

CopperSpice 92 Aug 20, 2022
multi-sdr-gps-sim generates a IQ data stream on-the-fly to simulate a GPS L1 baseband signal using a SDR platform like HackRF or ADLAM-Pluto.

multi-sdr-gps-sim generates a GPS L1 baseband signal IQ data stream, which is then transmitted by a software-defined radio (SDR) platform. Supported at the moment are HackRF, ADLAM-Pluto and binary IQ file output. The software interacts with the user through a curses based text user interface (TUI) in terminal.

null 66 Oct 29, 2022
mstatus is a super minimal entirely signal based statusbar for DWM.

mstatus is a uber-minimalistic signal based statusbar for DWM. All components of the statusbar are modules that must either be written by the user, or written by someone else and copied by the user.

Thomas Voss 1 Feb 2, 2022
JUCE Signal Generator

JUCE Signal Generator Application This project serves as a re-introduction to JUCE programming (I haven't used it since under-grad, circa 2012). Build

Tom Wilson 1 Dec 22, 2021
Vectron VGA Plus generates a [email protected] VGA signal and has an interface that works with retro computers or microcontrollers.

Vectron VGA Plus Vectron VGA Plus generates a [email protected] VGA signal and has an interface that works with retro computers or microcontrollers. Screen

Nick Bild 31 Jul 27, 2022
The Synthesis ToolKit in C++ (STK) is a set of open source audio signal processing and algorithmic synthesis classes written in the C++ programming language.

The Synthesis ToolKit in C++ (STK) By Perry R. Cook and Gary P. Scavone, 1995--2021. This distribution of the Synthesis ToolKit in C++ (STK) contains

null 819 Nov 17, 2022
Coverage-guided grammar aware fuzzer that uses grammar automatons

Gramatron Gramatron is a coverage-guided fuzzer that uses grammar automatons to perform grammar-aware fuzzing. Technical details about our framework a

HexHive 42 Oct 26, 2022
Thread-safe cross-platform event loop library in C++

Dasynq Version 1.2.2 Dasynq is an event loop library similar to libevent, libev and libuv. Like other such libraries, it is crossplatform / portable.

Davin McCall 147 Nov 23, 2022
Node.js Workers, except on the same thread

synchronous-worker – Run Node.js APIs synchronously Usage Example const w = new SynchronousWorker();

Anna Henningsen 73 Oct 23, 2022
EarlyBird process hollowing technique (BOF) - Spawns a process in a suspended state, inject shellcode, hijack main thread with APC, and execute shellcode

HOLLOW - Cobalt Strike BOF Authors: Bobby Cooke (@0xBoku) Justin Hamilton (@JTHam0) Octavio Paguaga (@OakTree__) Matt Kingstone (@n00bRage) Beacon Obj

Bobby Cooke 201 Nov 12, 2022
Thread Stack Spoofing - PoC for an advanced In-Memory evasion technique allowing to better hide injected shellcode's memory allocation from scanners and analysts.

Thread Stack Spoofing PoC A PoC implementation for an advanced in-memory evasion technique that spoofs Thread Call Stack. This technique allows to byp

Mariusz B. 739 Nov 26, 2022
A simple thread-safe implementation of runtime obfuscation for Win32 applications.

Thread-Safe Win32 Runtime Obfuscation A simple thread-safe implementation of runtime obfuscation for Win32 applications. The main use case for this is

Daniel 1 Mar 6, 2022
Porting RT-Thread for Gowin GW1NSR-4C Soc GCC version

Porting RT-Thread for Gowin GW1NSR-4C Soc GCC version Hello everyone, this project based on RT-THREAD NANO 3.1.5 and GOWIN GW1NSR-4C Soc chip. The com

Ray 3 Apr 23, 2022
Module Stomping, No New Thread, HellsGate syscaller, UUID Shellcode Runner for x64 Windows 10!

Ninja UUID Shellcode Runner Module Stomping, No New Thread, HellsGate syscaller, UUID Shellcode Runner for x64 Windows 10! Now supports running Cobalt

Bobby Cooke 353 Nov 15, 2022