|
6 | 6 |
|
7 | 7 | namespace librii::dolphin { |
8 | 8 |
|
9 | | -struct SharedMem { |
10 | | - static Result<SharedMem> from(std::string memFileName); |
11 | | - SharedMem() : sharedMem(nullptr) {} |
12 | | - SharedMem(void* s) : sharedMem(s) {} |
13 | | - SharedMem(const SharedMem&) = delete; |
14 | | - SharedMem(SharedMem&& rhs) noexcept : sharedMem(rhs.sharedMem) { |
15 | | - rhs.sharedMem = nullptr; |
16 | | - } |
17 | | - ~SharedMem(); |
18 | | - void* get() const { return sharedMem; } |
19 | | - |
20 | | - void* sharedMem; |
21 | | -}; |
| 9 | +using SharedMem = std::unique_ptr<void, void (*)(void*)>; |
| 10 | +Result<SharedMem> SharedMem_from(std::string memFileName); |
22 | 11 |
|
23 | 12 | std::optional<int> GetDolphinPID(); |
24 | 13 |
|
@@ -77,27 +66,14 @@ struct DolphinAc { |
77 | 66 | Hooked, |
78 | 67 | UnHooked, |
79 | 68 | }; |
80 | | - static inline uint32_t code[] = { |
81 | | - llvm::ByteSwap_32(0x029f0010), llvm::ByteSwap_32(0x029f0033), |
82 | | - llvm::ByteSwap_32(0x029f0034), llvm::ByteSwap_32(0x029f0035)}; |
83 | | - |
84 | | - void* find_sequence(void* start, size_t size) { |
85 | | - uint32_t* p = (uint32_t*)start; |
86 | | - for (size_t i = 0; i < size - 4 + 1; i++, p++) { |
87 | | - if (memcmp(p, code, sizeof(code)) == 0) { |
88 | | - return p; |
89 | | - } |
90 | | - } |
91 | | - return NULL; |
92 | | - } |
93 | 69 | void hook() { |
94 | 70 | mPID = GetDolphinPID(); |
95 | 71 | if (mPID) { |
96 | | - new (&mSHM) SharedMem(*OpenDolphin(*mPID)); |
97 | | - dumpMemoryLayout(); |
98 | | - void* addr = find_sequence((char*)mSHM.get() + GetRamSize(mSHM), |
99 | | - GetExRamSize() / 4); |
100 | | - fmt::print("MEM2 at {:x}\n", (unsigned long long)addr); |
| 72 | + auto dol = OpenDolphin(*mPID); |
| 73 | + if (dol) { |
| 74 | + new (&mSHM) SharedMem(std::move(*dol)); |
| 75 | + dumpMemoryLayout(); |
| 76 | + } |
101 | 77 | } |
102 | 78 | } |
103 | 79 |
|
@@ -135,7 +111,7 @@ struct DolphinAc { |
135 | 111 | void dumpMemoryLayout(); |
136 | 112 | void dumpRegion(const std::string& name, u32 virtualStart, u32 size); |
137 | 113 |
|
138 | | - SharedMem mSHM; |
| 114 | + SharedMem mSHM{nullptr, +[](void*) {}}; |
139 | 115 | std::optional<int> mPID; |
140 | 116 | }; |
141 | 117 |
|
|
0 commit comments