예제 #1
0
파일: breakpoint.c 프로젝트: UIKit0/MacDBG
EXPORT
int add_breakpoint(mach_port_t task, vm_address_t patch_addr, int cont, callback handler) {
    kern_return_t kret;
    char *tmp;
    mach_vm_size_t len = 1;     // number of bytes to write
    uint8_t opcode = 0xcc;      // the CC byte to write
    interface *face;

    face = find_interface(task);
    if(face->registered_exception_handler == 0) {
        DEBUG_PRINT("[+add_breakpoint] HERE IN ADD BREAK\n %d", 0);
        register_(task);
    }

    kret = mach_vm_protect(task, patch_addr, len, FALSE, VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE);
    RETURN_ON_MACH_ERROR("[-add_breakpoint] mach_vm_protect()", kret);

    if (patch_addr <= MAX_BREAKS) {
        DEBUG_PRINT("[-add_breakpoint] INVALID BREAKPOINT ADDRESS %lx\n", patch_addr);
        return -1;
    } else if(face->current_break >= MAX_BREAKS) {
        DEBUG_PRINT("[-add_breakpoint] Max %d breaks reached!\n", MAX_BREAKS);
        return -1;
    }

    DEBUG_PRINT("[+add_breakpoint] Breakpoint %u: %lx added\n", face->current_break, patch_addr);
    tmp = (char*) read_memory(task, patch_addr, 1);

    breakpoint_struct *new_break = safe_malloc(sizeof(breakpoint_struct));
    new_break->address = patch_addr;
    new_break->original = tmp[0] & 0xff;
    new_break->handler = handler;
    if(face->single_step) {
        new_break->index = face->single_step_index;
    }
    else {
        new_break->index = face->current_break == 0 ? 0 : face->breaks[face->current_break-1]->index + 1;
    }
    new_break->flags = cont;


    if(face->max_break == 0) {
        face->max_break = 1;
    }

    if(face->current_break >= (face->max_break - 1)) {
        DEBUG_PRINT("[+add_breakpoint] ALLOCATING MORE BP! CURRENTLY: %d\n", face->current_break);
        face->breaks = safe_realloc(face->breaks, sizeof(breakpoint_struct*)  *(face->max_break*2));
        face->max_break *= 2;
    }

    // face->breaks = safe_realloc(face->breaks, sizeof(breakpoint_struct*)  *(face->current_break+1));
    face->breaks[face->current_break++] = new_break;

    write_memory(task, patch_addr, opcode, len); // write the byte
    kret = mach_vm_protect(task, patch_addr, (mach_vm_size_t)1, FALSE, VM_PROT_READ | VM_PROT_EXECUTE);
    RETURN_ON_MACH_ERROR("[-add_breakpoint] RESTORE mach_vm_protect()", kret);

    return 1;
}
예제 #2
0
//-------------------------------------------------------------------
  saliency_server_t::saliency_server_t(const char*  inifile)
  {
  iniWrapper ini;

  //fs::path  filepath(core::relative_bin_config_path);

	if (ini.Load(inifile)) 
  {
		int port = ini.GetInt("server:port", 30307);
		set_port(port);
	}
  register_();
  }
예제 #3
0
 Service::Handler::Handler ( const string &service )
     : myHandle(0)
 {
     myHandle = register_(service.c_str(),this);
     
         // Initialize default state.
     ::ZeroMemory(&myValue,sizeof(myValue));
     myValue.dwServiceType      = SERVICE_WIN32_OWN_PROCESS;
     myValue.dwControlsAccepted = SERVICE_ACCEPT_STOP;
     myValue.dwWin32ExitCode    = NO_ERROR;
     myValue.dwCurrentState     = SERVICE_RUNNING;
     
         // Tell the SCM the service is up and running.
     signal(Status::running);
 }
예제 #4
0
 int MetaServerManager::keepalive(const int8_t type, common::MetaServer& server)
 {
   int32_t iret = TFS_ERROR;
   switch (type)
   {
   case RTS_MS_KEEPALIVE_TYPE_LOGIN:
     iret = register_(server);
     break;
   case RTS_MS_KEEPALIVE_TYPE_RENEW:
     iret = renew(server);
     break;
   case RTS_MS_KEEPALIVE_TYPE_LOGOUT:
     iret = unregister(server.base_info_.id_);
     break;
   default:
     TBSYS_LOG(ERROR, "%s keepalive, type: %d not found",
         tbsys::CNetUtil::addrToString(server.base_info_.id_).c_str(), type);
     break;
   }
   return iret;
 }
예제 #5
0
파일: distantio.c 프로젝트: DanFaudemer/TFC
uint8_t register_array(void* adress, uint16_t size, datatype type, uint8_t writeable, char* name)
{
	uint16_t octets = 0;
		switch(type)
		{
		case FLOAT:
			octets = 4;
			break;
			
		case UINT8:
			octets = 1;
			break;
		
		case UINT16:
			octets = 2;
			break;
		
		case UINT32:
			octets = 4;
			break;
			
		case INT8:
			octets = 1;
			break;
		
		case INT16:
			octets = 2;
			break;
			
		case INT32:
			octets = 4;
			break;
		
		default:
			octets = 1;
			break;
		}
		
	return register_((uint8_t*)(adress), octets * size, type, writeable, name);
}