/** * Gets called by "netlink_rcv_skb" when the userspace application wants to interact with us. * * @param skb packet received from userspace. * @param nlh message's metadata. * @return result status. */ static int handle_netlink_message(struct sk_buff *skb_in, struct nlmsghdr *nl_hdr) { struct request_hdr *jool_hdr; void *request; int error; if (nl_hdr->nlmsg_type != MSG_TYPE_JOOL) { log_debug("Expecting %#x but got %#x.", MSG_TYPE_JOOL, nl_hdr->nlmsg_type); return -EINVAL; } jool_hdr = NLMSG_DATA(nl_hdr); request = jool_hdr + 1; error = validate_version(jool_hdr); if (error) return respond_error(nl_hdr, error); switch (jool_hdr->mode) { case MODE_POOL6: return handle_pool6_config(nl_hdr, jool_hdr, request); break; case MODE_POOL4: return handle_pool4_config(nl_hdr, jool_hdr, request); break; case MODE_BIB: return handle_bib_config(nl_hdr, jool_hdr, request); break; case MODE_SESSION: return handle_session_config(nl_hdr, jool_hdr, request); break; case MODE_EAMT: return handle_eamt_config(nl_hdr, jool_hdr, request); break; case MODE_RFC6791: return handle_rfc6791_config(nl_hdr, jool_hdr, request); break; case MODE_BLACKLIST: return handle_blacklist_config(nl_hdr, jool_hdr, request); break; case MODE_LOGTIME: return handle_logtime_config(nl_hdr, jool_hdr, request); break; case MODE_GLOBAL: return handle_global_config(nl_hdr, jool_hdr, request); break; } log_err("Unknown configuration mode: %d", jool_hdr->mode); return respond_error(nl_hdr, -EINVAL); }
int dbg_help_client_t::init(char* path) { DWORD64 dwBaseAddr=0; int chars; char exe_path[MAX_PATH]; chars = GetModuleFileName(NULL, exe_path, MAX_PATH); if (chars == 0) { fprintf(stderr,"Could not find base path for XED executable\n"); fflush(stderr); exit(1); } //fprintf(stderr,"EXE PATH %s\n", exe_path); char* dir = find_base_path(exe_path); //fprintf(stderr,"DIR %s\n", dir); char* dbghelp = append3(dir,"\\","dbghelp.dll"); //fprintf(stderr,"DBGHLP %s\n", dbghelp); if (_access_s(dbghelp,4) != 0) { //fprintf(stderr, // "WARNING: Could not find dbghelp.dll in xed.exe directory\n"); //fflush(stderr); return 0; } //fprintf(stderr,"FOUND DBGHELP\n"); if (validate_version(dbghelp)) { fprintf(stderr, "WARNING: dbghelp.dll version is too old\n"); fflush(stderr); return 0; } //FIXME: Add a version check for the dll ( ImagehlpApiVersion is NOT //the right thing) SymSetOptions(SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS); hProcess = GetCurrentProcess(); if (SymInitialize(hProcess, NULL, FALSE)) { // nothing } else { error = GetLastError(); fprintf(stderr,"SymInitialize returned error : %d 0x%x\n", error, error); fflush(stderr); return 0; } actual_base = SymLoadModuleEx(hProcess, NULL, path, NULL, dwBaseAddr, 0, NULL, 0); if (actual_base) { // nothing } else { error = GetLastError(); fprintf(stderr,"SymLoadModuleEx returned error : %d 0x%x\n", error, error); fflush(stderr); return 0; } if (SymEnumerateModules64(hProcess, (PSYM_ENUMMODULES_CALLBACK64)enum_modules, this)) { // nothing } else { error = GetLastError(); fprintf(stderr,"SymEnumerateModules64 returned error : %d 0x%x\n", error, error); fflush(stderr); return 0; } if (SymEnumSymbols(hProcess, actual_base, 0, enum_sym, this)) { // nothing } else { error = GetLastError(); fprintf(stderr,"SymEnumSymbols failed: %d 0x%x\n", error, error); fflush(stderr); return 0; } make_symbol_vector(&sym_tab); initialized = true; return 1; }