You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A common programming idiom when writing position independent code (PIC) is to expand a string literal into its individual characters when instantiating a local variable.
voidf() {
// Example 1: A normal instantiation with a string literalchar a[]{ "a long string" };
// Example 2: The Pic idiom for instantiating a string
Thank you to SpecterOps for supporting this research and to Duane and Matt for proofreading and editing!
Crossposted on the SpecterOps Blog.
TLDR: You may use this header file for reliable compile time string encryption without needing any additional dependencies.
Programmers of DRM software, security products, or other sensitive code bases are commonly required to minimize the amount of human readable strings in binary output files. The goal of the minimization is to hinder others from reverse engineering their proprietary technology.
Common approaches that are taken to meet this requirement often add an additional maintenance burden to the developer and are prone to error. These approaches will be presented along with t
C++11 introduced the constexpr keyword for defining a constant expression.
A constant expression is a variable or function that may be evaluated at compile time. This has many uses, including extending a switch statement to support full strings.
Constant Expression Hash Functions
C++ only supports using an integer as the condition in a switch statement and an integer that is known at compile time in a case statement.
You can define a hash function and use it to convert a string to an integer to use in a switch statement.
If you define that hash function as a constexpr you can use it to convert a string literal to an integer to use in a case statement as well.
Toolchain file to cross-compile from clang (WSL-Ubuntu) to Windows.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
I previously wrote about how to use macro metaprogramming to simplify using string literals in position independent code (PIC).
The results are summarized in the below code snippet and the article can be read on GitHub.
voidf() {
// Example 1: The Pic idiom for instantiating a stringchar picString1[]{ 'a', 'b', 'c' };
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Using macros and constexpr to make API hashing a bit more friendly
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters