pwn++  0.1.4
A (toy) Windows & Linux pwn library to play with modern C++.
Literals.hpp
1 #pragma once
2 #include "Common.hpp"
3 
4 
5 namespace pwn::literals
6 {
7 constexpr static std::uint32_t
8 convert_substring_to_int(const char* str, int offset)
9 {
10  return static_cast<std::uint32_t>(str[offset] - '0') * 10 + static_cast<std::uint32_t>(str[offset + 1] - '0');
11 }
12 
13 constexpr char key = convert_substring_to_int(__TIME__, 0) ^ convert_substring_to_int(__TIME__, 3) ^
14  convert_substring_to_int(__TIME__, 6);
15 
16 
23 auto constexpr
24 operator""_B(unsigned long long x) noexcept -> usize
25 {
26  return x;
27 }
28 
35 auto constexpr
36 operator""_KB(unsigned long long x) noexcept -> usize
37 {
38  return 1024 * x;
39 }
40 
47 auto constexpr
48 operator""_MB(unsigned long long x) noexcept -> usize
49 {
50  return 1024 * 1024 * x;
51 }
52 
59 auto constexpr
60 operator""_GB(unsigned long long x) noexcept -> usize
61 {
62  return 1024 * 1024 * 1024 * x;
63 }
64 
65 
70 {
71  const std::string m_str {};
72  constexpr const std::string
73  str() const noexcept
74  {
75  std::string b {m_str};
76  for ( char i = 0; auto& c : b )
77  c ^= key + (i++);
78  return b;
79  }
80 };
81 
82 
90 constexpr encoded_string
91 operator""_es(const char* str, std::size_t t)
92 {
93  return {[&str, &t]()
94  {
95  std::string b {str, t};
96  for ( char i = 0; auto& c : b )
97  c ^= key + (i++);
98  return b;
99  }()};
100 }
101 
102 
103 } // namespace pwn::literals
Lightweight wrapper class to decode strings.
Definition: Literals.hpp:70