MCPcopy Create free account
hub / github.com/beefytech/Beef / SetupTargetBinary

Method SetupTargetBinary

IDEHelper/DebugTarget.cpp:90–137  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

88}
89
90void DebugTarget::SetupTargetBinary()
91{
92 bool wantsHotHeap = (mDebugger->mHotSwapEnabled == true && mDebugger->mDbgProcessId == 0);
93
94#ifdef BF_DBG_32
95 if (wantsHotHeap)
96 mHotHeap = new HotHeap();
97#else
98 if (wantsHotHeap)
99 {
100 // 64-bit hot loaded code needs to be placed close to the original EXE so 32-bit relative
101 // offsets within the hot code can still reach the old code
102 addr_target checkHotReserveAddr = (addr_target)mTargetBinary->mImageBase + mTargetBinary->mImageSize;
103 int mb = 1024 * 1024;
104 int reserveSize = 512 * mb;
105
106 // Round up to MB boundary + 64MB, to help keep other DLLs at their preferred base addresses
107 checkHotReserveAddr = ((checkHotReserveAddr + 64 * mb) & ~(mb - 1));
108
109 checkHotReserveAddr = (addr_target)mTargetBinary->mImageBase;
110
111 addr_target reservedPtr = NULL;
112 while ((addr_target)checkHotReserveAddr < (addr_target)mTargetBinary->mImageBase + 0x30000000)
113 {
114 reservedPtr = (addr_target)VirtualAllocEx(mDebugger->mProcessInfo.hProcess, (void*)(intptr)checkHotReserveAddr, reserveSize, MEM_RESERVE, PAGE_EXECUTE_READWRITE);
115 if (reservedPtr != NULL)
116 {
117 mHotHeapAddr = reservedPtr;
118 mHotHeapReserveSize = reserveSize;
119 BfLogDbg("VirtualAllocEx %p %d. ImageBase: %p\n", mHotHeapAddr, mHotHeapReserveSize, mTargetBinary->mImageBase);
120 break;
121 }
122 checkHotReserveAddr += 4 * mb;
123 }
124
125 if (reservedPtr == 0)
126 {
127 BfLogDbg("VirtualAllocEx failed. ImageBase: %p\n", mTargetBinary->mImageBase);
128 mDebugger->Fail("Failed to reserve memory for hot swapping");
129 }
130 else
131 {
132 BF_ASSERT(mHotHeap == NULL);
133 mHotHeap = new HotHeap(reservedPtr, reserveSize);
134 }
135 }
136#endif
137}
138
139void DebugTarget::CheckTargetBinary(DbgModule* module)
140{

Callers 1

DoUpdateMethod · 0.80

Calls 1

FailMethod · 0.45

Tested by

no test coverage detected