aboutsummaryrefslogtreecommitdiff
path: root/client/src/shellcode/shellcode.h
blob: 5f0e135bd89e2366cb93d1db14a8981b6e271df6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#pragma once

#include <asmjit/src/asmjit/asmjit.h>

using namespace asmjit;

namespace sc {
  
class generator {
  std::vector<uint8_t> m_buf;

  CodeHolder m_code;
  JitRuntime m_runtime;
  x86::Assembler m_assembler;

  bool m_x64;
 public:
  generator(const bool x64 = false) : m_x64{x64} {
    Environment env(x64 ? Environment::kArchX64 : Environment::kArchX86);

    m_code.init(env);
    m_code.attach(&m_assembler);
  }

  void start();
  void push(const std::vector<uintptr_t> &args);
  void call(const uintptr_t addr);
  void save_ret(const uintptr_t addr);
  void end();

  auto &operator()() const { return m_buf; }
  auto &operator->() const { return m_assembler; }
};

};