void createHook (void *pNewTcb) { char *name = (char*)(*(long*)((char*)pNewTcb+0x34)); long *entry = (long*)((char*)pNewTcb+0x74); // always hook first task creation // to create SpyProc if (!stop_hooking){ taskprev = (void*)(*entry); *entry = (long)task_start_hook; stop_hooking = 1; } else { // hook/replace another tasks if (my_ncmp(name, "tSwitchChe", 10) == 0){ *entry = (long)mykbd_task; } if (my_ncmp(name, "tInitFileM", 10) == 0){ taskfsprev = (void*)(*entry); *entry = (long)task_fs; } if (my_ncmp(name, "tCaptSeqTa", 10) == 0){ *entry = (long)capt_seq_hook; } if (my_ncmp(name, "tMovieRecT", 10) == 0){ *entry = (long)movie_record_hook; } core_hook_task_create(pNewTcb); } }
void createHook (void *pNewTcb) { char *name = (char*)(*(long*)((char*)pNewTcb+0x34)); long *entry = (long*)((char*)pNewTcb+0x74); //volatile long *p; p=(void*) 0xc02200E0; *p=0x46; //debug led // always hook first task creation // to create SpyTask if (!stop_hooking){ taskprev = (void*)(*entry); *entry = (long)task_start_hook; stop_hooking = 1; }else{ // hook/replace another tasks // Replace the call to "SwitchCheckTask" with our own procedure if (my_ncmp(name, "tSwitchChe", 10) == 0){ *entry = (long)mykbd_task; } // Replace the call to "InitFileModules" with our own procedure if (my_ncmp(name, "tInitFileM", 10) == 0){ taskfsprev = (void*)(*entry); *entry = (long)task_fs; } // Replace the call to "CaptSeqTask" with our own procedure if (my_ncmp(name, "tCaptSeqTa", 10) == 0){ *entry = (long)capt_seq_hook; } if (my_ncmp(name, "tMovieRecT", 10) == 0){ *entry = (long)movie_record_hook; } core_hook_task_create(pNewTcb); } }