BOOL SaveLibrary64ToFile(LPVOID lpBase, TCHAR* lpOutFileName) { DWORD numberOfBytesWritten; HANDLE hOutFile = CreateFile( lpOutFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); if(hOutFile == INVALID_HANDLE_VALUE) return FALSE; // DOS header PIMAGE_DOS_HEADER dos_header; dos_header = (PIMAGE_DOS_HEADER) lpBase; if (dos_header->e_magic != IMAGE_DOS_SIGNATURE || dos_header->e_lfanew == 0) { CloseHandle(hOutFile); return FALSE; } PIMAGE_NT_HEADERS64 pe_header = CALC_OFFSET(PIMAGE_NT_HEADERS64, dos_header, dos_header->e_lfanew); PIMAGE_SECTION_HEADER p = IMAGE_FIRST_SECTION(pe_header); if( !WriteFile( hOutFile, lpBase, p->PointerToRawData, &numberOfBytesWritten, NULL)) return FALSE; // PE header if (pe_header->Signature != IMAGE_NT_SIGNATURE) { CloseHandle(hOutFile); return FALSE; } DWORD dwSizeHeader = pe_header->FileHeader.SizeOfOptionalHeader + sizeof(pe_header->FileHeader) + 4;// + //sizeof(IMAGE_SECTION_HEADER)*pe_header->FileHeader.NumberOfSections; PIMAGE_SECTION_HEADER sections = (PIMAGE_SECTION_HEADER)((DWORD)(lpBase) + dwSizeHeader + dos_header->e_lfanew); //WriteFile( hOutFile, pe_header, sections[0].PointerToRawData - dos_header->e_lfanew, &numberOfBytesWritten,NULL); // write sections... for(unsigned short i = 0; i < pe_header->FileHeader.NumberOfSections; i++) { LPVOID addr = (LPVOID)((DWORD)lpBase + sections[i].VirtualAddress); WriteFile( hOutFile, addr, RoundUp(sections[i].SizeOfRawData, pe_header->OptionalHeader.FileAlignment), &numberOfBytesWritten, NULL); } CloseHandle(hOutFile); return TRUE; }
/** * \!PatchQword **/ bool CPeSection::PatchQWord(virtualaddress_t VirtualAddress, uint64_t *in) { memcpy(CALC_OFFSET(LPVOID, _rawData, VirtualAddress - _base), in, 8); return true; }
bool CPeSection::ReadQWord(virtualaddress_t VirtualAddress, uint64_t *out) { memcpy(out, CALC_OFFSET(LPVOID, _rawData, VirtualAddress - _base), 8); return true; }
/* Creating network devices variables */ int make_net_devs_vars(server_configuration * config) { static const dev_var_descr_t net_device_vars[] = { {"DEV-NAME", CALC_OFFSET(dhcp_device_t, str_name)}, {"DEV-ETHERADDR", CALC_OFFSET(dhcp_device_t, str_ether_addr)}, {"DEV-IPADDR", CALC_OFFSET(dhcp_device_t, str_ipaddr)}, {"DEV-NETWORK", CALC_OFFSET(dhcp_device_t, str_network)}, {"DEV-NETMASK", CALC_OFFSET(dhcp_device_t, str_netmask)}, {"DEV-NETMASK-CIDR", CALC_OFFSET(dhcp_device_t, str_netmask_cidr)}, {"DEV-IPADDR-INT", CALC_OFFSET(dhcp_device_t, str_ipaddr_int)}, {"DEV-NETWORK-INT", CALC_OFFSET(dhcp_device_t, str_network_int)}, {"DEV-NETMASK-INT", CALC_OFFSET(dhcp_device_t, str_netmask_int)}, {"DEV-SRVPORT", CALC_OFFSET(dhcp_device_t, str_srv_port)}, {"DEV-CLIPORT", CALC_OFFSET(dhcp_device_t, str_cli_port)} }; int i; query_var_t * var; for(i = 0; i < sizeof(net_device_vars) / sizeof(net_device_vars[0]); ++i) { var = add_variable(&config->vars_container); CHECK_VALUE_CONF(var, "Can't create device variable.", FAIL); var->type = var_device; var->name = net_device_vars[i].name; var->offset = net_device_vars[i].offset; } return OK; }
#ifdef _WIN32 ".\\db2dhcp.conf" #else "/etc/db2dhcp.conf" #endif ; static const char * usage_message = "\nUsage:\tdb2dhcp [-L] [-D] [-d] [-q] [-s] [-o] [-c <config-filename>] <interface-name1> [... <interface-nameN>] "; static const char spaces[] = " \t"; static const option_description_t cfg_options[] = { #ifndef _WIN32 {"User", string_option_handler, CALC_OFFSET(server_configuration, user)}, #endif {"LogFile", string_option_handler, CALC_OFFSET(server_configuration, log_file_name)}, {"DBType", dbm_type_option_handler, CALC_OFFSET(server_configuration, dbm)}, {"DBServerAddress", string_option_handler, CALC_OFFSET(server_configuration, db_server_address)}, {"DBServerPort", integer_option_handler, CALC_OFFSET(server_configuration, db_server_port)}, {"DBUserName", string_option_handler, CALC_OFFSET(server_configuration, db_user_name)}, {"DBUserPassword", string_option_handler, CALC_OFFSET(server_configuration, db_user_password)}, {"DBName", string_option_handler, CALC_OFFSET(server_configuration, db_name)}, {"DBClientsCount", integer_option_handler, CALC_OFFSET(server_configuration, db_clients_count)}, {"QueryDiscover", string_option_handler, CALC_OFFSET(server_configuration, query_discover)}, {"QueryHistory", string_option_handler, CALC_OFFSET(server_configuration, query_history)}, {"QueryRequest", string_option_handler, CALC_OFFSET(server_configuration, query_request)}, /* TODO 40 QueryRequestRej - запрос выполняемый в случае если клиент не выбрал данный сервер */ /* TODO 40 QueryInform - нужно обрабатывать DHCPINFORM если указан этот запрос */ {"QueryRelease", string_option_handler, CALC_OFFSET(server_configuration, query_release)},