-
Notifications
You must be signed in to change notification settings - Fork 19
/
baserepair.h
57 lines (48 loc) · 1.99 KB
/
baserepair.h
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//
// Created by xiaobai on 2021/1/9.
//
#ifndef DEXREWRITE_BASEREPAIR_H
#define DEXREWRITE_BASEREPAIR_H
#include <memory>
#include <libdex/header.h>
#include <libdex/dex_writer.h>
class BaseRepair {
public:
BaseRepair(uint8_t *dex_data, size_t dex_len) {
this->dex_data = dex_data;
this->dex_len = dex_len;
mDexFile = std::unique_ptr<libdex::DexFile>(libdex::DexFile::getDexFile(dex_data, dex_len));
if (mDexFile->IsMagicValid() && mDexFile->IsVersionValid()) {
mHeader = std::unique_ptr<dex_ir::Header>(dex_ir::DexIrBuilder(*mDexFile.get(), false));
}
}
protected:
std::unique_ptr<libdex::DexFile> mDexFile;
std::unique_ptr<dex_ir::Header> mHeader;
uint8_t *dex_data;
size_t dex_len;
protected:
#define kNumPackedOpcodes 0x100
typedef unsigned char InstructionWidth;
InstructionWidth gInstructionWidthTable[kNumPackedOpcodes] = {
// BEGIN(libdex-widths); GENERATED AUTOMATICALLY BY opcode-gen
1, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 1, 1, 1, 1, 1,
1, 1, 1, 2, 3, 2, 2, 3, 5, 2, 2, 3, 2, 1, 1, 2,
2, 1, 2, 2, 3, 3, 3, 1, 1, 2, 3, 3, 3, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0,
0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3,
3, 3, 3, 0, 3, 3, 3, 3, 3, 0, 0, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 3, 3,
3, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 0,
// END(libdex-widths)
};
};
#endif //DEXREWRITE_BASEREPAIR_H