MCPcopy Create free account
hub / github.com/NtQuery/Scylla / savePeFileToDisk

Method savePeFileToDisk

Scylla/PeParser.cpp:660–783  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

658}
659
660bool PeParser::savePeFileToDisk( const WCHAR * newFile )
661{
662 bool retValue = true;
663 DWORD dwFileOffset = 0, dwWriteSize = 0;
664
665 if (getNumberOfSections() != listPeSection.size())
666 {
667 return false;
668 }
669
670 if (openWriteFileHandle(newFile))
671 {
672 //Dos header
673 dwWriteSize = sizeof(IMAGE_DOS_HEADER);
674 if (!ProcessAccessHelp::writeMemoryToFile(hFile, dwFileOffset, dwWriteSize, pDosHeader))
675 {
676 retValue = false;
677 }
678 dwFileOffset += dwWriteSize;
679
680
681 if (dosStubSize && pDosStub)
682 {
683 //Dos Stub
684 dwWriteSize = dosStubSize;
685 if (!ProcessAccessHelp::writeMemoryToFile(hFile, dwFileOffset, dwWriteSize, pDosStub))
686 {
687 retValue = false;
688 }
689 dwFileOffset += dwWriteSize;
690 }
691
692
693 //Pe Header
694 if (isPE32())
695 {
696 dwWriteSize = sizeof(IMAGE_NT_HEADERS32);
697 }
698 else
699 {
700 dwWriteSize = sizeof(IMAGE_NT_HEADERS64);
701 }
702
703 if (!ProcessAccessHelp::writeMemoryToFile(hFile, dwFileOffset, dwWriteSize, pNTHeader32))
704 {
705 retValue = false;
706 }
707 dwFileOffset += dwWriteSize;
708
709 //section headers
710 dwWriteSize = sizeof(IMAGE_SECTION_HEADER);
711
712 for (WORD i = 0; i < getNumberOfSections(); i++)
713 {
714 if (!ProcessAccessHelp::writeMemoryToFile(hFile, dwFileOffset, dwWriteSize, &listPeSection[i].sectionHeader))
715 {
716 retValue = false;
717 break;

Callers 2

ScyllaRebuildFileWFunction · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected