int sync() { sputc(0); // 字符串终止 if (m_handler.valid()) m_handler->notify(m_severity, pbase()); pubseekpos(0, std::ios_base::out); // or str(std::string()) return 0; }
int sync() { sputc(0); // string termination if (_handler.valid()) _handler->notify(_severity, pbase()); pubseekpos(0, std::ios_base::out); // or str(std::string()) return 0; }
void LoaderPacker::ProcessExecutable( std::vector<uint8_t>& outFileBuffer, const AdditionalDataBlocksType& additionalDataBlocks) { auto loaderBlock = utils::GetSingleAdditionalBlock(additionalDataBlocks, PackerType::kLoaderPacker); // get type of source executable PlatformType platformType; auto sourcePEbits = srcPEFile_->getBits(); switch (sourcePEbits) { case 32: platformType = PlatformType::x86; break; case 64: platformType = PlatformType::x64; break; default: break; } auto loaderInfo = std::find_if(gloadersNames.begin(), gloadersNames.end(), [&platformType](LoaderInfo& loaderInfo)->bool { return loaderInfo.platformType == platformType; }); if (loaderInfo == gloadersNames.end()) { throw std::runtime_error("error finding loader"); } // load loader data boost::filesystem::path loaderFullPath = loadersStoragePath_; loaderFullPath /= loaderInfo->loaderName; boost::filesystem::ifstream loaderFile; loaderFile.open(loaderFullPath, std::ios::in || std::ifstream::binary); auto pbuf = loaderFile.rdbuf(); // get file size size_t size = static_cast<size_t>(pbuf->pubseekoff(0, loaderFile.end, loaderFile.in)); pbuf->pubseekpos(0, loaderFile.in); std::vector<PeLib::byte> loaderData(size); // get file data pbuf->sgetn(reinterpret_cast<char*>(loaderData.data()), size); loaderFile.close(); // get stub data offset to update loader code with pointer to stub data ( link stubData to loader ) ModifyLoaderWithStubDataInfo(loaderData, additionalDataBlocks); utils::ReplaceContainerData(outFileBuffer, loaderBlock.rawOffset, loaderData); }