Copy disabled (too large)
Download .txt
Showing preview only (16,998K chars total). Download the full file to get everything.
Repository: YeLikesss/CNGALTools
Branch: main
Commit: 8f389b0d1fdf
Files: 773
Total size: 16.0 MB
Directory structure:
gitextract_0qf8lc79/
├── .gitattributes
├── .gitignore
├── 001.NVL/
│ ├── BKEngine/
│ │ ├── BKEFileNameDumper/
│ │ │ ├── BKEFileNameDumper/
│ │ │ │ ├── BKEFileNameDumper.vcxproj
│ │ │ │ ├── BKEFileNameDumper.vcxproj.filters
│ │ │ │ └── dllmain.cpp
│ │ │ ├── BKEFileNameDumper.sln
│ │ │ ├── Common/
│ │ │ │ ├── encoding.cpp
│ │ │ │ ├── encoding.h
│ │ │ │ ├── file.cpp
│ │ │ │ ├── file.h
│ │ │ │ ├── log.cpp
│ │ │ │ ├── log.h
│ │ │ │ ├── path.cpp
│ │ │ │ ├── path.h
│ │ │ │ ├── pe.cpp
│ │ │ │ ├── pe.h
│ │ │ │ ├── stringhelper.cpp
│ │ │ │ ├── stringhelper.h
│ │ │ │ ├── util.cpp
│ │ │ │ └── util.h
│ │ │ ├── Detours/
│ │ │ │ ├── creatwth.cpp
│ │ │ │ ├── detours.cpp
│ │ │ │ ├── detours.h
│ │ │ │ ├── disasm.cpp
│ │ │ │ ├── image.cpp
│ │ │ │ ├── modules.cpp
│ │ │ │ └── uimports.cpp
│ │ │ └── Loader/
│ │ │ ├── Loader.cpp
│ │ │ ├── Loader.vcxproj
│ │ │ └── Loader.vcxproj.filters
│ │ ├── BKEngine/
│ │ │ ├── BKEngine.sln
│ │ │ ├── BKEngineStatic/
│ │ │ │ ├── BKEngine/
│ │ │ │ │ ├── BKARCFileBase.cs
│ │ │ │ │ ├── BKARCFileV20.cs
│ │ │ │ │ ├── BKARCFileV21.cs
│ │ │ │ │ ├── BKARCFileV40.cs
│ │ │ │ │ ├── BZip2Helper.cs
│ │ │ │ │ └── ZstdHelper.cs
│ │ │ │ └── BKEngineStatic.csproj
│ │ │ └── ExtractGUI/
│ │ │ ├── ExtractGUI.csproj
│ │ │ ├── MainForm.Designer.cs
│ │ │ ├── MainForm.cs
│ │ │ ├── MainForm.resx
│ │ │ ├── Program.cs
│ │ │ └── Properties/
│ │ │ └── PublishProfiles/
│ │ │ └── FolderProfile64.pubxml
│ │ └── Manual.md
│ ├── NVLKrkr2/
│ │ ├── DataBase/
│ │ │ └── FileNameList/
│ │ │ ├── Conspiracy Field Fog Shadow.lst
│ │ │ ├── Conspiracy Field Snow Trap.lst
│ │ │ └── the Melody of Iris.lst
│ │ ├── Manual.md
│ │ ├── NVLKR2Extract/
│ │ │ ├── ExtractGUI/
│ │ │ │ ├── ExtractGUI.csproj
│ │ │ │ ├── MainForm.Designer.cs
│ │ │ │ ├── MainForm.cs
│ │ │ │ ├── MainForm.resx
│ │ │ │ ├── Program.cs
│ │ │ │ └── Properties/
│ │ │ │ └── PublishProfiles/
│ │ │ │ └── FolderProfile64.pubxml
│ │ │ ├── HashDecoder/
│ │ │ │ ├── BinaryDataConvert.cs
│ │ │ │ ├── HashDecoder.csproj
│ │ │ │ ├── MainForm.Designer.cs
│ │ │ │ ├── MainForm.cs
│ │ │ │ ├── MainForm.resx
│ │ │ │ ├── PathUtil.cs
│ │ │ │ ├── Program.cs
│ │ │ │ ├── Properties/
│ │ │ │ │ └── PublishProfiles/
│ │ │ │ │ └── FolderProfile64.pubxml
│ │ │ │ ├── TextCreator.Designer.cs
│ │ │ │ ├── TextCreator.cs
│ │ │ │ └── TextCreator.resx
│ │ │ ├── NVLKR2.sln
│ │ │ └── NVLKR2Static/
│ │ │ ├── NVLKR2Static.csproj
│ │ │ └── NvlKr2/
│ │ │ ├── GameKey.cs
│ │ │ ├── XP3Archive.cs
│ │ │ ├── XP3Filter.cs
│ │ │ └── Zlib.cs
│ │ └── NVLKrkrDump/
│ │ ├── Common/
│ │ │ ├── encoding.cpp
│ │ │ ├── encoding.h
│ │ │ ├── file.cpp
│ │ │ ├── file.h
│ │ │ ├── log.cpp
│ │ │ ├── log.h
│ │ │ ├── path.cpp
│ │ │ ├── path.h
│ │ │ ├── pe.cpp
│ │ │ ├── pe.h
│ │ │ ├── stringhelper.cpp
│ │ │ ├── stringhelper.h
│ │ │ ├── util.cpp
│ │ │ └── util.h
│ │ ├── Detours/
│ │ │ ├── creatwth.cpp
│ │ │ ├── detours.cpp
│ │ │ ├── detours.h
│ │ │ ├── disasm.cpp
│ │ │ ├── image.cpp
│ │ │ ├── modules.cpp
│ │ │ └── uimports.cpp
│ │ ├── KrkrPlugin/
│ │ │ ├── tp_stub.cpp
│ │ │ └── tp_stub.h
│ │ ├── NVLKrkrDump/
│ │ │ ├── NVLKrkrDump.vcxproj
│ │ │ ├── NVLKrkrDump.vcxproj.filters
│ │ │ └── dllmain.cpp
│ │ ├── NVLKrkrDump.sln
│ │ └── NVLKrkrDumpLoader/
│ │ ├── KrkrDumpLoader.cpp
│ │ ├── KrkrDumpLoader.vcxproj
│ │ └── KrkrDumpLoader.vcxproj.filters
│ ├── NVLUnity/
│ │ ├── Manual.md
│ │ ├── NVLUnityDecryptor/
│ │ │ ├── DecryptorGui/
│ │ │ │ ├── DecryptorGui.csproj
│ │ │ │ ├── MainForm.Designer.cs
│ │ │ │ ├── MainForm.cs
│ │ │ │ ├── MainForm.resx
│ │ │ │ ├── Program.cs
│ │ │ │ └── Properties/
│ │ │ │ └── PublishProfiles/
│ │ │ │ └── FolderProfile64.pubxml
│ │ │ ├── NvlUnity.sln
│ │ │ └── NvlUnityDecrypt/
│ │ │ ├── NvlUnity/
│ │ │ │ └── ArchiveCrypto.cs
│ │ │ ├── NvlUnity.V1/
│ │ │ │ ├── GameDBV1.cs
│ │ │ │ └── NVLFilterV1.cs
│ │ │ └── NvlUnityDecryptor.csproj
│ │ └── NVLUnityScriptDumper/
│ │ ├── Common/
│ │ │ ├── encoding.cpp
│ │ │ ├── encoding.h
│ │ │ ├── file.cpp
│ │ │ ├── file.h
│ │ │ ├── log.cpp
│ │ │ ├── log.h
│ │ │ ├── path.cpp
│ │ │ ├── path.h
│ │ │ ├── pe.cpp
│ │ │ ├── pe.h
│ │ │ ├── stringhelper.cpp
│ │ │ ├── stringhelper.h
│ │ │ ├── util.cpp
│ │ │ └── util.h
│ │ ├── Detours/
│ │ │ ├── creatwth.cpp
│ │ │ ├── detours.cpp
│ │ │ ├── detours.h
│ │ │ ├── disasm.cpp
│ │ │ ├── image.cpp
│ │ │ ├── modules.cpp
│ │ │ └── uimports.cpp
│ │ ├── DumperGUI/
│ │ │ ├── DumperGUI.rc
│ │ │ ├── DumperGUI.vcxproj
│ │ │ ├── DumperGUI.vcxproj.filters
│ │ │ ├── dllmain.cpp
│ │ │ └── resource.h
│ │ ├── Il2Cpp/
│ │ │ ├── Il2CppAPI.cpp
│ │ │ ├── Il2CppAPI.h
│ │ │ └── Il2CppClass.h
│ │ ├── Loader/
│ │ │ ├── Loader.cpp
│ │ │ ├── Loader.vcxproj
│ │ │ └── Loader.vcxproj.filters
│ │ ├── NVLUnityScriptDumper.sln
│ │ └── ScriptDumper/
│ │ ├── Export.def
│ │ ├── ScriptDumper.vcxproj
│ │ ├── ScriptDumper.vcxproj.filters
│ │ └── dllmain.cpp
│ └── NVLWeb/
│ ├── ConsoleTest/
│ │ ├── ConsoleTest.csproj
│ │ └── Program.cs
│ ├── EndOfTheWorldExtractor/
│ │ ├── EndOfTheWorldExtractor.csproj
│ │ └── Program.cs
│ ├── Manual.md
│ ├── NVLWeb.sln
│ └── NVLWebStatic/
│ ├── ASARPackage.cs
│ ├── Crypto.cs
│ ├── EndOfTheWorld.cs
│ ├── EntryProcess.cs
│ └── NVLWebStatic.csproj
├── 002.Strrationalism/
│ └── Snowing/
│ ├── Manual.md
│ └── SnowingExtract/
│ ├── ConsoleExecute/
│ │ ├── ConsoleExecute.csproj
│ │ └── Program.cs
│ ├── SnowingExtract.sln
│ ├── SnowingStatic/
│ │ ├── Snowing/
│ │ │ ├── AesHelper.cs
│ │ │ ├── Archive.cs
│ │ │ ├── ArchiveFile.cs
│ │ │ ├── MemorySearch.cs
│ │ │ ├── ScenarioArchive.cs
│ │ │ ├── StructureConvert.cs
│ │ │ └── TextureArchive.cs
│ │ ├── Snowing.Games/
│ │ │ └── GameKeys.cs
│ │ └── SnowingStatic.csproj
│ └── VainRiserExtractor/
│ ├── Program.cs
│ └── VainRiserExtractor.csproj
├── 003.BlueAngel/
│ ├── BlueAngelExtract/
│ │ ├── BlueAngelExtract.sln
│ │ ├── BlueAngelStaticExtract/
│ │ │ ├── BlueAngel/
│ │ │ │ ├── AssemblyEmulator.cs
│ │ │ │ ├── LZ4.cs
│ │ │ │ └── XP3Archive.cs
│ │ │ ├── BlueAngel.StarlightofAeons/
│ │ │ │ ├── Archive.cs
│ │ │ │ └── Key.cs
│ │ │ ├── BlueAngel.V1/
│ │ │ │ └── ArchiveCrypto.cs
│ │ │ └── BlueAngelStaticExtract.csproj
│ │ ├── ConsoleExecute/
│ │ │ ├── ConsoleExecute.csproj
│ │ │ └── Program.cs
│ │ └── StarlightofAeonsExtractor/
│ │ ├── Program.cs
│ │ └── StarlightofAeonsExtractor.csproj
│ ├── Manual.md
│ ├── TheCardinalMemoryNotch/
│ │ ├── ConsoleExecute/
│ │ │ ├── ConsoleExecute.csproj
│ │ │ └── Program.cs
│ │ ├── EngineCoreStatic/
│ │ │ ├── EngineCoreStatic.csproj
│ │ │ ├── SPKArchive.cs
│ │ │ ├── XP3Struct.cs
│ │ │ └── Zlib.cs
│ │ ├── ExtractorV1/
│ │ │ ├── ExtractorV1.csproj
│ │ │ └── Program.cs
│ │ ├── ProtectorFileDumper/
│ │ │ ├── Common/
│ │ │ │ ├── directory.cpp
│ │ │ │ ├── directory.h
│ │ │ │ ├── encoding.cpp
│ │ │ │ ├── encoding.h
│ │ │ │ ├── file.cpp
│ │ │ │ ├── file.h
│ │ │ │ ├── log.cpp
│ │ │ │ ├── log.h
│ │ │ │ ├── path.cpp
│ │ │ │ ├── path.h
│ │ │ │ ├── pe.cpp
│ │ │ │ ├── pe.h
│ │ │ │ ├── stringhelper.cpp
│ │ │ │ ├── stringhelper.h
│ │ │ │ ├── util.cpp
│ │ │ │ └── util.h
│ │ │ ├── ProtectorFileDumper.vcxproj
│ │ │ ├── ProtectorFileDumper.vcxproj.filters
│ │ │ └── dllmain.cpp
│ │ └── TheCardinalMemoryNotch.sln
│ └── TheCardinalMemoryNotchV2/
│ ├── KrkrFileDumper/
│ │ ├── Common/
│ │ │ ├── directory.cpp
│ │ │ ├── directory.h
│ │ │ ├── encoding.cpp
│ │ │ ├── encoding.h
│ │ │ ├── file.cpp
│ │ │ ├── file.h
│ │ │ ├── log.cpp
│ │ │ ├── log.h
│ │ │ ├── path.cpp
│ │ │ ├── path.h
│ │ │ ├── pe.cpp
│ │ │ ├── pe.h
│ │ │ ├── stringhelper.cpp
│ │ │ ├── stringhelper.h
│ │ │ ├── util.cpp
│ │ │ └── util.h
│ │ ├── Exports.def
│ │ ├── KrkrFileDumper.vcxproj
│ │ ├── KrkrFileDumper.vcxproj.filters
│ │ ├── KrkrPlugin/
│ │ │ ├── tp_stub.cpp
│ │ │ └── tp_stub.h
│ │ └── dllmain.cpp
│ ├── KrkrFileDumperLoader/
│ │ ├── Common/
│ │ │ ├── directory.cpp
│ │ │ ├── directory.h
│ │ │ ├── encoding.cpp
│ │ │ ├── encoding.h
│ │ │ ├── file.cpp
│ │ │ ├── file.h
│ │ │ ├── log.cpp
│ │ │ ├── log.h
│ │ │ ├── path.cpp
│ │ │ ├── path.h
│ │ │ ├── pe.cpp
│ │ │ ├── pe.h
│ │ │ ├── stringhelper.cpp
│ │ │ ├── stringhelper.h
│ │ │ ├── util.cpp
│ │ │ └── util.h
│ │ ├── KrkrFileDumperLoader.cpp
│ │ ├── KrkrFileDumperLoader.vcxproj
│ │ ├── KrkrFileDumperLoader.vcxproj.filters
│ │ ├── Ntdll/
│ │ │ ├── ntdll.h
│ │ │ ├── ntdll_x64.lib
│ │ │ ├── ntdll_x86.lib
│ │ │ ├── ntdllp_x64.lib
│ │ │ └── ntdllp_x86.lib
│ │ └── inlinestring.h
│ └── TheCardinalMemoryNotchV2.sln
├── 004.Fontainebleau/
│ ├── Manual.md
│ └── MeetInParisDumper/
│ ├── Fontainebleau.sln
│ ├── MeetInParisDumper/
│ │ ├── BaseType.h
│ │ ├── MeetInParisDumper.vcxproj
│ │ ├── MeetInParisDumper.vcxproj.filters
│ │ ├── Path.cpp
│ │ ├── Path.h
│ │ ├── StringHelper.cpp
│ │ ├── StringHelper.h
│ │ └── dllmain.cpp
│ └── Rename/
│ ├── Program.cs
│ └── Rename.csproj
├── 005.ZixSolution/
│ ├── ConsoleExecute/
│ │ ├── ConsoleExecute.csproj
│ │ └── Program.cs
│ ├── Extractor/
│ │ ├── Extractor.csproj
│ │ ├── Untils/
│ │ │ ├── Pickle.cs
│ │ │ └── Zlib.cs
│ │ ├── ZixRenpy7V1/
│ │ │ ├── Archive.cs
│ │ │ └── Crypto.cs
│ │ └── ZixRenpy8V1/
│ │ ├── Archive.cs
│ │ └── Crypto.cs
│ ├── Manual.md
│ ├── ZixExtractorR7/
│ │ ├── Program.cs
│ │ └── ZixExtractorR7.csproj
│ ├── ZixExtractorR8/
│ │ ├── Program.cs
│ │ └── ZixExtractorR8.csproj
│ └── zedraxloRenpy.sln
├── 006.iFAction/
│ └── iFActionTool/
│ ├── ConsoleExecute/
│ │ ├── ConsoleExecute.csproj
│ │ └── Program.cs
│ ├── Manual.md
│ ├── UnitTest/
│ │ ├── Program.cs
│ │ └── UnitTest.csproj
│ ├── iFActionExtractor/
│ │ ├── IFAction.V1/
│ │ │ └── Archive.cs
│ │ └── iFActionExtractor.csproj
│ └── iFActionTool.sln
├── 007.AsicxArt/
│ ├── AsicxArtTool/
│ │ ├── AsicxArt.sln
│ │ ├── AsicxArtStatic/
│ │ │ ├── AsicxArt/
│ │ │ │ ├── MemoryExtension.cs
│ │ │ │ ├── SQLite3.cs
│ │ │ │ └── SQLite3Command.cs
│ │ │ ├── AsicxArt.V1/
│ │ │ │ ├── Archive.cs
│ │ │ │ └── Games.cs
│ │ │ └── AsicxArtStatic.csproj
│ │ └── ExtractorGui/
│ │ ├── ExtractorGui.csproj
│ │ ├── MainForm.Designer.cs
│ │ ├── MainForm.cs
│ │ ├── MainForm.resx
│ │ ├── Program.cs
│ │ └── Properties/
│ │ └── PublishProfiles/
│ │ └── FolderProfile86.pubxml
│ └── Manual.md
├── 008.XinYvanGames/
│ ├── Manual.md
│ ├── SapphireMoonForeverMemories/
│ │ └── ExtractorCode.cs
│ ├── ShadowOfTwelveKeyGen/
│ │ ├── Program.cs
│ │ └── ShadowOfTwelveKeyGen.csproj
│ └── XinYvanGames.sln
├── 009.SoraPlayer/
│ ├── Manual.md
│ └── SOAExtract/
│ ├── ConsoleExecute/
│ │ ├── ConsoleExecute.csproj
│ │ └── Program.cs
│ ├── SoraPlayer.sln
│ ├── SoraPlayerExtractorV1/
│ │ ├── Program.cs
│ │ └── SoraPlayerExtractorV1.csproj
│ └── SoraPlayerStatic/
│ ├── Archive.cs
│ ├── SoraPlayerStatic.csproj
│ ├── XP3Archive.cs
│ └── Zlib.cs
├── 010.UniversalXP3DecFilter/
│ ├── MainFrom/
│ │ ├── MainFrom.Designer.cs
│ │ ├── MainFrom.cs
│ │ ├── MainFrom.csproj
│ │ ├── MainFrom.resx
│ │ ├── Program.cs
│ │ └── Properties/
│ │ └── PublishProfiles/
│ │ └── FolderProfile64.pubxml
│ ├── Manual.md
│ ├── XP3Archive/
│ │ ├── Archive.cs
│ │ ├── XP3Archive.cs
│ │ ├── XP3Archive.csproj
│ │ ├── XP3Filter.cs
│ │ └── Zlib.cs
│ └── XP3DecTPM.sln
├── 011.Irregulars/
│ ├── ConsoleTest/
│ │ ├── ConsoleTest.csproj
│ │ └── Program.cs
│ ├── Irregulars.sln
│ ├── IrregularsExtractorV1/
│ │ ├── IrregularsExtractorV1.csproj
│ │ └── Program.cs
│ ├── IrregularsStatic/
│ │ ├── Crypto.cs
│ │ ├── IrregularsStatic.csproj
│ │ └── PathUtil.cs
│ └── Manual.md
├── 012.VisualNovelMaker/
│ ├── ConsoleTest/
│ │ ├── ConsoleTest.csproj
│ │ └── Program.cs
│ ├── Manual.md
│ ├── VNMakerCore/
│ │ ├── Crypto.V1/
│ │ │ └── Games/
│ │ │ └── GameInfo.cs
│ │ ├── General/
│ │ │ ├── CryptoFilter.cs
│ │ │ ├── NWPath.cs
│ │ │ └── NWResource.cs
│ │ └── VNMakerCore.csproj
│ ├── VNMakerGUI/
│ │ ├── MainForm.Designer.cs
│ │ ├── MainForm.cs
│ │ ├── MainForm.resx
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── PublishProfiles/
│ │ │ └── FolderProfile64.pubxml
│ │ └── VNMakerGUI.csproj
│ └── VisualNovelMaker.sln
├── 013.GameCreatorTool/
│ ├── GCExtractorGUI/
│ │ ├── GCExtractorGUI.csproj
│ │ ├── MainForm.Designer.cs
│ │ ├── MainForm.cs
│ │ ├── MainForm.resx
│ │ ├── Program.cs
│ │ └── Properties/
│ │ └── PublishProfiles/
│ │ └── FolderProfile64.pubxml
│ ├── GameCreatorStatic/
│ │ ├── Commom.cs
│ │ ├── Extractor.V1/
│ │ │ ├── GCCryptoV1.cs
│ │ │ ├── GCGameV1.cs
│ │ │ └── GCStructureV1.cs
│ │ ├── GameCreatorStatic.csproj
│ │ └── Utils.cs
│ ├── GameCreatorTool.sln
│ ├── Manual.md
│ └── UnitTest/
│ ├── Program.cs
│ └── UnitTest.csproj
├── 014.OrangeStudio/
│ ├── Lover/
│ │ ├── ConsoleExecute/
│ │ │ ├── ConsoleExecute.csproj
│ │ │ ├── ImageDecoder.cs
│ │ │ ├── Program.cs
│ │ │ └── StreamExtend.cs
│ │ └── Lover.sln
│ └── Manual.md
├── 015.SeparateHearts/
│ └── SeparateHeartsEngineExtractor/
│ ├── ConsoleExecute/
│ │ ├── ConsoleExecute.csproj
│ │ └── Program.cs
│ ├── EngineCoreStatic/
│ │ ├── EngineCoreStatic.csproj
│ │ ├── HACDecompressor.cs
│ │ ├── HACDirectFile.cs
│ │ ├── HACImageDecoder.cs
│ │ ├── HACPackage.cs
│ │ ├── HACStreamExtend.cs
│ │ ├── HTPImageDecoder.cs
│ │ └── ImageProcessUtils.cs
│ ├── Manual.md
│ ├── SeparateHeartsEngineExtractor.sln
│ └── SeparateHeartsExtractorV1/
│ ├── Program.cs
│ └── SeparateHeartsExtractorV1.csproj
├── 016.NekoNovel/
│ └── NekoNovel/
│ ├── ConsoleExecute/
│ │ ├── ConsoleExecute.csproj
│ │ └── Program.cs
│ ├── Manual.md
│ ├── NekoNovel.sln
│ ├── NekoNovelExtractorV1/
│ │ ├── NekoNovelExtractorV1.csproj
│ │ └── Program.cs
│ └── NekoNovelStatic/
│ ├── NekoNovelStatic.csproj
│ ├── NekoPackage.cs
│ ├── StreamExtend.cs
│ └── Zlib.cs
├── 017.OurshowGames/
│ ├── ConsoleTest/
│ │ ├── ConsoleTest.csproj
│ │ └── Program.cs
│ ├── Manual.md
│ ├── OurshowExtractorV1/
│ │ ├── OurshowExtractorV1.csproj
│ │ └── Program.cs
│ ├── OurshowGames.sln
│ └── OurshowStatic/
│ ├── AGPArchiveV1.cs
│ ├── BitReader.cs
│ ├── CompressLZ77.cs
│ └── OurshowStatic.csproj
├── 018.CaramelMochaStudio/
│ └── TheStreetOfAdriftToolkit/
│ ├── Manual.md
│ ├── TSOACheat/
│ │ ├── BulletHellCheat.cpp
│ │ ├── BulletHellCheat.h
│ │ ├── Common/
│ │ │ ├── directory.cpp
│ │ │ ├── directory.h
│ │ │ ├── encoding.cpp
│ │ │ ├── encoding.h
│ │ │ ├── file.cpp
│ │ │ ├── file.h
│ │ │ ├── log.cpp
│ │ │ ├── log.h
│ │ │ ├── path.cpp
│ │ │ ├── path.h
│ │ │ ├── pe.cpp
│ │ │ ├── pe.h
│ │ │ ├── stringhelper.cpp
│ │ │ ├── stringhelper.h
│ │ │ ├── util.cpp
│ │ │ └── util.h
│ │ ├── Detours/
│ │ │ ├── creatwth.cpp
│ │ │ ├── detours.cpp
│ │ │ ├── detours.h
│ │ │ ├── disasm.cpp
│ │ │ ├── image.cpp
│ │ │ ├── modules.cpp
│ │ │ └── uimports.cpp
│ │ ├── ExtendUtils.h
│ │ ├── GameDotCheat.cpp
│ │ ├── GameDotCheat.h
│ │ ├── Il2Cpp/
│ │ │ ├── Il2Cpp.cpp
│ │ │ ├── Il2Cpp.h
│ │ │ ├── Il2CppAPI.cpp
│ │ │ ├── Il2CppAPI.h
│ │ │ └── Il2CppHeader.h
│ │ ├── Ntdll/
│ │ │ ├── ntdll.h
│ │ │ ├── ntdll_x64.lib
│ │ │ ├── ntdll_x86.lib
│ │ │ ├── ntdllp_x64.lib
│ │ │ └── ntdllp_x86.lib
│ │ ├── NtdllExtend.cpp
│ │ ├── NtdllExtend.h
│ │ ├── System.cpp
│ │ ├── System.h
│ │ ├── TSOACheat.vcxproj
│ │ ├── TSOACheat.vcxproj.filters
│ │ ├── UnityEngine.cpp
│ │ ├── UnityEngine.h
│ │ └── dllmain.cpp
│ ├── TSOALoader/
│ │ ├── Common/
│ │ │ ├── directory.cpp
│ │ │ ├── directory.h
│ │ │ ├── encoding.cpp
│ │ │ ├── encoding.h
│ │ │ ├── file.cpp
│ │ │ ├── file.h
│ │ │ ├── log.cpp
│ │ │ ├── log.h
│ │ │ ├── path.cpp
│ │ │ ├── path.h
│ │ │ ├── pe.cpp
│ │ │ ├── pe.h
│ │ │ ├── stringhelper.cpp
│ │ │ ├── stringhelper.h
│ │ │ ├── util.cpp
│ │ │ └── util.h
│ │ ├── Detours/
│ │ │ ├── creatwth.cpp
│ │ │ ├── detours.cpp
│ │ │ ├── detours.h
│ │ │ ├── disasm.cpp
│ │ │ ├── image.cpp
│ │ │ ├── modules.cpp
│ │ │ └── uimports.cpp
│ │ ├── TSOALoader.vcxproj
│ │ ├── TSOALoader.vcxproj.filters
│ │ └── winmain.cpp
│ └── TheStreetOfAdriftToolkit.sln
├── 019.PygmaGame/
│ ├── ExtractorV1/
│ │ ├── ExtractorV1.csproj
│ │ └── Program.cs
│ ├── ExtractorV2/
│ │ ├── ExtractorV2.csproj
│ │ └── Program.cs
│ ├── Manual.md
│ ├── PygmaGame.sln
│ ├── PygmaGameStatic/
│ │ ├── HLXRenpyPackageV2.cs
│ │ ├── Misc/
│ │ │ └── DeobfuscatorV1.cs
│ │ ├── Pickle.cs
│ │ ├── PygmaGameStatic.csproj
│ │ ├── WJZRenpyPackageV1.cs
│ │ └── Zlib.cs
│ └── UnitTest/
│ ├── Program.cs
│ └── UnitTest.csproj
├── 020.Xso/
│ ├── ExtractorV1/
│ │ ├── ExtractorV1.csproj
│ │ └── Program.cs
│ ├── Manual.md
│ ├── UnitTest/
│ │ ├── Program.cs
│ │ └── UnitTest.csproj
│ ├── Xso.sln
│ └── XsoStatic/
│ ├── Pickle.cs
│ ├── XsoRenpyV1.cs
│ ├── XsoStatic.csproj
│ └── Zlib.cs
├── 021.UniversalRPAExtractor/
│ ├── Manual.md
│ ├── RPAArchive/
│ │ ├── RPAArchive.csproj
│ │ ├── RenpyRPA.cs
│ │ ├── RenpyRPAv3.cs
│ │ └── Utils/
│ │ ├── Pickle.cs
│ │ └── Zlib.cs
│ ├── RPAExtractorGUI/
│ │ ├── MainForm.Designer.cs
│ │ ├── MainForm.cs
│ │ ├── MainForm.resx
│ │ ├── Program.cs
│ │ ├── Properties/
│ │ │ └── PublishProfiles/
│ │ │ └── FolderProfile64.pubxml
│ │ └── RPAExtractorGUI.csproj
│ └── UniversalRPAExtractor.sln
├── 022.XiangShe/
│ ├── AGreatScientistDecryptor/
│ │ ├── AGreatScientistDecryptor.csproj
│ │ └── Program.cs
│ ├── Manual.md
│ ├── UnitTest/
│ │ ├── Program.cs
│ │ └── UnitTest.csproj
│ ├── XiangShe.sln
│ └── XiangSheStatic/
│ ├── Crypto.V1/
│ │ ├── Crypto.cs
│ │ ├── GameDB.cs
│ │ └── ResourceExtractor.cs
│ ├── Utils/
│ │ └── GZip.cs
│ └── XiangSheStatic.csproj
├── 023.YuriAVGEngine/
│ ├── EngineCore/
│ │ ├── EngineCore.csproj
│ │ ├── YuriCrypto.cs
│ │ ├── YuriGames.cs
│ │ ├── YuriPackage.cs
│ │ ├── YuriScenario.cs
│ │ └── YuriSerializer.cs
│ ├── ExtractorGUI/
│ │ ├── ExtractorGUI.csproj
│ │ ├── MainForm.Designer.cs
│ │ ├── MainForm.cs
│ │ ├── MainForm.resx
│ │ ├── Program.cs
│ │ └── Properties/
│ │ └── PublishProfiles/
│ │ └── FolderProfile64.pubxml
│ ├── Manual.md
│ └── YuriAVGEngine.sln
├── 024.SanHuaMiao/
│ ├── Manual.md
│ └── SanHuaMiaoStudio/
│ ├── 3001Pages/
│ │ ├── 3001Pages.csproj
│ │ └── Program.cs
│ └── SanHuaMiaoStudio.sln
├── 025.SugarRush/
│ ├── IdolForging/
│ │ ├── IdolForging.csproj
│ │ └── Program.cs
│ ├── Manual.md
│ └── SugarRush.sln
├── 994.AleCubicSoft/
│ └── UndercoverAgent/
│ ├── Manual.md
│ ├── UALoader/
│ │ ├── Common/
│ │ │ ├── directory.cpp
│ │ │ ├── directory.h
│ │ │ ├── encoding.cpp
│ │ │ ├── encoding.h
│ │ │ ├── file.cpp
│ │ │ ├── file.h
│ │ │ ├── log.cpp
│ │ │ ├── log.h
│ │ │ ├── path.cpp
│ │ │ ├── path.h
│ │ │ ├── pe.cpp
│ │ │ ├── pe.h
│ │ │ ├── stringhelper.cpp
│ │ │ ├── stringhelper.h
│ │ │ ├── util.cpp
│ │ │ └── util.h
│ │ ├── Detours/
│ │ │ ├── creatwth.cpp
│ │ │ ├── detours.cpp
│ │ │ ├── detours.h
│ │ │ ├── disasm.cpp
│ │ │ ├── image.cpp
│ │ │ ├── modules.cpp
│ │ │ └── uimports.cpp
│ │ ├── UALoader.vcxproj
│ │ ├── UALoader.vcxproj.filters
│ │ └── winmain.cpp
│ ├── UAPatch/
│ │ ├── Common/
│ │ │ ├── directory.cpp
│ │ │ ├── directory.h
│ │ │ ├── encoding.cpp
│ │ │ ├── encoding.h
│ │ │ ├── file.cpp
│ │ │ ├── file.h
│ │ │ ├── log.cpp
│ │ │ ├── log.h
│ │ │ ├── path.cpp
│ │ │ ├── path.h
│ │ │ ├── pe.cpp
│ │ │ ├── pe.h
│ │ │ ├── stringhelper.cpp
│ │ │ ├── stringhelper.h
│ │ │ ├── util.cpp
│ │ │ └── util.h
│ │ ├── Detours/
│ │ │ ├── creatwth.cpp
│ │ │ ├── detours.cpp
│ │ │ ├── detours.h
│ │ │ ├── disasm.cpp
│ │ │ ├── image.cpp
│ │ │ ├── modules.cpp
│ │ │ └── uimports.cpp
│ │ ├── ExtendUtils.h
│ │ ├── Il2Cpp/
│ │ │ ├── Il2Cpp.cpp
│ │ │ ├── Il2Cpp.h
│ │ │ ├── Il2CppApi.cpp
│ │ │ ├── Il2CppApi.h
│ │ │ └── Il2CppHeader.h
│ │ ├── Ntdll/
│ │ │ ├── ntdll.h
│ │ │ ├── ntdll_x64.lib
│ │ │ ├── ntdll_x86.lib
│ │ │ ├── ntdllp_x64.lib
│ │ │ └── ntdllp_x86.lib
│ │ ├── NtdllExtend.cpp
│ │ ├── NtdllExtend.h
│ │ ├── SaveDataPatch.cpp
│ │ ├── SaveDataPatch.h
│ │ ├── TSKTContainer.h
│ │ ├── UAPatch.vcxproj
│ │ ├── UAPatch.vcxproj.filters
│ │ └── dllmain.cpp
│ └── UndercoverAgent.sln
├── 995.Chatte Noire/
│ ├── 01.Nie no Hakoniwa/
│ │ ├── FileExtractor/
│ │ │ ├── ExfsPackage.cs
│ │ │ ├── FileExtractor.csproj
│ │ │ └── Program.cs
│ │ └── Nie no Hakoniwa.sln
│ └── Manual.md
├── 996.LightVN/
│ └── LightVN/
│ ├── ConsoleExecute/
│ │ ├── ConsoleExecute.csproj
│ │ └── Program.cs
│ ├── LightVN.sln
│ ├── LightVNExtractorV1/
│ │ ├── LightVNExtractorV1.csproj
│ │ └── Program.cs
│ ├── LightVNExtractorV2/
│ │ ├── LightVNExtractorV2.csproj
│ │ └── Program.cs
│ ├── LightVNStatic/
│ │ ├── CryptoFilterV1.cs
│ │ ├── CryptoFilterV2.cs
│ │ ├── GameV1.cs
│ │ ├── GameV2.cs
│ │ ├── LightVNStatic.csproj
│ │ ├── PackageV1.cs
│ │ └── PackageV2.cs
│ └── Manual.md
├── 997.SyawaseWorks/
│ ├── HamidashiCreative/
│ │ ├── Common/
│ │ │ ├── encoding.cpp
│ │ │ ├── encoding.h
│ │ │ ├── file.cpp
│ │ │ ├── file.h
│ │ │ ├── log.cpp
│ │ │ ├── log.h
│ │ │ ├── path.cpp
│ │ │ ├── path.h
│ │ │ ├── pe.cpp
│ │ │ ├── pe.h
│ │ │ ├── stringhelper.cpp
│ │ │ ├── stringhelper.h
│ │ │ ├── util.cpp
│ │ │ └── util.h
│ │ ├── ConsoleExecute/
│ │ │ ├── ConsoleExecute.csproj
│ │ │ └── Program.cs
│ │ ├── Detours/
│ │ │ ├── creatwth.cpp
│ │ │ ├── detours.cpp
│ │ │ ├── detours.h
│ │ │ ├── disasm.cpp
│ │ │ ├── image.cpp
│ │ │ ├── modules.cpp
│ │ │ └── uimports.cpp
│ │ ├── HamidashiCreative.sln
│ │ ├── HamidashiCreativeStatic/
│ │ │ ├── HamidashiCreativeStatic.csproj
│ │ │ ├── SWArchive.cs
│ │ │ ├── SWFilter.cs
│ │ │ └── SWHash.cs
│ │ ├── HamidashiPatch/
│ │ │ ├── HamidashiPatch.vcxproj
│ │ │ ├── HamidashiPatch.vcxproj.filters
│ │ │ └── dllmain.cpp
│ │ ├── Ntdll/
│ │ │ ├── ntdll.h
│ │ │ ├── ntdll_x64.lib
│ │ │ ├── ntdll_x86.lib
│ │ │ ├── ntdllp_x64.lib
│ │ │ └── ntdllp_x86.lib
│ │ └── SteamPatch/
│ │ └── ds.ini
│ ├── HappyLiveShowUp/
│ │ ├── Common/
│ │ │ ├── encoding.cpp
│ │ │ ├── encoding.h
│ │ │ ├── file.cpp
│ │ │ ├── file.h
│ │ │ ├── log.cpp
│ │ │ ├── log.h
│ │ │ ├── path.cpp
│ │ │ ├── path.h
│ │ │ ├── pe.cpp
│ │ │ ├── pe.h
│ │ │ ├── stringhelper.cpp
│ │ │ ├── stringhelper.h
│ │ │ ├── util.cpp
│ │ │ └── util.h
│ │ ├── ConsoleExecute/
│ │ │ ├── ConsoleExecute.csproj
│ │ │ └── Program.cs
│ │ ├── Detours/
│ │ │ ├── creatwth.cpp
│ │ │ ├── detours.cpp
│ │ │ ├── detours.h
│ │ │ ├── disasm.cpp
│ │ │ ├── image.cpp
│ │ │ ├── modules.cpp
│ │ │ └── uimports.cpp
│ │ ├── HappyLiveShowUp.sln
│ │ ├── HappyLiveShowUpStatic/
│ │ │ ├── Enc_Key_V102
│ │ │ ├── HappyLiveShowUpStatic.csproj
│ │ │ ├── Patch_Key_V102
│ │ │ ├── SWCrypto.cs
│ │ │ ├── SWDataPack.cs
│ │ │ └── SWGameData.cs
│ │ ├── Ntdll/
│ │ │ ├── ntdll.h
│ │ │ ├── ntdll_x64.lib
│ │ │ ├── ntdll_x86.lib
│ │ │ ├── ntdllp_x64.lib
│ │ │ └── ntdllp_x86.lib
│ │ ├── Patch/
│ │ │ ├── Patch.vcxproj
│ │ │ ├── Patch.vcxproj.filters
│ │ │ └── dllmain.cpp
│ │ ├── SteamPatch/
│ │ │ └── ds.ini
│ │ └── TestExecute/
│ │ ├── Program.cs
│ │ └── TestExecute.csproj
│ └── Manual.md
├── 998.HikariField/
│ ├── FutureRadio/
│ │ ├── ConsoleExecute/
│ │ │ ├── ConsoleExecute.csproj
│ │ │ └── Program.cs
│ │ ├── FutureRadio.sln
│ │ ├── FutureRadioStatic/
│ │ │ ├── BinArchive.cs
│ │ │ ├── FutureRadioStatic.csproj
│ │ │ └── PidaArchive.cs
│ │ └── Manual.md
│ ├── HFUnityV1/
│ │ ├── AonatsuLine/
│ │ │ ├── AonatsuLine.csproj
│ │ │ └── Program.cs
│ │ ├── EngineCore/
│ │ │ ├── EngineCore.csproj
│ │ │ ├── PacArchive.cs
│ │ │ ├── QuickLZ.cs
│ │ │ └── Until.cs
│ │ ├── HFUnityV1.sln
│ │ ├── MakingLoverFHD/
│ │ │ ├── MakingLoverFHD.csproj
│ │ │ └── Program.cs
│ │ └── Manual.md
│ └── NekoNyan/
│ ├── ConsoleExecute/
│ │ ├── ConsoleExecute.csproj
│ │ └── Program.cs
│ ├── ExtractorGUI/
│ │ ├── ExtractorGUI.csproj
│ │ ├── MainForm.Designer.cs
│ │ ├── MainForm.cs
│ │ ├── MainForm.resx
│ │ ├── Program.cs
│ │ └── Properties/
│ │ └── PublishProfiles/
│ │ └── FolderProfile64.pubxml
│ ├── Manual.md
│ ├── NekoNyan.sln
│ └── NekoNyanStatic/
│ ├── Crypto/
│ │ ├── ArchiveCryptoBase.cs
│ │ └── DataManager.cs
│ ├── Crypto.V1/
│ │ ├── ArchiveCryptoV10.cs
│ │ ├── ArchiveCryptoV11.cs
│ │ ├── ArchiveCryptoV12.cs
│ │ └── ArchiveCryptoV13.cs
│ └── NekoNyanStatic.csproj
├── LICENSE
└── README.md
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
# Auto detect text files and perform LF normalization
* text=auto
================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
*.DotSettings
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
**/Properties/launchSettings.json
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# JetBrains Rider
.idea/
*.sln.iml
# CodeRush
.cr/
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
opencoverCoverage.xml
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/BKEFileNameDumper/BKEFileNameDumper.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{5a11c975-a301-4700-b5d2-13e027255948}</ProjectGuid>
<RootNamespace>BKEFileNameDumper</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<GenerateManifest>false</GenerateManifest>
<EmbedManifest>false</EmbedManifest>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>false</SDLCheck>
<PreprocessorDefinitions>_WIN32_WINNT=0x601;_WIN32;_DEBUG;BKEFILENAMEDUMPER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<CompileAsManaged>false</CompileAsManaged>
<ExceptionHandling>false</ExceptionHandling>
<BufferSecurityCheck>false</BufferSecurityCheck>
<EnableEnhancedInstructionSet>AdvancedVectorExtensions2</EnableEnhancedInstructionSet>
<RuntimeTypeInfo>false</RuntimeTypeInfo>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<AdditionalIncludeDirectories>$(SolutionDir)Common;</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp20</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
<PreventDllBinding>false</PreventDllBinding>
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<FixedBaseAddress>false</FixedBaseAddress>
<DataExecutionPrevention>false</DataExecutionPrevention>
<SupportNobindOfDelayLoadedDLL>true</SupportNobindOfDelayLoadedDLL>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
<AdditionalOptions>/FILEALIGN:0x1000 %(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>false</SDLCheck>
<PreprocessorDefinitions>_WIN32_WINNT=0x601;WIN32;NDEBUG;BKEFILENAMEDUMPER_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<CompileAsManaged>false</CompileAsManaged>
<ExceptionHandling>false</ExceptionHandling>
<BufferSecurityCheck>false</BufferSecurityCheck>
<EnableEnhancedInstructionSet>AdvancedVectorExtensions2</EnableEnhancedInstructionSet>
<RuntimeTypeInfo>false</RuntimeTypeInfo>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>$(SolutionDir)Common;</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp20</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>false</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
<PreventDllBinding>false</PreventDllBinding>
<GenerateWindowsMetadata>false</GenerateWindowsMetadata>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<FixedBaseAddress>false</FixedBaseAddress>
<DataExecutionPrevention>false</DataExecutionPrevention>
<SupportNobindOfDelayLoadedDLL>true</SupportNobindOfDelayLoadedDLL>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
<AdditionalOptions>/FILEALIGN:0x1000 %(AdditionalOptions)</AdditionalOptions>
</Link>
<Manifest>
<VerboseOutput>false</VerboseOutput>
</Manifest>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="..\Common\encoding.h" />
<ClInclude Include="..\Common\file.h" />
<ClInclude Include="..\Common\log.h" />
<ClInclude Include="..\Common\path.h" />
<ClInclude Include="..\Common\pe.h" />
<ClInclude Include="..\Common\stringhelper.h" />
<ClInclude Include="..\Common\util.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\Common\encoding.cpp" />
<ClCompile Include="..\Common\file.cpp" />
<ClCompile Include="..\Common\log.cpp" />
<ClCompile Include="..\Common\path.cpp" />
<ClCompile Include="..\Common\pe.cpp" />
<ClCompile Include="..\Common\stringhelper.cpp" />
<ClCompile Include="..\Common\util.cpp" />
<ClCompile Include="dllmain.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/BKEFileNameDumper/BKEFileNameDumper.vcxproj.filters
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="源文件">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="头文件">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="资源文件">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
<Filter Include="Common">
<UniqueIdentifier>{731d0d0e-aab8-4952-a2cc-6a31a6bb8f12}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\Common\encoding.h">
<Filter>Common</Filter>
</ClInclude>
<ClInclude Include="..\Common\file.h">
<Filter>Common</Filter>
</ClInclude>
<ClInclude Include="..\Common\log.h">
<Filter>Common</Filter>
</ClInclude>
<ClInclude Include="..\Common\path.h">
<Filter>Common</Filter>
</ClInclude>
<ClInclude Include="..\Common\pe.h">
<Filter>Common</Filter>
</ClInclude>
<ClInclude Include="..\Common\stringhelper.h">
<Filter>Common</Filter>
</ClInclude>
<ClInclude Include="..\Common\util.h">
<Filter>Common</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="dllmain.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="..\Common\encoding.cpp">
<Filter>Common</Filter>
</ClCompile>
<ClCompile Include="..\Common\file.cpp">
<Filter>Common</Filter>
</ClCompile>
<ClCompile Include="..\Common\log.cpp">
<Filter>Common</Filter>
</ClCompile>
<ClCompile Include="..\Common\path.cpp">
<Filter>Common</Filter>
</ClCompile>
<ClCompile Include="..\Common\pe.cpp">
<Filter>Common</Filter>
</ClCompile>
<ClCompile Include="..\Common\stringhelper.cpp">
<Filter>Common</Filter>
</ClCompile>
<ClCompile Include="..\Common\util.cpp">
<Filter>Common</Filter>
</ClCompile>
</ItemGroup>
</Project>
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/BKEFileNameDumper/dllmain.cpp
================================================
#include <Windows.h>
#include <string>
#include "log.h"
#include "stringhelper.h"
#include "util.h"
#include "path.h"
#include "file.h"
#include "pe.h"
//仅仅《十二色的季节》使用了Hash
#define BKARC_GetFileEntry_Vptr_RVA 0x29633C
struct StdWStringMSVC2013
{
union
{
wchar_t* LongString;
wchar_t ShortString[8];
} String;
int StringLength;
int MaxStringLength;
const wchar_t* ConstString()
{
if (this->MaxStringLength >= 8)
{
return this->String.LongString;
}
else
{
return this->String.ShortString;
}
}
int Length()
{
return this->StringLength;
}
};
typedef void* (_fastcall* tBKARC_GetFileEntry)(void*, void*, StdWStringMSVC2013*);
static tBKARC_GetFileEntry g_BKARC_GetFileEntry_FuncPtr = NULL;
static Log::Logger g_FileNameDumper;
//Hook 封包查找函数
__declspec(noinline)
void* __fastcall HookBKARCGetFileEntry(void* thisObj, void* unusedEdx,StdWStringMSVC2013* string)
{
void* entry = g_BKARC_GetFileEntry_FuncPtr(thisObj, NULL, string);
//文件存在
if (entry)
{
g_FileNameDumper.Write(L"%s\n", string->ConstString());
}
return entry;
}
void InstallHook()
{
PVOID gameBase = GetModuleHandleW(NULL);
PVOID bkarc_GetFileEntry_Vptr_VA = (BYTE*)gameBase + BKARC_GetFileEntry_Vptr_RVA;
//保存原函数指针
g_BKARC_GetFileEntry_FuncPtr = *(tBKARC_GetFileEntry*)bkarc_GetFileEntry_Vptr_VA;
//虚表Hook
PVOID HookBKARC_GetFileEntry_FuncPtr = HookBKARCGetFileEntry;
PE::WriteMemory(bkarc_GetFileEntry_Vptr_VA, &HookBKARC_GetFileEntry_FuncPtr, sizeof(PVOID));
}
void Initialize()
{
std::wstring gameDirectory = Util::GetAppDirectoryW();
std::wstring fileNameOutPath = gameDirectory + L"\\FileName.lst";
File::Delete(fileNameOutPath);
g_FileNameDumper.Open(fileNameOutPath.c_str());
InstallHook();
}
void ShutDown()
{
g_FileNameDumper.Close();
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
Initialize();
break;
}
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
{
ShutDown();
break;
}
}
return TRUE;
}
extern "C" __declspec(dllexport) void Dummy() {}
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/BKEFileNameDumper.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.4.33403.182
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BKEFileNameDumper", "BKEFileNameDumper\BKEFileNameDumper.vcxproj", "{5A11C975-A301-4700-B5D2-13E027255948}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Loader", "Loader\Loader.vcxproj", "{1514DC6A-FF75-4B71-8565-9A721C6B07E4}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{5A11C975-A301-4700-B5D2-13E027255948}.Debug|x86.ActiveCfg = Debug|Win32
{5A11C975-A301-4700-B5D2-13E027255948}.Debug|x86.Build.0 = Debug|Win32
{5A11C975-A301-4700-B5D2-13E027255948}.Release|x86.ActiveCfg = Release|Win32
{5A11C975-A301-4700-B5D2-13E027255948}.Release|x86.Build.0 = Release|Win32
{1514DC6A-FF75-4B71-8565-9A721C6B07E4}.Debug|x86.ActiveCfg = Debug|Win32
{1514DC6A-FF75-4B71-8565-9A721C6B07E4}.Debug|x86.Build.0 = Debug|Win32
{1514DC6A-FF75-4B71-8565-9A721C6B07E4}.Release|x86.ActiveCfg = Release|Win32
{1514DC6A-FF75-4B71-8565-9A721C6B07E4}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {54E8DE13-1F44-4EA1-AB87-ED4B26B886BE}
EndGlobalSection
EndGlobal
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/encoding.cpp
================================================
// encoding.cpp
#include <windows.h>
#include "encoding.h"
#undef max
namespace Encoding
{
std::wstring AnsiToUnicode(const std::string& source, int codePage)
{
if (source.length() == 0)
{
return std::wstring();
}
if (source.length() > (size_t)std::numeric_limits<int>::max())
{
return std::wstring();
}
int length = MultiByteToWideChar(codePage, 0, source.c_str(), (int)source.length(), NULL, 0);
if (length <= 0)
{
return std::wstring();
}
std::wstring output(length, L'\0');
if (MultiByteToWideChar(codePage, 0, source.c_str(), (int)source.length(), (LPWSTR)output.data(), (int)output.length() + 1) == 0)
{
return std::wstring();
}
return output;
}
std::string UnicodeToAnsi(const std::wstring& source, int codePage)
{
if (source.length() == 0)
{
return std::string();
}
if (source.length() > (size_t)std::numeric_limits<int>::max())
{
return std::string();
}
int length = WideCharToMultiByte(codePage, 0, source.c_str(), (int)source.length(), NULL, 0, NULL, NULL);
if (length <= 0)
{
return std::string();
}
std::string output(length, '\0');
if (WideCharToMultiByte(codePage, 0, source.c_str(), (int)source.length(), (LPSTR)output.data(), (int)output.length() + 1, NULL, NULL) == 0)
{
return std::string();
}
return output;
}
}
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/encoding.h
================================================
// encoding.h
#pragma once
#include <string>
namespace Encoding
{
enum CodePage
{
ACP = 0,
UTF_8 = 65001,
SHIFT_JIS = 932,
GBK = 936,
};
std::wstring AnsiToUnicode(const std::string& source, int codePage);
std::string UnicodeToAnsi(const std::wstring& source, int codePage);
}
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/file.cpp
================================================
// file.cpp
#include <string>
#include <fstream>
#include <limits>
#include <cstdio>
namespace File
{
std::string ReadAllText(const std::string& path)
{
FILE* fp;
long long size;
size_t length;
unsigned char buf[3];
bool utf8bom;
std::string output;
if (fopen_s(&fp, path.c_str(), "rb") != 0)
{
goto error;
}
if (_fseeki64(fp, 0, SEEK_END) != 0)
{
goto error;
}
size = _ftelli64(fp);
if (size <= 0)
{
goto error;
}
if (static_cast<uint64_t>(size) > std::numeric_limits<size_t>::max())
{
goto error;
}
if (_fseeki64(fp, 0, SEEK_SET) != 0)
{
goto error;
}
length = static_cast<size_t>(size);
// Check UTF-8 BOM
utf8bom = false;
if (fread(buf, 3, 1, fp) == 1)
{
if (buf[0] == 0xEF && buf[1] == 0xBB && buf[2] == 0xBF)
{
utf8bom = true;
}
}
if (utf8bom)
{
length -= 3;
}
else
{
if (_fseeki64(fp, 0, SEEK_SET) != 0)
{
goto error;
}
}
if (length == 0)
{
goto error;
}
output.resize(length);
if (fread(output.data(), length, 1, fp) != 1)
{
goto error;
}
fclose(fp);
return output;
error:
if (fp)
{
fclose(fp);
}
return std::string();
}
std::string ReadAllText(const std::wstring& path)
{
FILE* fp;
long long size;
size_t length;
unsigned char buf[3];
bool utf8bom;
std::string output;
if (_wfopen_s(&fp, path.c_str(), L"rb") != 0)
{
goto error;
}
if (fp == nullptr)
{
goto error;
}
if (_fseeki64(fp, 0, SEEK_END) != 0)
{
goto error;
}
size = _ftelli64(fp);
if (size <= 0)
{
goto error;
}
if (static_cast<uint64_t>(size) > std::numeric_limits<size_t>::max())
{
goto error;
}
if (_fseeki64(fp, 0, SEEK_SET) != 0)
{
goto error;
}
length = static_cast<size_t>(size);
// Check UTF-8 BOM
utf8bom = false;
if (fread(buf, 3, 1, fp) == 1)
{
if (buf[0] == 0xEF && buf[1] == 0xBB && buf[2] == 0xBF)
{
utf8bom = true;
}
}
if (utf8bom)
{
length -= 3;
}
else
{
if (_fseeki64(fp, 0, SEEK_SET) != 0)
{
goto error;
}
}
if (length == 0)
{
goto error;
}
output.resize(length);
if (fread(output.data(), length, 1, fp) != 1)
{
goto error;
}
fclose(fp);
return output;
error:
if (fp)
{
fclose(fp);
}
return std::string();
}
bool WriteAllBytes(const std::string& path, const void* buffer, size_t size)
{
FILE* fp;
if (fopen_s(&fp, path.c_str(), "wb") != 0)
{
goto error;
}
if (buffer == nullptr)
{
goto error;
}
if (size == 0)
{
goto error;
}
if (fwrite(buffer, size, 1, fp) != 1)
{
goto error;
}
fflush(fp);
fclose(fp);
return true;
error:
if (fp)
{
fclose(fp);
}
return false;
}
bool WriteAllBytes(const std::wstring& path, const void* buffer, size_t size)
{
FILE* fp;
if (_wfopen_s(&fp, path.c_str(), L"wb") != 0)
{
goto error;
}
if (fp == nullptr)
{
goto error;
}
if (buffer == nullptr)
{
goto error;
}
if (size == 0)
{
goto error;
}
if (fwrite(buffer, size, 1, fp) != 1)
{
goto error;
}
fflush(fp);
fclose(fp);
return true;
error:
if (fp)
{
fclose(fp);
}
return false;
}
void Delete(const std::string& path)
{
remove(path.c_str());
}
void Delete(const std::wstring& path)
{
_wremove(path.c_str());
}
}
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/file.h
================================================
// file.h
#pragma once
#include <string>
namespace File
{
std::string ReadAllText(const std::string& path);
std::string ReadAllText(const std::wstring& path);
bool WriteAllBytes(const std::string& path, const void* buffer, size_t size);
bool WriteAllBytes(const std::wstring& path, const void* buffer, size_t size);
void Delete(const std::string& path);
void Delete(const std::wstring& path);
}
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/log.cpp
================================================
// log.cpp
#include <cstdarg>
#include <ctime>
#include "log.h"
#include "stringhelper.h"
#include "encoding.h"
namespace Log
{
Logger::Logger() : m_pOutput{}
{
}
Logger::Logger(const wchar_t* lpFileName)
: m_pOutput{}
{
Open(lpFileName);
}
Logger::~Logger()
{
Close();
}
void Logger::Open(const wchar_t* lpFileName)
{
m_pOutput = _wfsopen(lpFileName, L"at", _SH_DENYWR);
}
void Logger::Close()
{
Flush();
if (m_pOutput)
{
fclose(m_pOutput);
m_pOutput = nullptr;
}
}
void Logger::Flush()
{
if (m_pOutput)
{
fflush(m_pOutput);
}
}
static std::string GetTimeString()
{
time_t tv;
struct tm tm;
char buf[32];
time(&tv);
localtime_s(&tm, &tv);
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", &tm);
return std::string(buf);
}
void Logger::WriteAnsi(int iCodePage, const char* lpFormat, ...)
{
if (!m_pOutput)
{
return;
}
va_list ap;
va_start(ap, lpFormat);
auto content = StringHelper::VFormat(lpFormat, ap);
va_end(ap);
auto unicode = Encoding::AnsiToUnicode(content, iCodePage);
auto output = Encoding::UnicodeToAnsi(unicode, Encoding::CodePage::UTF_8);
fwrite(output.data(), output.length(), 1, m_pOutput);
fflush(m_pOutput);
}
void Logger::WriteLineAnsi(int iCodePage, const char* lpFormat, ...)
{
if (!m_pOutput)
{
return;
}
va_list ap;
va_start(ap, lpFormat);
auto content = StringHelper::VFormat(lpFormat, ap);
va_end(ap);
auto unicode = Encoding::AnsiToUnicode(content, iCodePage);
auto utf = Encoding::UnicodeToAnsi(unicode, Encoding::CodePage::UTF_8);
auto timestamp = GetTimeString();
auto output = timestamp + " | " + utf + "\n";
fwrite(output.data(), output.length(), 1, m_pOutput);
fflush(m_pOutput);
}
void Logger::Write(const wchar_t* lpFormat, ...)
{
if (!m_pOutput)
{
return;
}
va_list ap;
va_start(ap, lpFormat);
auto content = StringHelper::VFormat(lpFormat, ap);
va_end(ap);
auto output = Encoding::UnicodeToAnsi(content, Encoding::CodePage::UTF_8);
fwrite(output.data(), output.length(), 1, m_pOutput);
fflush(m_pOutput);
}
void Logger::WriteLine(const wchar_t* lpFormat, ...)
{
if (!m_pOutput)
{
return;
}
va_list ap;
va_start(ap, lpFormat);
auto content = StringHelper::VFormat(lpFormat, ap);
va_end(ap);
auto utf = Encoding::UnicodeToAnsi(content, Encoding::CodePage::UTF_8);
auto timestamp = GetTimeString();
auto output = timestamp + " | " + utf + "\n";
fwrite(output.data(), output.length(), 1, m_pOutput);
fflush(m_pOutput);
}
}
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/log.h
================================================
// log.h
#pragma once
#include <cstdio>
namespace Log
{
class Logger
{
public:
Logger();
Logger(const wchar_t* lpFileName);
~Logger();
Logger(const Logger&) = delete;
Logger& operator=(const Logger&) = delete;
void Open(const wchar_t* lpFileName);
void Close();
void Flush();
void WriteAnsi(int iCodePage, const char* lpFormat, ...);
void WriteLineAnsi(int iCodePage, const char* lpFormat, ...);
void Write(const wchar_t* lpFormat, ...);
void WriteLine(const wchar_t* lpFormat, ...);
private:
FILE* m_pOutput;
};
}
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/path.cpp
================================================
// path.cpp
#include <windows.h>
#include <string>
namespace Path
{
std::string GetFileName(const std::string& path)
{
size_t pos;
pos = path.find_last_of('\\');
if (pos != std::string::npos)
{
return path.substr(pos + 1);
}
pos = path.find_last_of('/');
if (pos != std::string::npos)
{
return path.substr(pos + 1);
}
return path;
}
std::wstring GetFileName(const std::wstring& path)
{
size_t pos;
pos = path.find_last_of(L'\\');
if (pos != std::wstring::npos)
{
return path.substr(pos + 1);
}
pos = path.find_last_of(L'/');
if (pos != std::wstring::npos)
{
return path.substr(pos + 1);
}
return path;
}
std::string GetFileNameWithoutExtension(const std::string& path)
{
std::string name = GetFileName(path);
size_t pos = name.find_last_of('.');
if (pos != std::string::npos && pos > 0)
{
return name.substr(0, pos);
}
return name;
}
std::wstring GetFileNameWithoutExtension(const std::wstring& path)
{
std::wstring name = GetFileName(path);
size_t pos = name.find_last_of(L'.');
if (pos != std::wstring::npos && pos > 0)
{
return name.substr(0, pos);
}
return name;
}
std::string GetDirectoryName(const std::string& path)
{
size_t pos;
pos = path.find_last_of('\\');
if (pos != std::string::npos && pos > 0)
{
return path.substr(0, pos);
}
pos = path.find_last_of('/');
if (pos != std::string::npos && pos > 0)
{
return path.substr(0, pos);
}
return std::string();
}
std::wstring GetDirectoryName(const std::wstring& path)
{
size_t pos;
pos = path.find_last_of(L'\\');
if (pos != std::wstring::npos && pos > 0)
{
return path.substr(0, pos);
}
pos = path.find_last_of(L'/');
if (pos != std::wstring::npos && pos > 0)
{
return path.substr(0, pos);
}
return std::wstring();
}
std::string GetExtension(const std::string& path)
{
int length = static_cast<int>(path.length());
for (int i = length - 1; i >= 0; i--)
{
char ch = path[i];
if (ch == '.')
{
if (i != length - 1)
{
return path.substr(i, length - i);
}
else
{
return std::string();
}
}
if (ch == '\\' || ch == '/')
{
break;
}
}
return std::string();
}
std::wstring GetExtension(const std::wstring& path)
{
int length = static_cast<int>(path.length());
for (int i = length - 1; i >= 0; i--)
{
wchar_t ch = path[i];
if (ch == '.')
{
if (i != length - 1)
{
return path.substr(i, length - i);
}
else
{
return std::wstring();
}
}
if (ch == L'\\' || ch == L'/')
{
break;
}
}
return std::wstring();
}
std::string ChangeExtension(const std::string& path, const std::string& ext)
{
int length = static_cast<int>(path.length());
if (length == 0)
{
return std::string();
}
int subLength = static_cast<int>(path.length());
for (int i = length - 1; i >= 0; i--)
{
char ch = path[i];
if (ch == '.')
{
subLength = i;
break;
}
if (ch == '\\' || ch == '/')
{
break;
}
}
std::string subPath = path.substr(0, subLength);
if (ext.length() == 0)
{
return subPath;
}
if (ext.front() != '.')
{
return subPath + "." + ext;
}
else
{
return subPath + ext;
}
}
std::wstring ChangeExtension(const std::wstring& path, const std::wstring& ext)
{
int length = static_cast<int>(path.length());
if (length == 0)
{
return std::wstring();
}
int subLength = static_cast<int>(path.length());
for (int i = length - 1; i >= 0; i--)
{
wchar_t ch = path[i];
if (ch == L'.')
{
subLength = i;
break;
}
if (ch == L'\\' || ch == L'/')
{
break;
}
}
std::wstring subPath = path.substr(0, subLength);
if (ext.length() == 0)
{
return subPath;
}
if (ext.front() != L'.')
{
return subPath + L'.' + ext;
}
else
{
return subPath + ext;
}
}
std::string GetFullPath(const std::string& path)
{
DWORD dwBufferSize = MAX_PATH;
std::string output;
while (dwBufferSize < USHRT_MAX)
{
output.resize(dwBufferSize);
DWORD nSize = GetFullPathNameA(path.c_str(), dwBufferSize, const_cast<std::string::pointer>(output.data()), NULL);
if (nSize == 0)
{
return std::string();
}
if (nSize < dwBufferSize)
{
return output.substr(0, nSize);
}
else
{
dwBufferSize *= 2;
}
}
return std::string();
}
std::wstring GetFullPath(const std::wstring& path)
{
DWORD dwBufferSize = MAX_PATH;
std::wstring output;
while (dwBufferSize < USHRT_MAX)
{
output.resize(dwBufferSize);
DWORD nSize = GetFullPathNameW(path.c_str(), dwBufferSize, const_cast<std::wstring::pointer>(output.data()), NULL);
if (nSize == 0)
{
return std::wstring();
}
if (nSize < dwBufferSize)
{
return output.substr(0, nSize);
}
else
{
dwBufferSize *= 2;
}
}
return std::wstring();
}
}
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/path.h
================================================
// path.h
#pragma once
#include <string>
namespace Path
{
std::string GetFileName(const std::string& path);
std::wstring GetFileName(const std::wstring& path);
std::string GetFileNameWithoutExtension(const std::string& path);
std::wstring GetFileNameWithoutExtension(const std::wstring& path);
std::string GetDirectoryName(const std::string& path);
std::wstring GetDirectoryName(const std::wstring& path);
std::string GetExtension(const std::string& path);
std::wstring GetExtension(const std::wstring& path);
std::string ChangeExtension(const std::string& path, const std::string& ext);
std::wstring ChangeExtension(const std::wstring& path, const std::wstring& ext);
std::string GetFullPath(const std::string& path);
std::wstring GetFullPath(const std::wstring& path);
}
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/pe.cpp
================================================
// pe.cpp
#include "pe.h"
namespace PE
{
PVOID GetModuleBase(HMODULE hModule)
{
MEMORY_BASIC_INFORMATION mem;
if (!VirtualQuery(hModule, &mem, sizeof(mem)))
return 0;
return mem.AllocationBase;
}
DWORD GetModuleSize(HMODULE hModule)
{
return ((PIMAGE_NT_HEADERS)((ULONG_PTR)hModule + ((PIMAGE_DOS_HEADER)hModule)->e_lfanew))->OptionalHeader.SizeOfImage;
}
PIMAGE_SECTION_HEADER GetSectionHeader(HMODULE hModule, PCSTR lpName)
{
PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)hModule;
if (pDosHeader->e_magic != IMAGE_DOS_SIGNATURE)
return NULL;
PIMAGE_NT_HEADERS pNtHeader = (PIMAGE_NT_HEADERS)((PBYTE)pDosHeader + pDosHeader->e_lfanew);
if (pNtHeader->Signature != IMAGE_NT_SIGNATURE)
return NULL;
if (pNtHeader->FileHeader.SizeOfOptionalHeader == 0)
return NULL;
PIMAGE_SECTION_HEADER pSectionHeaders = (PIMAGE_SECTION_HEADER)((PBYTE)pNtHeader + sizeof(pNtHeader->Signature) + sizeof(pNtHeader->FileHeader) + pNtHeader->FileHeader.SizeOfOptionalHeader);
for (DWORD n = 0; n < pNtHeader->FileHeader.NumberOfSections; n++)
{
if (strcmp((PCSTR)pSectionHeaders[n].Name, lpName) == 0)
{
if (pSectionHeaders[n].VirtualAddress == 0 || pSectionHeaders[n].SizeOfRawData == 0)
return NULL;
return &pSectionHeaders[n];
}
}
return NULL;
}
static inline PBYTE RvaAdjust(PIMAGE_DOS_HEADER pDosHeader, DWORD raddr)
{
if (raddr != NULL)
{
return ((PBYTE)pDosHeader) + raddr;
}
return NULL;
}
PVOID GetImportAddress(HMODULE hModule, LPCSTR lpModuleName, LPCSTR lpProcName)
{
PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)hModule;
if (pDosHeader->e_magic != IMAGE_DOS_SIGNATURE)
return NULL;
PIMAGE_NT_HEADERS pNtHeader = (PIMAGE_NT_HEADERS)((PBYTE)pDosHeader + pDosHeader->e_lfanew);
if (pNtHeader->Signature != IMAGE_NT_SIGNATURE)
return NULL;
if (pNtHeader->FileHeader.SizeOfOptionalHeader == 0)
return NULL;
PIMAGE_IMPORT_DESCRIPTOR iidp = (PIMAGE_IMPORT_DESCRIPTOR)RvaAdjust(pDosHeader, pNtHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
if (iidp == NULL)
return NULL;
for (; iidp->OriginalFirstThunk != 0; iidp++)
{
LPCSTR lpszModule = (LPCSTR)RvaAdjust(pDosHeader, iidp->Name);
if (lpszModule == NULL)
return NULL;
if (_stricmp(lpszModule, lpModuleName) != 0)
continue;
PIMAGE_THUNK_DATA pThunks = (PIMAGE_THUNK_DATA)RvaAdjust(pDosHeader, iidp->OriginalFirstThunk);
PVOID* pAddrs = (PVOID*)RvaAdjust(pDosHeader, iidp->FirstThunk);
if (pThunks == NULL)
continue;
for (DWORD i = 0; pThunks[i].u1.Ordinal; i++)
{
if (IMAGE_SNAP_BY_ORDINAL(pThunks[i].u1.Ordinal))
continue;
LPCSTR lpszProc = (PCSTR)RvaAdjust(pDosHeader, (DWORD)pThunks[i].u1.AddressOfData + 2);
if (lpszProc == NULL)
continue;
if (strcmp(lpszProc, lpProcName) == 0)
return &pAddrs[i];
}
}
return NULL;
}
PVOID SearchPattern(PVOID lpStartSearch, DWORD dwSearchLen, const char* lpPattern, DWORD dwPatternLen)
{
ULONG_PTR dwStartAddr = (ULONG_PTR)lpStartSearch;
ULONG_PTR dwEndAddr = dwStartAddr + dwSearchLen - dwPatternLen;
while (dwStartAddr < dwEndAddr)
{
bool found = true;
for (DWORD i = 0; i < dwPatternLen; i++)
{
char code = *(char*)(dwStartAddr + i);
if (lpPattern[i] != 0x2A && lpPattern[i] != code)
{
found = false;
break;
}
}
if (found)
return (PVOID)dwStartAddr;
dwStartAddr++;
}
return 0;
}
BOOL WriteMemory(PVOID lpAddress, PVOID lpBuffer, DWORD nSize)
{
DWORD dwProtect;
if (VirtualProtect(lpAddress, nSize, PAGE_EXECUTE_READWRITE, &dwProtect))
{
memcpy(lpAddress, lpBuffer, nSize);
VirtualProtect(lpAddress, nSize, dwProtect, &dwProtect);
return TRUE;
}
return FALSE;
}
BOOL IATHook(HMODULE hModule, LPCSTR lpModuleName, LPCSTR lpProcName, PVOID lpNewProc, PVOID* lpOriginalProc)
{
PVOID lpAddress = GetImportAddress(hModule, lpModuleName, lpProcName);
if (lpAddress == NULL)
{
return FALSE;
}
if (lpOriginalProc)
{
*lpOriginalProc = *(PVOID*)lpAddress;
}
return WriteValue(lpAddress, lpNewProc);
}
}
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/pe.h
================================================
// pe.h
#pragma once
#include <windows.h>
#include <type_traits>
namespace PE
{
// Get the base address of the specified module.
PVOID GetModuleBase(HMODULE hModule);
// Get the size of the specified module.
DWORD GetModuleSize(HMODULE hModule);
// Get the section with the specified name.
PIMAGE_SECTION_HEADER GetSectionHeader(HMODULE hModule, PCSTR lpName);
// Get the address of the imported function in the import table.
PVOID GetImportAddress(HMODULE hModule, LPCSTR lpModuleName, LPCSTR lpProcName);
// Searche memory for the specified pattern.
PVOID SearchPattern(PVOID lpStartSearch, DWORD dwSearchLen, const char* lpPattern, DWORD dwPatternLen);
// Write data to the specified address.
BOOL WriteMemory(PVOID lpAddress, PVOID lpBuffer, DWORD nSize);
// Writes a scalar value to the specified address.
// If you pass a pointer, the value of that pointer is written.
template<typename T, typename std::enable_if_t<std::is_scalar_v<T>, bool> = true>
BOOL WriteValue(PVOID lpAddress, T tValue)
{
return WriteMemory(lpAddress, &tValue, sizeof(T));
}
// Replace imported function in the import table.
BOOL IATHook(HMODULE hModule, LPCSTR lpModuleName, LPCSTR lpProcName, PVOID lpNewProc, PVOID* lpOriginalProc);
}
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/stringhelper.cpp
================================================
// stringhelper.cpp
#include <algorithm>
#include <string>
#include <cstdarg>
namespace StringHelper
{
bool StartsWith(const char* source, const char* sub)
{
std::string_view vsource(source);
std::string_view vsub(sub);
if (vsource.length() == 0 || vsub.length() == 0 || vsource.length() < vsub.length())
{
return false;
}
return vsource.compare(0, vsub.length(), sub) == 0;
}
bool StartsWith(const wchar_t* source, const wchar_t* sub)
{
std::wstring_view vsource(source);
std::wstring_view vsub(sub);
if (vsource.length() == 0 || vsub.length() == 0 || vsource.length() < vsub.length())
{
return false;
}
return vsource.compare(0, vsub.length(), sub) == 0;
}
bool StartsWith(const std::string& source, const std::string& sub)
{
if (source.length() == 0 || sub.length() == 0 || source.length() < sub.length())
{
return false;
}
return source.compare(0, sub.length(), sub) == 0;
}
bool StartsWith(const std::wstring& source, const std::wstring& sub)
{
if (source.length() == 0 || sub.length() == 0 || source.length() < sub.length())
{
return false;
}
return source.compare(0, sub.length(), sub) == 0;
}
bool EndsWith(const char* source, const char* sub)
{
std::string_view vsource(source);
std::string_view vsub(sub);
if (vsource.length() == 0 || vsub.length() == 0 || vsource.length() < vsub.length())
{
return false;
}
return vsource.compare(vsource.length() - vsub.length(), vsub.length(), sub) == 0;
}
bool EndsWith(const wchar_t* source, const wchar_t* sub)
{
std::wstring_view vsource(source);
std::wstring_view vsub(sub);
if (vsource.length() == 0 || vsub.length() == 0 || vsource.length() < vsub.length())
{
return false;
}
return vsource.compare(vsource.length() - vsub.length(), vsub.length(), sub) == 0;
}
bool EndsWith(const std::string& source, const std::string& sub)
{
if (source.length() == 0 || sub.length() == 0 || source.length() < sub.length())
{
return false;
}
return source.compare(source.length() - sub.length(), sub.length(), sub) == 0;
}
bool EndsWith(const std::wstring& source, const std::wstring& sub)
{
if (source.length() == 0 || sub.length() == 0 || source.length() < sub.length())
{
return false;
}
return source.compare(source.length() - sub.length(), sub.length(), sub) == 0;
}
std::string ToLower(const std::string& source)
{
std::string output = source;
std::transform(output.begin(), output.end(), output.begin(), [](auto c) { return (std::string::value_type)std::tolower(c); });
return output;
}
std::wstring ToLower(const std::wstring& source)
{
std::wstring output = source;
std::transform(output.begin(), output.end(), output.begin(), [](auto c) { return (std::wstring::value_type)std::tolower(c); });
return output;
}
std::string ToUpper(const std::string& source)
{
std::string output = source;
std::transform(output.begin(), output.end(), output.begin(), [](auto c) { return (std::string::value_type)std::toupper(c); });
return output;
}
std::wstring ToUpper(const std::wstring& source)
{
std::wstring output = source;
std::transform(output.begin(), output.end(), output.begin(), [](auto c) { return (std::wstring::value_type)std::toupper(c); });
return output;
}
std::string Format(const char* format, ...)
{
char buf[1024];
int count;
va_list ap;
// Try to print to a small buffer first.
// We don't need to allocate a large buffer if it's enough to hold all the characters.
va_start(ap, format);
count = vsnprintf(buf, sizeof(buf), format, ap);
va_end(ap);
if (count <= 0)
{
// Something error happened, We return an empty string.
return std::string();
}
if (count < sizeof(buf))
{
// All characters have been written to the small buffer.
return std::string(buf, count);
}
// Allocate a buffer large enough to hold all characters.
std::string output(count, '\0');
// Try to print
va_start(ap, format);
count = vsnprintf(const_cast<std::string::pointer>(output.data()), output.size() + 1, format, ap);
va_end(ap);
if (count <= 0)
{
// Something error happened, We return an empty string.
return std::string();
}
return output;
}
std::string VFormat(const char* format, va_list ap)
{
char buf[1024];
int count;
// Try to print to a small buffer first.
// We don't need to allocate a large buffer if it's enough to hold all the characters.
count = vsnprintf(buf, sizeof(buf), format, ap);
if (count <= 0)
{
// Something error happened, We return an empty string.
return std::string();
}
if (count < sizeof(buf))
{
// All characters have been written to the small buffer.
return std::string(buf, count);
}
// Allocate a buffer large enough to hold all characters.
std::string output(count, '\0');
// Try to print
count = vsnprintf(const_cast<std::string::pointer>(output.data()), output.size() + 1, format, ap);
if (count <= 0)
{
// Something error happened, We return an empty string.
return std::string();
}
return output;
}
std::wstring Format(const wchar_t* format, ...)
{
wchar_t buf[1024];
int count;
va_list ap;
// Try to print to a small buffer first.
// We don't need to allocate a large buffer if it's enough to hold all the characters.
va_start(ap, format);
count = _vsnwprintf_s(buf, _countof(buf), format, ap);
va_end(ap);
if (count <= 0)
{
// Something error happened, We return an empty string.
return std::wstring();
}
if (count < sizeof(buf))
{
// All characters have been written to the small buffer.
return std::wstring(buf, count);
}
// Allocate a buffer large enough to hold all characters.
std::wstring output(count, '\0');
// Try to print
va_start(ap, format);
count = _vsnwprintf_s(const_cast<std::wstring::pointer>(output.data()), output.size() + 1, output.size() + 1, format, ap);
va_end(ap);
if (count <= 0)
{
// Something error happened, We return an empty string.
return std::wstring();
}
return output;
}
std::wstring VFormat(const wchar_t* format, va_list ap)
{
wchar_t buf[1024];
int count;
// Try to print to a small buffer first.
// We don't need to allocate a large buffer if it's enough to hold all the characters.
count = _vsnwprintf_s(buf, _countof(buf), format, ap);
if (count <= 0)
{
// Something error happened, We return an empty string.
return std::wstring();
}
if (count < sizeof(buf))
{
// All characters have been written to the small buffer.
return std::wstring(buf, count);
}
// Allocate a buffer large enough to hold all characters.
std::wstring output(count, '\0');
// Try to print
count = _vsnwprintf_s(const_cast<std::wstring::pointer>(output.data()), output.size() + 1, output.size() + 1, format, ap);
if (count <= 0)
{
// Something error happened, We return an empty string.
return std::wstring();
}
return output;
}
}
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/stringhelper.h
================================================
// stringhelper.h
#pragma once
#include <string>
namespace StringHelper
{
bool StartsWith(const char* source, const char* sub);
bool StartsWith(const wchar_t* source, const wchar_t* sub);
bool StartsWith(const std::string& source, const std::string& sub);
bool StartsWith(const std::wstring& source, const std::wstring& sub);
bool EndsWith(const char* source, const char* sub);
bool EndsWith(const wchar_t* source, const wchar_t* sub);
bool EndsWith(const std::string& source, const std::string& sub);
bool EndsWith(const std::wstring& source, const std::wstring& sub);
std::string ToLower(const std::string& source);
std::wstring ToLower(const std::wstring& source);
std::string ToUpper(const std::string& source);
std::wstring ToUpper(const std::wstring& source);
std::string Format(const char* format, ...);
std::string VFormat(const char* format, va_list ap);
std::wstring Format(const wchar_t* format, ...);
std::wstring VFormat(const wchar_t* format, va_list ap);
}
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/util.cpp
================================================
// util.cpp
#include <windows.h>
#include <shlobj.h>
#include "stringhelper.h"
namespace Util
{
std::string GetModulePathA(HMODULE hModule)
{
DWORD dwBufferSize = MAX_PATH;
std::string output;
// Maximum file path limitation
// @see https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation
while (dwBufferSize < USHRT_MAX)
{
output.resize(dwBufferSize);
// Try to get the file name.
DWORD nSize = GetModuleFileNameA(hModule, const_cast<std::string::pointer>(output.data()), dwBufferSize);
DWORD dwErrorCode = GetLastError();
if (dwErrorCode != ERROR_SUCCESS && dwErrorCode != ERROR_INSUFFICIENT_BUFFER)
{
// Something unexpected happened.
return std::string();
}
if (dwErrorCode == ERROR_SUCCESS && nSize < dwBufferSize)
{
// All characters have been written into the buffer.
return output.substr(0, nSize);
}
if (dwErrorCode == ERROR_INSUFFICIENT_BUFFER || nSize == dwBufferSize)
{
// Expand the buffer.
dwBufferSize *= 2;
}
}
return std::string();
}
std::wstring GetModulePathW(HMODULE hModule)
{
DWORD dwBufferSize = MAX_PATH;
std::wstring output;
// Maximum file path limitation
// @see https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation
while (dwBufferSize < USHRT_MAX)
{
output.resize(dwBufferSize);
// Try to get the file name.
DWORD nSize = GetModuleFileNameW(hModule, const_cast<std::wstring::pointer>(output.data()), dwBufferSize);
DWORD dwErrorCode = GetLastError();
if (dwErrorCode != ERROR_SUCCESS && dwErrorCode != ERROR_INSUFFICIENT_BUFFER)
{
// Something unexpected happened.
return std::wstring();
}
if (dwErrorCode == ERROR_SUCCESS && nSize < dwBufferSize)
{
// All characters have been written into the buffer.
return output.substr(0, nSize);
}
if (dwErrorCode == ERROR_INSUFFICIENT_BUFFER || nSize == dwBufferSize)
{
// Expand the buffer.
dwBufferSize *= 2;
}
}
return std::wstring();
}
std::string GetAppPathA()
{
return GetModulePathA(GetModuleHandleW(NULL));
}
std::wstring GetAppPathW()
{
return GetModulePathW(GetModuleHandleW(NULL));
}
std::string GetAppDirectoryA()
{
std::string path = GetAppPathA();
size_t pos = path.find_last_of('\\');
if (pos != std::string::npos && pos > 0)
{
return path.substr(0, pos);
}
return path;
}
std::wstring GetAppDirectoryW()
{
std::wstring path = GetAppPathW();
size_t pos = path.find_last_of('\\');
if (pos != std::wstring::npos && pos > 0)
{
return path.substr(0, pos);
}
return path;
}
std::string GetLastErrorMessageA()
{
DWORD dwFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM;
DWORD dwErrorCode = GetLastError();
DWORD dwLanguageId = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
LPSTR pBuffer = NULL;
if (FormatMessageA(dwFlags, NULL, dwErrorCode, dwLanguageId, (LPSTR)&pBuffer, 0, NULL) == 0)
{
return std::string();
}
std::string message(pBuffer);
LocalFree(pBuffer);
return message;
}
std::wstring GetLastErrorMessageW()
{
DWORD dwFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM;
DWORD dwErrorCode = GetLastError();
DWORD dwLanguageId = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
PWSTR pBuffer = NULL;
if (FormatMessageW(dwFlags, NULL, dwErrorCode, dwLanguageId, (PWSTR)&pBuffer, 0, NULL) == 0)
{
return std::wstring();
}
std::wstring message(pBuffer);
LocalFree(pBuffer);
return message;
}
__declspec(noreturn) void ThrowError(const char* format, ...)
{
va_list ap;
va_start(ap, format);
auto message = StringHelper::VFormat(format, ap);
va_end(ap);
MessageBoxA(NULL, message.c_str(), "Fatal Error", MB_ICONERROR | MB_OK);
ExitProcess(1);
}
__declspec(noreturn) void ThrowError(const wchar_t* format, ...)
{
va_list ap;
va_start(ap, format);
auto message = StringHelper::VFormat(format, ap);
va_end(ap);
MessageBoxW(NULL, message.c_str(), L"Fatal Error", MB_ICONERROR | MB_OK);
ExitProcess(1);
}
void WriteDebugMessage(const char* format, ...)
{
va_list ap;
va_start(ap, format);
auto message = StringHelper::VFormat(format, ap);
va_end(ap);
OutputDebugStringA(message.c_str());
}
void WriteDebugMessage(const wchar_t* format, ...)
{
va_list ap;
va_start(ap, format);
auto message = StringHelper::VFormat(format, ap);
va_end(ap);
OutputDebugStringW(message.c_str());
}
std::string OpenFolderDialog(const std::string& title)
{
char buf[MAX_PATH]{};
BROWSEINFOA bi{};
bi.hwndOwner = GetActiveWindow();
bi.pidlRoot = NULL;
bi.pszDisplayName = buf;
bi.lpszTitle = title.c_str();
bi.ulFlags = BIF_NEWDIALOGSTYLE;
bi.lpfn = NULL;
bi.lParam = NULL;
bi.iImage = 0;
LPITEMIDLIST idl = SHBrowseForFolderA(&bi);
if (idl == NULL)
{
return std::string();
}
if (SHGetPathFromIDListA(idl, buf) == FALSE)
{
return std::string();
}
return std::string(buf);
}
std::wstring OpenFolderDialog(const std::wstring& title)
{
WCHAR buf[MAX_PATH]{};
BROWSEINFOW bi{};
bi.hwndOwner = GetActiveWindow();
bi.pidlRoot = NULL;
bi.pszDisplayName = buf;
bi.lpszTitle = title.c_str();
bi.ulFlags = BIF_NEWDIALOGSTYLE;
bi.lpfn = NULL;
bi.lParam = NULL;
bi.iImage = 0;
LPITEMIDLIST idl = SHBrowseForFolderW(&bi);
if (idl == NULL)
{
return std::wstring();
}
if (SHGetPathFromIDListW(idl, buf) == FALSE)
{
return std::wstring();
}
return std::wstring(buf);
}
}
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/util.h
================================================
// util.h
#pragma once
#include <windows.h>
#include <string>
namespace Util
{
// Get the full path of the specified module.
std::string GetModulePathA(HMODULE hModule);
// Get the full path of the specified module.
std::wstring GetModulePathW(HMODULE hModule);
// Get the full path to the executable.
std::string GetAppPathA();
// Get the full path to the executable.
std::wstring GetAppPathW();
// Get the directory path to the executable.
std::string GetAppDirectoryA();
// Get the directory path to the executable.
std::wstring GetAppDirectoryW();
// Get message from Win32 last error code.
std::string GetLastErrorMessageA();
// Get message from Win32 last error code.
std::wstring GetLastErrorMessageW();
// Display an error message then close the application.
__declspec(noreturn) void ThrowError(const char* format, ...);
// Display an error message then close the application.
__declspec(noreturn) void ThrowError(const wchar_t* format, ...);
// Sends a string to the debugger for display.
void WriteDebugMessage(const char* format, ...);
// Sends a string to the debugger for display.
void WriteDebugMessage(const wchar_t* format, ...);
// Display a folder select dialog.
std::string OpenFolderDialog(const std::string& title);
// Display a folder select dialog.
std::wstring OpenFolderDialog(const std::wstring& title);
}
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Detours/creatwth.cpp
================================================
//////////////////////////////////////////////////////////////////////////////
//
// Create a process with a DLL (creatwth.cpp of detours.lib)
//
// Microsoft Research Detours Package, Version 4.0.1
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// #define DETOUR_DEBUG 1
#define DETOURS_INTERNAL
#include "detours.h"
#include <stddef.h>
#if DETOURS_VERSION != 0x4c0c1 // 0xMAJORcMINORcPATCH
#error detours.h version mismatch
#endif
#define IMPORT_DIRECTORY OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]
#define BOUND_DIRECTORY OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT]
#define CLR_DIRECTORY OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR]
#define IAT_DIRECTORY OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IAT]
//////////////////////////////////////////////////////////////////////////////
//
const GUID DETOUR_EXE_HELPER_GUID = { /* ea0251b9-5cde-41b5-98d0-2af4a26b0fee */
0xea0251b9, 0x5cde, 0x41b5,
{ 0x98, 0xd0, 0x2a, 0xf4, 0xa2, 0x6b, 0x0f, 0xee }};
//////////////////////////////////////////////////////////////////////////////
//
// Enumerate through modules in the target process.
//
static PVOID LoadNtHeaderFromProcess(_In_ HANDLE hProcess,
_In_ HMODULE hModule,
_Out_ PIMAGE_NT_HEADERS32 pNtHeader)
{
ZeroMemory(pNtHeader, sizeof(*pNtHeader));
PBYTE pbModule = (PBYTE)hModule;
if (pbModule == NULL) {
SetLastError(ERROR_INVALID_PARAMETER);
return NULL;
}
MEMORY_BASIC_INFORMATION mbi;
ZeroMemory(&mbi, sizeof(mbi));
if (VirtualQueryEx(hProcess, hModule, &mbi, sizeof(mbi)) == 0) {
return NULL;
}
IMAGE_DOS_HEADER idh;
if (!ReadProcessMemory(hProcess, pbModule, &idh, sizeof(idh), NULL)) {
DETOUR_TRACE(("ReadProcessMemory(idh@%p..%p) failed: %lu\n",
pbModule, pbModule + sizeof(idh), GetLastError()));
return NULL;
}
if (idh.e_magic != IMAGE_DOS_SIGNATURE ||
(DWORD)idh.e_lfanew > mbi.RegionSize ||
(DWORD)idh.e_lfanew < sizeof(idh)) {
SetLastError(ERROR_BAD_EXE_FORMAT);
return NULL;
}
if (!ReadProcessMemory(hProcess, pbModule + idh.e_lfanew,
pNtHeader, sizeof(*pNtHeader), NULL)) {
DETOUR_TRACE(("ReadProcessMemory(inh@%p..%p:%p) failed: %lu\n",
pbModule + idh.e_lfanew,
pbModule + idh.e_lfanew + sizeof(*pNtHeader),
pbModule,
GetLastError()));
return NULL;
}
if (pNtHeader->Signature != IMAGE_NT_SIGNATURE) {
SetLastError(ERROR_BAD_EXE_FORMAT);
return NULL;
}
return pbModule + idh.e_lfanew;
}
static HMODULE EnumerateModulesInProcess(_In_ HANDLE hProcess,
_In_opt_ HMODULE hModuleLast,
_Out_ PIMAGE_NT_HEADERS32 pNtHeader,
_Out_opt_ PVOID *pRemoteNtHeader)
{
ZeroMemory(pNtHeader, sizeof(*pNtHeader));
if (pRemoteNtHeader) {
*pRemoteNtHeader = NULL;
}
PBYTE pbLast = (PBYTE)hModuleLast + MM_ALLOCATION_GRANULARITY;
MEMORY_BASIC_INFORMATION mbi;
ZeroMemory(&mbi, sizeof(mbi));
// Find the next memory region that contains a mapped PE image.
//
for (;; pbLast = (PBYTE)mbi.BaseAddress + mbi.RegionSize) {
if (VirtualQueryEx(hProcess, (PVOID)pbLast, &mbi, sizeof(mbi)) == 0) {
break;
}
// Usermode address space has such an unaligned region size always at the
// end and only at the end.
//
if ((mbi.RegionSize & 0xfff) == 0xfff) {
break;
}
if (((PBYTE)mbi.BaseAddress + mbi.RegionSize) < pbLast) {
break;
}
// Skip uncommitted regions and guard pages.
//
if ((mbi.State != MEM_COMMIT) ||
((mbi.Protect & 0xff) == PAGE_NOACCESS) ||
(mbi.Protect & PAGE_GUARD)) {
continue;
}
PVOID remoteHeader
= LoadNtHeaderFromProcess(hProcess, (HMODULE)pbLast, pNtHeader);
if (remoteHeader) {
if (pRemoteNtHeader) {
*pRemoteNtHeader = remoteHeader;
}
return (HMODULE)pbLast;
}
}
return NULL;
}
//////////////////////////////////////////////////////////////////////////////
//
// Find payloads in target process.
//
static PVOID FindDetourSectionInRemoteModule(_In_ HANDLE hProcess,
_In_ HMODULE hModule,
_In_ const IMAGE_NT_HEADERS32 *pNtHeader,
_In_ PVOID pRemoteNtHeader)
{
if (pNtHeader->FileHeader.SizeOfOptionalHeader == 0) {
SetLastError(ERROR_EXE_MARKED_INVALID);
return NULL;
}
PIMAGE_SECTION_HEADER pRemoteSectionHeaders
= (PIMAGE_SECTION_HEADER)((PBYTE)pRemoteNtHeader
+ sizeof(pNtHeader->Signature)
+ sizeof(pNtHeader->FileHeader)
+ pNtHeader->FileHeader.SizeOfOptionalHeader);
IMAGE_SECTION_HEADER header;
for (DWORD n = 0; n < pNtHeader->FileHeader.NumberOfSections; ++n) {
if (!ReadProcessMemory(hProcess, pRemoteSectionHeaders + n, &header, sizeof(header), NULL)) {
DETOUR_TRACE(("ReadProcessMemory(ish@%p..%p) failed: %lu\n",
pRemoteSectionHeaders + n,
(PBYTE)(pRemoteSectionHeaders + n) + sizeof(header),
GetLastError()));
return NULL;
}
if (strcmp((PCHAR)header.Name, ".detour") == 0) {
if (header.VirtualAddress == 0 ||
header.SizeOfRawData == 0) {
break;
}
SetLastError(NO_ERROR);
return (PBYTE)hModule + header.VirtualAddress;
}
}
SetLastError(ERROR_EXE_MARKED_INVALID);
return NULL;
}
static PVOID FindPayloadInRemoteDetourSection(_In_ HANDLE hProcess,
_In_ REFGUID rguid,
_Out_opt_ DWORD *pcbData,
_In_ PVOID pvRemoteDetoursSection)
{
if (pcbData) {
*pcbData = 0;
}
PBYTE pbData = (PBYTE)pvRemoteDetoursSection;
DETOUR_SECTION_HEADER header;
if (!ReadProcessMemory(hProcess, pbData, &header, sizeof(header), NULL)) {
DETOUR_TRACE(("ReadProcessMemory(dsh@%p..%p) failed: %lu\n",
pbData,
pbData + sizeof(header),
GetLastError()));
return NULL;
}
if (header.cbHeaderSize < sizeof(DETOUR_SECTION_HEADER) ||
header.nSignature != DETOUR_SECTION_HEADER_SIGNATURE) {
SetLastError(ERROR_EXE_MARKED_INVALID);
return NULL;
}
if (header.nDataOffset == 0) {
header.nDataOffset = header.cbHeaderSize;
}
for (PVOID pvSection = pbData + header.nDataOffset; pvSection < pbData + header.cbDataSize;) {
DETOUR_SECTION_RECORD section;
if (!ReadProcessMemory(hProcess, pvSection, §ion, sizeof(section), NULL)) {
DETOUR_TRACE(("ReadProcessMemory(dsr@%p..%p) failed: %lu\n",
pvSection,
(PBYTE)pvSection + sizeof(section),
GetLastError()));
return NULL;
}
if (DetourAreSameGuid(section.guid, rguid)) {
if (pcbData) {
*pcbData = section.cbBytes - sizeof(section);
}
SetLastError(NO_ERROR);
return (DETOUR_SECTION_RECORD *)pvSection + 1;
}
pvSection = (PBYTE)pvSection + section.cbBytes;
}
return NULL;
}
_Success_(return != NULL)
PVOID WINAPI DetourFindRemotePayload(_In_ HANDLE hProcess,
_In_ REFGUID rguid,
_Out_opt_ DWORD *pcbData)
{
if (hProcess == NULL) {
SetLastError(ERROR_INVALID_HANDLE);
return NULL;
}
IMAGE_NT_HEADERS32 header;
PVOID pvRemoteHeader;
for (HMODULE hMod = NULL; (hMod = EnumerateModulesInProcess(hProcess, hMod, &header, &pvRemoteHeader)) != NULL;) {
PVOID pvData = FindDetourSectionInRemoteModule(hProcess, hMod, &header, pvRemoteHeader);
if (pvData != NULL) {
pvData = FindPayloadInRemoteDetourSection(hProcess, rguid, pcbData, pvData);
if (pvData != NULL) {
return pvData;
}
}
}
SetLastError(ERROR_MOD_NOT_FOUND);
return NULL;
}
//////////////////////////////////////////////////////////////////////////////
//
// Find a region of memory in which we can create a replacement import table.
//
static PBYTE FindAndAllocateNearBase(HANDLE hProcess, PBYTE pbModule, PBYTE pbBase, DWORD cbAlloc)
{
MEMORY_BASIC_INFORMATION mbi;
ZeroMemory(&mbi, sizeof(mbi));
PBYTE pbLast = pbBase;
for (;; pbLast = (PBYTE)mbi.BaseAddress + mbi.RegionSize) {
ZeroMemory(&mbi, sizeof(mbi));
if (VirtualQueryEx(hProcess, (PVOID)pbLast, &mbi, sizeof(mbi)) == 0) {
if (GetLastError() == ERROR_INVALID_PARAMETER) {
break;
}
DETOUR_TRACE(("VirtualQueryEx(%p) failed: %lu\n",
pbLast, GetLastError()));
break;
}
// Usermode address space has such an unaligned region size always at the
// end and only at the end.
//
if ((mbi.RegionSize & 0xfff) == 0xfff) {
break;
}
// Skip anything other than a pure free region.
//
if (mbi.State != MEM_FREE) {
continue;
}
// Use the max of mbi.BaseAddress and pbBase, in case mbi.BaseAddress < pbBase.
PBYTE pbAddress = (PBYTE)mbi.BaseAddress > pbBase ? (PBYTE)mbi.BaseAddress : pbBase;
// Round pbAddress up to the nearest MM allocation boundary.
const DWORD_PTR mmGranularityMinusOne = (DWORD_PTR)(MM_ALLOCATION_GRANULARITY -1);
pbAddress = (PBYTE)(((DWORD_PTR)pbAddress + mmGranularityMinusOne) & ~mmGranularityMinusOne);
#ifdef _WIN64
// The offset from pbModule to any replacement import must fit into 32 bits.
// For simplicity, we check that the offset to the last byte fits into 32 bits,
// instead of the largest offset we'll actually use. The values are very similar.
const size_t GB4 = ((((size_t)1) << 32) - 1);
if ((size_t)(pbAddress + cbAlloc - 1 - pbModule) > GB4) {
DETOUR_TRACE(("FindAndAllocateNearBase(1) failing due to distance >4GB %p\n", pbAddress));
return NULL;
}
#else
UNREFERENCED_PARAMETER(pbModule);
#endif
DETOUR_TRACE(("Free region %p..%p\n",
mbi.BaseAddress,
(PBYTE)mbi.BaseAddress + mbi.RegionSize));
for (; pbAddress < (PBYTE)mbi.BaseAddress + mbi.RegionSize; pbAddress += MM_ALLOCATION_GRANULARITY) {
PBYTE pbAlloc = (PBYTE)VirtualAllocEx(hProcess, pbAddress, cbAlloc,
MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
if (pbAlloc == NULL) {
DETOUR_TRACE(("VirtualAllocEx(%p) failed: %lu\n", pbAddress, GetLastError()));
continue;
}
#ifdef _WIN64
// The offset from pbModule to any replacement import must fit into 32 bits.
if ((size_t)(pbAddress + cbAlloc - 1 - pbModule) > GB4) {
DETOUR_TRACE(("FindAndAllocateNearBase(2) failing due to distance >4GB %p\n", pbAddress));
return NULL;
}
#endif
DETOUR_TRACE(("[%p..%p] Allocated for import table.\n",
pbAlloc, pbAlloc + cbAlloc));
return pbAlloc;
}
}
return NULL;
}
static inline DWORD PadToDword(DWORD dw)
{
return (dw + 3) & ~3u;
}
static inline DWORD PadToDwordPtr(DWORD dw)
{
return (dw + 7) & ~7u;
}
static inline HRESULT ReplaceOptionalSizeA(_Inout_z_count_(cchDest) LPSTR pszDest,
_In_ size_t cchDest,
_In_z_ LPCSTR pszSize)
{
if (cchDest == 0 || pszDest == NULL || pszSize == NULL ||
pszSize[0] == '\0' || pszSize[1] == '\0' || pszSize[2] != '\0') {
// can not write into empty buffer or with string other than two chars.
return ERROR_INVALID_PARAMETER;
}
for (; cchDest >= 2; cchDest--, pszDest++) {
if (pszDest[0] == '?' && pszDest[1] == '?') {
pszDest[0] = pszSize[0];
pszDest[1] = pszSize[1];
break;
}
}
return S_OK;
}
static BOOL RecordExeRestore(HANDLE hProcess, HMODULE hModule, DETOUR_EXE_RESTORE& der)
{
// Save the various headers for DetourRestoreAfterWith.
ZeroMemory(&der, sizeof(der));
der.cb = sizeof(der);
der.pidh = (PBYTE)hModule;
der.cbidh = sizeof(der.idh);
if (!ReadProcessMemory(hProcess, der.pidh, &der.idh, sizeof(der.idh), NULL)) {
DETOUR_TRACE(("ReadProcessMemory(idh@%p..%p) failed: %lu\n",
der.pidh, der.pidh + der.cbidh, GetLastError()));
return FALSE;
}
DETOUR_TRACE(("IDH: %p..%p\n", der.pidh, der.pidh + der.cbidh));
// We read the NT header in two passes to get the full size.
// First we read just the Signature and FileHeader.
der.pinh = der.pidh + der.idh.e_lfanew;
der.cbinh = FIELD_OFFSET(IMAGE_NT_HEADERS, OptionalHeader);
if (!ReadProcessMemory(hProcess, der.pinh, &der.inh, der.cbinh, NULL)) {
DETOUR_TRACE(("ReadProcessMemory(inh@%p..%p) failed: %lu\n",
der.pinh, der.pinh + der.cbinh, GetLastError()));
return FALSE;
}
// Second we read the OptionalHeader and Section headers.
der.cbinh = (FIELD_OFFSET(IMAGE_NT_HEADERS, OptionalHeader) +
der.inh.FileHeader.SizeOfOptionalHeader +
der.inh.FileHeader.NumberOfSections * sizeof(IMAGE_SECTION_HEADER));
if (der.cbinh > sizeof(der.raw)) {
return FALSE;
}
if (!ReadProcessMemory(hProcess, der.pinh, &der.inh, der.cbinh, NULL)) {
DETOUR_TRACE(("ReadProcessMemory(inh@%p..%p) failed: %lu\n",
der.pinh, der.pinh + der.cbinh, GetLastError()));
return FALSE;
}
DETOUR_TRACE(("INH: %p..%p\n", der.pinh, der.pinh + der.cbinh));
// Third, we read the CLR header
if (der.inh.OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC) {
if (der.inh32.CLR_DIRECTORY.VirtualAddress != 0 &&
der.inh32.CLR_DIRECTORY.Size != 0) {
DETOUR_TRACE(("CLR32.VirtAddr=%08lx, CLR.Size=%lu\n",
der.inh32.CLR_DIRECTORY.VirtualAddress,
der.inh32.CLR_DIRECTORY.Size));
der.pclr = ((PBYTE)hModule) + der.inh32.CLR_DIRECTORY.VirtualAddress;
}
}
else if (der.inh.OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC) {
if (der.inh64.CLR_DIRECTORY.VirtualAddress != 0 &&
der.inh64.CLR_DIRECTORY.Size != 0) {
DETOUR_TRACE(("CLR64.VirtAddr=%08lx, CLR.Size=%lu\n",
der.inh64.CLR_DIRECTORY.VirtualAddress,
der.inh64.CLR_DIRECTORY.Size));
der.pclr = ((PBYTE)hModule) + der.inh64.CLR_DIRECTORY.VirtualAddress;
}
}
if (der.pclr != 0) {
der.cbclr = sizeof(der.clr);
if (!ReadProcessMemory(hProcess, der.pclr, &der.clr, der.cbclr, NULL)) {
DETOUR_TRACE(("ReadProcessMemory(clr@%p..%p) failed: %lu\n",
der.pclr, der.pclr + der.cbclr, GetLastError()));
return FALSE;
}
DETOUR_TRACE(("CLR: %p..%p\n", der.pclr, der.pclr + der.cbclr));
}
return TRUE;
}
//////////////////////////////////////////////////////////////////////////////
//
#if DETOURS_32BIT
#define DWORD_XX DWORD32
#define IMAGE_NT_HEADERS_XX IMAGE_NT_HEADERS32
#define IMAGE_NT_OPTIONAL_HDR_MAGIC_XX IMAGE_NT_OPTIONAL_HDR32_MAGIC
#define IMAGE_ORDINAL_FLAG_XX IMAGE_ORDINAL_FLAG32
#define IMAGE_THUNK_DATAXX IMAGE_THUNK_DATA32
#define UPDATE_IMPORTS_XX UpdateImports32
#define DETOURS_BITS_XX 32
#include "uimports.cpp"
#undef DETOUR_EXE_RESTORE_FIELD_XX
#undef DWORD_XX
#undef IMAGE_NT_HEADERS_XX
#undef IMAGE_NT_OPTIONAL_HDR_MAGIC_XX
#undef IMAGE_ORDINAL_FLAG_XX
#undef UPDATE_IMPORTS_XX
#endif // DETOURS_32BIT
#if DETOURS_64BIT
#define DWORD_XX DWORD64
#define IMAGE_NT_HEADERS_XX IMAGE_NT_HEADERS64
#define IMAGE_NT_OPTIONAL_HDR_MAGIC_XX IMAGE_NT_OPTIONAL_HDR64_MAGIC
#define IMAGE_ORDINAL_FLAG_XX IMAGE_ORDINAL_FLAG64
#define IMAGE_THUNK_DATAXX IMAGE_THUNK_DATA64
#define UPDATE_IMPORTS_XX UpdateImports64
#define DETOURS_BITS_XX 64
#include "uimports.cpp"
#undef DETOUR_EXE_RESTORE_FIELD_XX
#undef DWORD_XX
#undef IMAGE_NT_HEADERS_XX
#undef IMAGE_NT_OPTIONAL_HDR_MAGIC_XX
#undef IMAGE_ORDINAL_FLAG_XX
#undef UPDATE_IMPORTS_XX
#endif // DETOURS_64BIT
//////////////////////////////////////////////////////////////////////////////
//
#if DETOURS_64BIT
C_ASSERT(sizeof(IMAGE_NT_HEADERS64) == sizeof(IMAGE_NT_HEADERS32) + 16);
static BOOL UpdateFrom32To64(HANDLE hProcess, HMODULE hModule, WORD machine,
DETOUR_EXE_RESTORE& der)
{
IMAGE_DOS_HEADER idh;
IMAGE_NT_HEADERS32 inh32;
IMAGE_NT_HEADERS64 inh64;
IMAGE_SECTION_HEADER sects[32];
PBYTE pbModule = (PBYTE)hModule;
DWORD n;
ZeroMemory(&inh32, sizeof(inh32));
ZeroMemory(&inh64, sizeof(inh64));
ZeroMemory(sects, sizeof(sects));
DETOUR_TRACE(("UpdateFrom32To64(%04x)\n", machine));
//////////////////////////////////////////////////////// Read old headers.
//
if (!ReadProcessMemory(hProcess, pbModule, &idh, sizeof(idh), NULL)) {
DETOUR_TRACE(("ReadProcessMemory(idh@%p..%p) failed: %lu\n",
pbModule, pbModule + sizeof(idh), GetLastError()));
return FALSE;
}
DETOUR_TRACE(("ReadProcessMemory(idh@%p..%p)\n",
pbModule, pbModule + sizeof(idh)));
PBYTE pnh = pbModule + idh.e_lfanew;
if (!ReadProcessMemory(hProcess, pnh, &inh32, sizeof(inh32), NULL)) {
DETOUR_TRACE(("ReadProcessMemory(inh@%p..%p) failed: %lu\n",
pnh, pnh + sizeof(inh32), GetLastError()));
return FALSE;
}
DETOUR_TRACE(("ReadProcessMemory(inh@%p..%p)\n", pnh, pnh + sizeof(inh32)));
if (inh32.FileHeader.NumberOfSections > (sizeof(sects)/sizeof(sects[0]))) {
return FALSE;
}
PBYTE psects = pnh +
FIELD_OFFSET(IMAGE_NT_HEADERS, OptionalHeader) +
inh32.FileHeader.SizeOfOptionalHeader;
ULONG cb = inh32.FileHeader.NumberOfSections * sizeof(IMAGE_SECTION_HEADER);
if (!ReadProcessMemory(hProcess, psects, §s, cb, NULL)) {
DETOUR_TRACE(("ReadProcessMemory(ish@%p..%p) failed: %lu\n",
psects, psects + cb, GetLastError()));
return FALSE;
}
DETOUR_TRACE(("ReadProcessMemory(ish@%p..%p)\n", psects, psects + cb));
////////////////////////////////////////////////////////// Convert header.
//
inh64.Signature = inh32.Signature;
inh64.FileHeader = inh32.FileHeader;
inh64.FileHeader.Machine = machine;
inh64.FileHeader.SizeOfOptionalHeader = sizeof(IMAGE_OPTIONAL_HEADER64);
inh64.OptionalHeader.Magic = IMAGE_NT_OPTIONAL_HDR64_MAGIC;
inh64.OptionalHeader.MajorLinkerVersion = inh32.OptionalHeader.MajorLinkerVersion;
inh64.OptionalHeader.MinorLinkerVersion = inh32.OptionalHeader.MinorLinkerVersion;
inh64.OptionalHeader.SizeOfCode = inh32.OptionalHeader.SizeOfCode;
inh64.OptionalHeader.SizeOfInitializedData = inh32.OptionalHeader.SizeOfInitializedData;
inh64.OptionalHeader.SizeOfUninitializedData = inh32.OptionalHeader.SizeOfUninitializedData;
inh64.OptionalHeader.AddressOfEntryPoint = inh32.OptionalHeader.AddressOfEntryPoint;
inh64.OptionalHeader.BaseOfCode = inh32.OptionalHeader.BaseOfCode;
inh64.OptionalHeader.ImageBase = inh32.OptionalHeader.ImageBase;
inh64.OptionalHeader.SectionAlignment = inh32.OptionalHeader.SectionAlignment;
inh64.OptionalHeader.FileAlignment = inh32.OptionalHeader.FileAlignment;
inh64.OptionalHeader.MajorOperatingSystemVersion
= inh32.OptionalHeader.MajorOperatingSystemVersion;
inh64.OptionalHeader.MinorOperatingSystemVersion
= inh32.OptionalHeader.MinorOperatingSystemVersion;
inh64.OptionalHeader.MajorImageVersion = inh32.OptionalHeader.MajorImageVersion;
inh64.OptionalHeader.MinorImageVersion = inh32.OptionalHeader.MinorImageVersion;
inh64.OptionalHeader.MajorSubsystemVersion = inh32.OptionalHeader.MajorSubsystemVersion;
inh64.OptionalHeader.MinorSubsystemVersion = inh32.OptionalHeader.MinorSubsystemVersion;
inh64.OptionalHeader.Win32VersionValue = inh32.OptionalHeader.Win32VersionValue;
inh64.OptionalHeader.SizeOfImage = inh32.OptionalHeader.SizeOfImage;
inh64.OptionalHeader.SizeOfHeaders = inh32.OptionalHeader.SizeOfHeaders;
inh64.OptionalHeader.CheckSum = inh32.OptionalHeader.CheckSum;
inh64.OptionalHeader.Subsystem = inh32.OptionalHeader.Subsystem;
inh64.OptionalHeader.DllCharacteristics = inh32.OptionalHeader.DllCharacteristics;
inh64.OptionalHeader.SizeOfStackReserve = inh32.OptionalHeader.SizeOfStackReserve;
inh64.OptionalHeader.SizeOfStackCommit = inh32.OptionalHeader.SizeOfStackCommit;
inh64.OptionalHeader.SizeOfHeapReserve = inh32.OptionalHeader.SizeOfHeapReserve;
inh64.OptionalHeader.SizeOfHeapCommit = inh32.OptionalHeader.SizeOfHeapCommit;
inh64.OptionalHeader.LoaderFlags = inh32.OptionalHeader.LoaderFlags;
inh64.OptionalHeader.NumberOfRvaAndSizes = inh32.OptionalHeader.NumberOfRvaAndSizes;
for (n = 0; n < IMAGE_NUMBEROF_DIRECTORY_ENTRIES; n++) {
inh64.OptionalHeader.DataDirectory[n] = inh32.OptionalHeader.DataDirectory[n];
}
/////////////////////////////////////////////////////// Write new headers.
//
DWORD dwProtect = 0;
if (!DetourVirtualProtectSameExecuteEx(hProcess, pbModule, inh64.OptionalHeader.SizeOfHeaders,
PAGE_EXECUTE_READWRITE, &dwProtect)) {
return FALSE;
}
if (!WriteProcessMemory(hProcess, pnh, &inh64, sizeof(inh64), NULL)) {
DETOUR_TRACE(("WriteProcessMemory(inh@%p..%p) failed: %lu\n",
pnh, pnh + sizeof(inh64), GetLastError()));
return FALSE;
}
DETOUR_TRACE(("WriteProcessMemory(inh@%p..%p)\n", pnh, pnh + sizeof(inh64)));
psects = pnh +
FIELD_OFFSET(IMAGE_NT_HEADERS, OptionalHeader) +
inh64.FileHeader.SizeOfOptionalHeader;
cb = inh64.FileHeader.NumberOfSections * sizeof(IMAGE_SECTION_HEADER);
if (!WriteProcessMemory(hProcess, psects, §s, cb, NULL)) {
DETOUR_TRACE(("WriteProcessMemory(ish@%p..%p) failed: %lu\n",
psects, psects + cb, GetLastError()));
return FALSE;
}
DETOUR_TRACE(("WriteProcessMemory(ish@%p..%p)\n", psects, psects + cb));
// Record the updated headers.
if (!RecordExeRestore(hProcess, hModule, der)) {
return FALSE;
}
// Remove the import table.
if (der.pclr != NULL && (der.clr.Flags & COMIMAGE_FLAGS_ILONLY)) {
inh64.IMPORT_DIRECTORY.VirtualAddress = 0;
inh64.IMPORT_DIRECTORY.Size = 0;
if (!WriteProcessMemory(hProcess, pnh, &inh64, sizeof(inh64), NULL)) {
DETOUR_TRACE(("WriteProcessMemory(inh@%p..%p) failed: %lu\n",
pnh, pnh + sizeof(inh64), GetLastError()));
return FALSE;
}
}
DWORD dwOld = 0;
if (!VirtualProtectEx(hProcess, pbModule, inh64.OptionalHeader.SizeOfHeaders,
dwProtect, &dwOld)) {
return FALSE;
}
return TRUE;
}
#endif // DETOURS_64BIT
typedef BOOL(WINAPI *LPFN_ISWOW64PROCESS)(HANDLE, PBOOL);
static BOOL IsWow64ProcessHelper(HANDLE hProcess,
PBOOL Wow64Process)
{
#ifdef _X86_
if (Wow64Process == NULL) {
return FALSE;
}
// IsWow64Process is not available on all supported versions of Windows.
//
HMODULE hKernel32 = LoadLibraryW(L"KERNEL32.DLL");
if (hKernel32 == NULL) {
DETOUR_TRACE(("LoadLibraryW failed: %lu\n", GetLastError()));
return FALSE;
}
LPFN_ISWOW64PROCESS pfnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(
hKernel32, "IsWow64Process");
if (pfnIsWow64Process == NULL) {
DETOUR_TRACE(("GetProcAddress failed: %lu\n", GetLastError()));
return FALSE;
}
return pfnIsWow64Process(hProcess, Wow64Process);
#else
return IsWow64Process(hProcess, Wow64Process);
#endif
}
//////////////////////////////////////////////////////////////////////////////
//
BOOL WINAPI DetourUpdateProcessWithDll(_In_ HANDLE hProcess,
_In_reads_(nDlls) LPCSTR *rlpDlls,
_In_ DWORD nDlls)
{
// Find the next memory region that contains a mapped PE image.
//
BOOL bIs32BitProcess;
BOOL bIs64BitOS = FALSE;
HMODULE hModule = NULL;
HMODULE hLast = NULL;
DETOUR_TRACE(("DetourUpdateProcessWithDll(%p,dlls=%lu)\n", hProcess, nDlls));
for (;;) {
IMAGE_NT_HEADERS32 inh;
if ((hLast = EnumerateModulesInProcess(hProcess, hLast, &inh, NULL)) == NULL) {
break;
}
DETOUR_TRACE(("%p machine=%04x magic=%04x\n",
hLast, inh.FileHeader.Machine, inh.OptionalHeader.Magic));
if ((inh.FileHeader.Characteristics & IMAGE_FILE_DLL) == 0) {
hModule = hLast;
DETOUR_TRACE(("%p Found EXE\n", hLast));
}
}
if (hModule == NULL) {
SetLastError(ERROR_INVALID_OPERATION);
return FALSE;
}
// Determine if the target process is 32bit or 64bit. This is a two-stop process:
//
// 1. First, determine if we're running on a 64bit operating system.
// - If we're running 64bit code (i.e. _WIN64 is defined), this is trivially true.
// - If we're running 32bit code (i.e. _WIN64 is not defined), test if
// we're running under Wow64. If so, it implies that the operating system
// is 64bit.
//
#ifdef _WIN64
bIs64BitOS = TRUE;
#else
if (!IsWow64ProcessHelper(GetCurrentProcess(), &bIs64BitOS)) {
return FALSE;
}
#endif
// 2. With the operating system bitness known, we can now consider the target process:
// - If we're running on a 64bit OS, the target process is 32bit in case
// it is running under Wow64. Otherwise, it's 64bit, running natively
// (without Wow64).
// - If we're running on a 32bit OS, the target process must be 32bit, too.
//
if (bIs64BitOS) {
if (!IsWow64ProcessHelper(hProcess, &bIs32BitProcess)) {
return FALSE;
}
} else {
bIs32BitProcess = TRUE;
}
DETOUR_TRACE((" 32BitProcess=%d\n", bIs32BitProcess));
return DetourUpdateProcessWithDllEx(hProcess,
hModule,
bIs32BitProcess,
rlpDlls,
nDlls);
}
BOOL WINAPI DetourUpdateProcessWithDllEx(_In_ HANDLE hProcess,
_In_ HMODULE hModule,
_In_ BOOL bIs32BitProcess,
_In_reads_(nDlls) LPCSTR *rlpDlls,
_In_ DWORD nDlls)
{
// Find the next memory region that contains a mapped PE image.
//
BOOL bIs32BitExe = FALSE;
DETOUR_TRACE(("DetourUpdateProcessWithDllEx(%p,%p,dlls=%lu)\n", hProcess, hModule, nDlls));
IMAGE_NT_HEADERS32 inh;
if (hModule == NULL || !LoadNtHeaderFromProcess(hProcess, hModule, &inh)) {
SetLastError(ERROR_INVALID_OPERATION);
return FALSE;
}
if (inh.OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC
&& inh.FileHeader.Machine != 0) {
bIs32BitExe = TRUE;
}
DETOUR_TRACE((" 32BitExe=%d\n", bIs32BitExe));
if (hModule == NULL) {
SetLastError(ERROR_INVALID_OPERATION);
return FALSE;
}
// Save the various headers for DetourRestoreAfterWith.
//
DETOUR_EXE_RESTORE der;
if (!RecordExeRestore(hProcess, hModule, der)) {
return FALSE;
}
#if defined(DETOURS_64BIT)
// Try to convert a neutral 32-bit managed binary to a 64-bit managed binary.
if (bIs32BitExe && !bIs32BitProcess) {
if (!der.pclr // Native binary
|| (der.clr.Flags & COMIMAGE_FLAGS_ILONLY) == 0 // Or mixed-mode MSIL
|| (der.clr.Flags & COMIMAGE_FLAGS_32BITREQUIRED) != 0) { // Or 32BIT Required MSIL
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
if (!UpdateFrom32To64(hProcess, hModule,
#if defined(DETOURS_X64)
IMAGE_FILE_MACHINE_AMD64,
#elif defined(DETOURS_IA64)
IMAGE_FILE_MACHINE_IA64,
#elif defined(DETOURS_ARM64)
IMAGE_FILE_MACHINE_ARM64,
#else
#error Must define one of DETOURS_X64 or DETOURS_IA64 or DETOURS_ARM64 on 64-bit.
#endif
der)) {
return FALSE;
}
bIs32BitExe = FALSE;
}
#endif // DETOURS_64BIT
// Now decide if we can insert the detour.
#if defined(DETOURS_32BIT)
if (bIs32BitProcess) {
// 32-bit native or 32-bit managed process on any platform.
if (!UpdateImports32(hProcess, hModule, rlpDlls, nDlls)) {
return FALSE;
}
}
else {
// 64-bit native or 64-bit managed process.
//
// Can't detour a 64-bit process with 32-bit code.
// Note: This happens for 32-bit PE binaries containing only
// manage code that have been marked as 64-bit ready.
//
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
#elif defined(DETOURS_64BIT)
if (bIs32BitProcess || bIs32BitExe) {
// Can't detour a 32-bit process with 64-bit code.
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
else {
// 64-bit native or 64-bit managed process on any platform.
if (!UpdateImports64(hProcess, hModule, rlpDlls, nDlls)) {
return FALSE;
}
}
#else
#pragma Must define one of DETOURS_32BIT or DETOURS_64BIT.
#endif // DETOURS_64BIT
/////////////////////////////////////////////////// Update the CLR header.
//
if (der.pclr != NULL) {
DETOUR_CLR_HEADER clr;
CopyMemory(&clr, &der.clr, sizeof(clr));
clr.Flags &= ~COMIMAGE_FLAGS_ILONLY; // Clear the IL_ONLY flag.
DWORD dwProtect;
if (!DetourVirtualProtectSameExecuteEx(hProcess, der.pclr, sizeof(clr), PAGE_READWRITE, &dwProtect)) {
DETOUR_TRACE(("VirtualProtectEx(clr) write failed: %lu\n", GetLastError()));
return FALSE;
}
if (!WriteProcessMemory(hProcess, der.pclr, &clr, sizeof(clr), NULL)) {
DETOUR_TRACE(("WriteProcessMemory(clr) failed: %lu\n", GetLastError()));
return FALSE;
}
if (!VirtualProtectEx(hProcess, der.pclr, sizeof(clr), dwProtect, &dwProtect)) {
DETOUR_TRACE(("VirtualProtectEx(clr) restore failed: %lu\n", GetLastError()));
return FALSE;
}
DETOUR_TRACE(("CLR: %p..%p\n", der.pclr, der.pclr + der.cbclr));
#if DETOURS_64BIT
if (der.clr.Flags & COMIMAGE_FLAGS_32BITREQUIRED) { // Is the 32BIT Required Flag set?
// X64 never gets here because the process appears as a WOW64 process.
// However, on IA64, it doesn't appear to be a WOW process.
DETOUR_TRACE(("CLR Requires 32-bit\n"));
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
#endif // DETOURS_64BIT
}
//////////////////////////////// Save the undo data to the target process.
//
if (!DetourCopyPayloadToProcess(hProcess, DETOUR_EXE_RESTORE_GUID, &der, sizeof(der))) {
DETOUR_TRACE(("DetourCopyPayloadToProcess failed: %lu\n", GetLastError()));
return FALSE;
}
return TRUE;
}
//////////////////////////////////////////////////////////////////////////////
//
BOOL WINAPI DetourCreateProcessWithDllA(_In_opt_ LPCSTR lpApplicationName,
_Inout_opt_ LPSTR lpCommandLine,
_In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,
_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ BOOL bInheritHandles,
_In_ DWORD dwCreationFlags,
_In_opt_ LPVOID lpEnvironment,
_In_opt_ LPCSTR lpCurrentDirectory,
_In_ LPSTARTUPINFOA lpStartupInfo,
_Out_ LPPROCESS_INFORMATION lpProcessInformation,
_In_ LPCSTR lpDllName,
_In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEA pfCreateProcessA)
{
DWORD dwMyCreationFlags = (dwCreationFlags | CREATE_SUSPENDED);
PROCESS_INFORMATION pi;
BOOL fResult = FALSE;
if (pfCreateProcessA == NULL) {
pfCreateProcessA = CreateProcessA;
}
fResult = pfCreateProcessA(lpApplicationName,
lpCommandLine,
lpProcessAttributes,
lpThreadAttributes,
bInheritHandles,
dwMyCreationFlags,
lpEnvironment,
lpCurrentDirectory,
lpStartupInfo,
&pi);
if (lpProcessInformation != NULL) {
CopyMemory(lpProcessInformation, &pi, sizeof(pi));
}
if (!fResult) {
return FALSE;
}
LPCSTR rlpDlls[2];
DWORD nDlls = 0;
if (lpDllName != NULL) {
rlpDlls[nDlls++] = lpDllName;
}
if (!DetourUpdateProcessWithDll(pi.hProcess, rlpDlls, nDlls)) {
TerminateProcess(pi.hProcess, ~0u);
return FALSE;
}
if (!(dwCreationFlags & CREATE_SUSPENDED)) {
ResumeThread(pi.hThread);
}
return TRUE;
}
BOOL WINAPI DetourCreateProcessWithDllW(_In_opt_ LPCWSTR lpApplicationName,
_Inout_opt_ LPWSTR lpCommandLine,
_In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,
_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ BOOL bInheritHandles,
_In_ DWORD dwCreationFlags,
_In_opt_ LPVOID lpEnvironment,
_In_opt_ LPCWSTR lpCurrentDirectory,
_In_ LPSTARTUPINFOW lpStartupInfo,
_Out_ LPPROCESS_INFORMATION lpProcessInformation,
_In_ LPCSTR lpDllName,
_In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEW pfCreateProcessW)
{
DWORD dwMyCreationFlags = (dwCreationFlags | CREATE_SUSPENDED);
PROCESS_INFORMATION pi;
if (pfCreateProcessW == NULL) {
pfCreateProcessW = CreateProcessW;
}
BOOL fResult = pfCreateProcessW(lpApplicationName,
lpCommandLine,
lpProcessAttributes,
lpThreadAttributes,
bInheritHandles,
dwMyCreationFlags,
lpEnvironment,
lpCurrentDirectory,
lpStartupInfo,
&pi);
if (lpProcessInformation) {
CopyMemory(lpProcessInformation, &pi, sizeof(pi));
}
if (!fResult) {
return FALSE;
}
LPCSTR rlpDlls[2];
DWORD nDlls = 0;
if (lpDllName != NULL) {
rlpDlls[nDlls++] = lpDllName;
}
if (!DetourUpdateProcessWithDll(pi.hProcess, rlpDlls, nDlls)) {
TerminateProcess(pi.hProcess, ~0u);
return FALSE;
}
if (!(dwCreationFlags & CREATE_SUSPENDED)) {
ResumeThread(pi.hThread);
}
return TRUE;
}
BOOL WINAPI DetourCopyPayloadToProcess(_In_ HANDLE hProcess,
_In_ REFGUID rguid,
_In_reads_bytes_(cbData) LPCVOID pvData,
_In_ DWORD cbData)
{
return DetourCopyPayloadToProcessEx(hProcess, rguid, pvData, cbData) != NULL;
}
_Success_(return != NULL)
PVOID WINAPI DetourCopyPayloadToProcessEx(_In_ HANDLE hProcess,
_In_ REFGUID rguid,
_In_reads_bytes_(cbData) LPCVOID pvData,
_In_ DWORD cbData)
{
if (hProcess == NULL) {
SetLastError(ERROR_INVALID_HANDLE);
return NULL;
}
DWORD cbTotal = (sizeof(IMAGE_DOS_HEADER) +
sizeof(IMAGE_NT_HEADERS) +
sizeof(IMAGE_SECTION_HEADER) +
sizeof(DETOUR_SECTION_HEADER) +
sizeof(DETOUR_SECTION_RECORD) +
cbData);
PBYTE pbBase = (PBYTE)VirtualAllocEx(hProcess, NULL, cbTotal,
MEM_COMMIT, PAGE_READWRITE);
if (pbBase == NULL) {
DETOUR_TRACE(("VirtualAllocEx(%lu) failed: %lu\n", cbTotal, GetLastError()));
return NULL;
}
// As you can see in the following code,
// the memory layout of the payload range "[pbBase, pbBase+cbTotal]" is a PE executable file,
// so DetourFreePayload can use "DetourGetContainingModule(Payload pointer)" to get the above "pbBase" pointer,
// pbBase: the memory block allocated by VirtualAllocEx will be released in DetourFreePayload by VirtualFree.
PBYTE pbTarget = pbBase;
IMAGE_DOS_HEADER idh;
IMAGE_NT_HEADERS inh;
IMAGE_SECTION_HEADER ish;
DETOUR_SECTION_HEADER dsh;
DETOUR_SECTION_RECORD dsr;
SIZE_T cbWrote = 0;
ZeroMemory(&idh, sizeof(idh));
idh.e_magic = IMAGE_DOS_SIGNATURE;
idh.e_lfanew = sizeof(idh);
if (!WriteProcessMemory(hProcess, pbTarget, &idh, sizeof(idh), &cbWrote) ||
cbWrote != sizeof(idh)) {
DETOUR_TRACE(("WriteProcessMemory(idh) failed: %lu\n", GetLastError()));
return NULL;
}
pbTarget += sizeof(idh);
ZeroMemory(&inh, sizeof(inh));
inh.Signature = IMAGE_NT_SIGNATURE;
inh.FileHeader.SizeOfOptionalHeader = sizeof(inh.OptionalHeader);
inh.FileHeader.Characteristics = IMAGE_FILE_DLL;
inh.FileHeader.NumberOfSections = 1;
inh.OptionalHeader.Magic = IMAGE_NT_OPTIONAL_HDR_MAGIC;
if (!WriteProcessMemory(hProcess, pbTarget, &inh, sizeof(inh), &cbWrote) ||
cbWrote != sizeof(inh)) {
return NULL;
}
pbTarget += sizeof(inh);
ZeroMemory(&ish, sizeof(ish));
memcpy(ish.Name, ".detour", sizeof(ish.Name));
ish.VirtualAddress = (DWORD)((pbTarget + sizeof(ish)) - pbBase);
ish.SizeOfRawData = (sizeof(DETOUR_SECTION_HEADER) +
sizeof(DETOUR_SECTION_RECORD) +
cbData);
if (!WriteProcessMemory(hProcess, pbTarget, &ish, sizeof(ish), &cbWrote) ||
cbWrote != sizeof(ish)) {
return NULL;
}
pbTarget += sizeof(ish);
ZeroMemory(&dsh, sizeof(dsh));
dsh.cbHeaderSize = sizeof(dsh);
dsh.nSignature = DETOUR_SECTION_HEADER_SIGNATURE;
dsh.nDataOffset = sizeof(DETOUR_SECTION_HEADER);
dsh.cbDataSize = (sizeof(DETOUR_SECTION_HEADER) +
sizeof(DETOUR_SECTION_RECORD) +
cbData);
if (!WriteProcessMemory(hProcess, pbTarget, &dsh, sizeof(dsh), &cbWrote) ||
cbWrote != sizeof(dsh)) {
return NULL;
}
pbTarget += sizeof(dsh);
ZeroMemory(&dsr, sizeof(dsr));
dsr.cbBytes = cbData + sizeof(DETOUR_SECTION_RECORD);
dsr.nReserved = 0;
dsr.guid = rguid;
if (!WriteProcessMemory(hProcess, pbTarget, &dsr, sizeof(dsr), &cbWrote) ||
cbWrote != sizeof(dsr)) {
return NULL;
}
pbTarget += sizeof(dsr);
if (!WriteProcessMemory(hProcess, pbTarget, pvData, cbData, &cbWrote) ||
cbWrote != cbData) {
return NULL;
}
DETOUR_TRACE(("Copied %lu byte payload into target process at %p\n",
cbData, pbTarget));
SetLastError(NO_ERROR);
return pbTarget;
}
static BOOL s_fSearchedForHelper = FALSE;
static PDETOUR_EXE_HELPER s_pHelper = NULL;
VOID CALLBACK DetourFinishHelperProcess(_In_ HWND,
_In_ HINSTANCE,
_In_ LPSTR,
_In_ INT)
{
LPCSTR * rlpDlls = NULL;
DWORD Result = 9900;
DWORD cOffset = 0;
DWORD cSize = 0;
HANDLE hProcess = NULL;
if (s_pHelper == NULL) {
DETOUR_TRACE(("DetourFinishHelperProcess called with s_pHelper = NULL.\n"));
Result = 9905;
goto Cleanup;
}
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, s_pHelper->pid);
if (hProcess == NULL) {
DETOUR_TRACE(("OpenProcess(pid=%lu) failed: %lu\n",
s_pHelper->pid, GetLastError()));
Result = 9901;
goto Cleanup;
}
rlpDlls = new NOTHROW LPCSTR [s_pHelper->nDlls];
cSize = s_pHelper->cb - sizeof(DETOUR_EXE_HELPER);
for (DWORD n = 0; n < s_pHelper->nDlls; n++) {
size_t cchDest = 0;
HRESULT hr = StringCchLengthA(&s_pHelper->rDlls[cOffset], cSize - cOffset, &cchDest);
if (!SUCCEEDED(hr)) {
Result = 9902;
goto Cleanup;
}
rlpDlls[n] = &s_pHelper->rDlls[cOffset];
cOffset += (DWORD)cchDest + 1;
}
if (!DetourUpdateProcessWithDll(hProcess, rlpDlls, s_pHelper->nDlls)) {
DETOUR_TRACE(("DetourUpdateProcessWithDll(pid=%lu) failed: %lu\n",
s_pHelper->pid, GetLastError()));
Result = 9903;
goto Cleanup;
}
Result = 0;
Cleanup:
if (rlpDlls != NULL) {
delete[] rlpDlls;
rlpDlls = NULL;
}
// Note: s_pHelper is allocated as part of injecting the payload in DetourCopyPayloadToProcess(..),
// it's a fake section and not data allocated by the system PE loader.
// Delete the payload after execution to release the memory occupied by it
if (s_pHelper != NULL) {
DetourFreePayload(s_pHelper);
s_pHelper = NULL;
}
ExitProcess(Result);
}
BOOL WINAPI DetourIsHelperProcess(VOID)
{
PVOID pvData;
DWORD cbData;
if (s_fSearchedForHelper) {
return (s_pHelper != NULL);
}
s_fSearchedForHelper = TRUE;
pvData = DetourFindPayloadEx(DETOUR_EXE_HELPER_GUID, &cbData);
if (pvData == NULL || cbData < sizeof(DETOUR_EXE_HELPER)) {
return FALSE;
}
s_pHelper = (PDETOUR_EXE_HELPER)pvData;
if (s_pHelper->cb < sizeof(*s_pHelper)) {
s_pHelper = NULL;
return FALSE;
}
return TRUE;
}
static
BOOL WINAPI AllocExeHelper(_Out_ PDETOUR_EXE_HELPER *pHelper,
_In_ DWORD dwTargetPid,
_In_ DWORD nDlls,
_In_reads_(nDlls) LPCSTR *rlpDlls)
{
PDETOUR_EXE_HELPER Helper = NULL;
BOOL Result = FALSE;
_Field_range_(0, cSize - 4) DWORD cOffset = 0;
DWORD cSize = 4;
if (pHelper == NULL) {
goto Cleanup;
}
*pHelper = NULL;
if (nDlls < 1 || nDlls > 4096) {
SetLastError(ERROR_INVALID_PARAMETER);
goto Cleanup;
}
for (DWORD n = 0; n < nDlls; n++) {
HRESULT hr;
size_t cchDest = 0;
hr = StringCchLengthA(rlpDlls[n], 4096, &cchDest);
if (!SUCCEEDED(hr)) {
goto Cleanup;
}
cSize += (DWORD)cchDest + 1;
}
Helper = (PDETOUR_EXE_HELPER) new NOTHROW BYTE[sizeof(DETOUR_EXE_HELPER) + cSize];
if (Helper == NULL) {
goto Cleanup;
}
Helper->cb = sizeof(DETOUR_EXE_HELPER) + cSize;
Helper->pid = dwTargetPid;
Helper->nDlls = nDlls;
for (DWORD n = 0; n < nDlls; n++) {
HRESULT hr;
size_t cchDest = 0;
if (cOffset > 0x10000 || cSize > 0x10000 || cOffset + 2 >= cSize) {
goto Cleanup;
}
if (cOffset + 2 >= cSize || cOffset + 65536 < cSize) {
goto Cleanup;
}
_Analysis_assume_(cOffset + 1 < cSize);
_Analysis_assume_(cOffset < 0x10000);
_Analysis_assume_(cSize < 0x10000);
PCHAR psz = &Helper->rDlls[cOffset];
hr = StringCchCopyA(psz, cSize - cOffset, rlpDlls[n]);
if (!SUCCEEDED(hr)) {
goto Cleanup;
}
// REVIEW 28020 The expression '1<=_Param_(2)& &_Param_(2)<=2147483647' is not true at this call.
// REVIEW 28313 Analysis will not proceed past this point because of annotation evaluation. The annotation expression *_Param_(3)<_Param_(2)&&*_Param_(3)<=stringLength$(_Param_(1)) cannot be true under any assumptions at this point in the program.
#pragma warning(suppress:28020 28313)
hr = StringCchLengthA(psz, cSize - cOffset, &cchDest);
if (!SUCCEEDED(hr)) {
goto Cleanup;
}
// Replace "32." with "64." or "64." with "32."
for (DWORD c = (DWORD)cchDest + 1; c > 3; c--) {
#if DETOURS_32BIT
if (psz[c - 3] == '3' && psz[c - 2] == '2' && psz[c - 1] == '.') {
psz[c - 3] = '6'; psz[c - 2] = '4';
break;
}
#else
if (psz[c - 3] == '6' && psz[c - 2] == '4' && psz[c - 1] == '.') {
psz[c - 3] = '3'; psz[c - 2] = '2';
break;
}
#endif
}
cOffset += (DWORD)cchDest + 1;
}
*pHelper = Helper;
Helper = NULL;
Result = TRUE;
Cleanup:
if (Helper != NULL) {
delete[] (PBYTE)Helper;
Helper = NULL;
}
return Result;
}
static
VOID WINAPI FreeExeHelper(PDETOUR_EXE_HELPER *pHelper)
{
if (*pHelper != NULL) {
delete[] (PBYTE)*pHelper;
*pHelper = NULL;
}
}
BOOL WINAPI DetourProcessViaHelperA(_In_ DWORD dwTargetPid,
_In_ LPCSTR lpDllName,
_In_ PDETOUR_CREATE_PROCESS_ROUTINEA pfCreateProcessA)
{
return DetourProcessViaHelperDllsA(dwTargetPid, 1, &lpDllName, pfCreateProcessA);
}
BOOL WINAPI DetourProcessViaHelperDllsA(_In_ DWORD dwTargetPid,
_In_ DWORD nDlls,
_In_reads_(nDlls) LPCSTR *rlpDlls,
_In_ PDETOUR_CREATE_PROCESS_ROUTINEA pfCreateProcessA)
{
BOOL Result = FALSE;
PROCESS_INFORMATION pi;
STARTUPINFOA si;
CHAR szExe[MAX_PATH];
CHAR szCommand[MAX_PATH];
PDETOUR_EXE_HELPER helper = NULL;
HRESULT hr;
DWORD nLen = GetEnvironmentVariableA("WINDIR", szExe, ARRAYSIZE(szExe));
DETOUR_TRACE(("DetourProcessViaHelperDlls(pid=%lu,dlls=%lu)\n", dwTargetPid, nDlls));
if (nDlls < 1 || nDlls > 4096) {
SetLastError(ERROR_INVALID_PARAMETER);
goto Cleanup;
}
if (!AllocExeHelper(&helper, dwTargetPid, nDlls, rlpDlls)) {
goto Cleanup;
}
if (nLen == 0 || nLen >= ARRAYSIZE(szExe)) {
goto Cleanup;
}
#if DETOURS_OPTION_BITS
#if DETOURS_32BIT
hr = StringCchCatA(szExe, ARRAYSIZE(szExe), "\\sysnative\\rundll32.exe");
#else // !DETOURS_32BIT
hr = StringCchCatA(szExe, ARRAYSIZE(szExe), "\\syswow64\\rundll32.exe");
#endif // !DETOURS_32BIT
#else // DETOURS_OPTIONS_BITS
hr = StringCchCatA(szExe, ARRAYSIZE(szExe), "\\system32\\rundll32.exe");
#endif // DETOURS_OPTIONS_BITS
if (!SUCCEEDED(hr)) {
goto Cleanup;
}
//for East Asia languages and so on, like Chinese, print format with "%hs" can not work fine before user call _tsetlocale(LC_ALL,_T(".ACP"));
//so we can't use "%hs" in format string, because the dll that contain this code would inject to any process, even not call _tsetlocale(LC_ALL,_T(".ACP")) before
hr = StringCchPrintfA(szCommand, ARRAYSIZE(szCommand),
"rundll32.exe \"%s\",#1", &helper->rDlls[0]);
if (!SUCCEEDED(hr)) {
goto Cleanup;
}
ZeroMemory(&pi, sizeof(pi));
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
DETOUR_TRACE(("DetourProcessViaHelperDlls(\"%hs\", \"%hs\")\n", szExe, szCommand));
if (pfCreateProcessA(szExe, szCommand, NULL, NULL, FALSE, CREATE_SUSPENDED,
NULL, NULL, &si, &pi)) {
if (!DetourCopyPayloadToProcess(pi.hProcess,
DETOUR_EXE_HELPER_GUID,
helper, helper->cb)) {
DETOUR_TRACE(("DetourCopyPayloadToProcess failed: %lu\n", GetLastError()));
TerminateProcess(pi.hProcess, ~0u);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
goto Cleanup;
}
ResumeThread(pi.hThread);
WaitForSingleObject(pi.hProcess, INFINITE);
DWORD dwResult = 500;
GetExitCodeProcess(pi.hProcess, &dwResult);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
if (dwResult != 0) {
DETOUR_TRACE(("Rundll32.exe failed: result=%lu\n", dwResult));
goto Cleanup;
}
Result = TRUE;
}
else {
DETOUR_TRACE(("CreateProcess failed: %lu\n", GetLastError()));
goto Cleanup;
}
Cleanup:
FreeExeHelper(&helper);
return Result;
}
BOOL WINAPI DetourProcessViaHelperW(_In_ DWORD dwTargetPid,
_In_ LPCSTR lpDllName,
_In_ PDETOUR_CREATE_PROCESS_ROUTINEW pfCreateProcessW)
{
return DetourProcessViaHelperDllsW(dwTargetPid, 1, &lpDllName, pfCreateProcessW);
}
BOOL WINAPI DetourProcessViaHelperDllsW(_In_ DWORD dwTargetPid,
_In_ DWORD nDlls,
_In_reads_(nDlls) LPCSTR *rlpDlls,
_In_ PDETOUR_CREATE_PROCESS_ROUTINEW pfCreateProcessW)
{
BOOL Result = FALSE;
PROCESS_INFORMATION pi;
STARTUPINFOW si;
WCHAR szExe[MAX_PATH];
WCHAR szCommand[MAX_PATH];
PDETOUR_EXE_HELPER helper = NULL;
HRESULT hr;
WCHAR szDllName[MAX_PATH];
int cchWrittenWideChar;
DWORD nLen = GetEnvironmentVariableW(L"WINDIR", szExe, ARRAYSIZE(szExe));
DETOUR_TRACE(("DetourProcessViaHelperDlls(pid=%lu,dlls=%lu)\n", dwTargetPid, nDlls));
if (nDlls < 1 || nDlls > 4096) {
SetLastError(ERROR_INVALID_PARAMETER);
goto Cleanup;
}
if (!AllocExeHelper(&helper, dwTargetPid, nDlls, rlpDlls)) {
goto Cleanup;
}
if (nLen == 0 || nLen >= ARRAYSIZE(szExe)) {
goto Cleanup;
}
#if DETOURS_OPTION_BITS
#if DETOURS_32BIT
hr = StringCchCatW(szExe, ARRAYSIZE(szExe), L"\\sysnative\\rundll32.exe");
#else // !DETOURS_32BIT
hr = StringCchCatW(szExe, ARRAYSIZE(szExe), L"\\syswow64\\rundll32.exe");
#endif // !DETOURS_32BIT
#else // DETOURS_OPTIONS_BITS
hr = StringCchCatW(szExe, ARRAYSIZE(szExe), L"\\system32\\rundll32.exe");
#endif // DETOURS_OPTIONS_BITS
if (!SUCCEEDED(hr)) {
goto Cleanup;
}
//for East Asia languages and so on, like Chinese, print format with "%hs" can not work fine before user call _tsetlocale(LC_ALL,_T(".ACP"));
//so we can't use "%hs" in format string, because the dll that contain this code would inject to any process, even not call _tsetlocale(LC_ALL,_T(".ACP")) before
cchWrittenWideChar = MultiByteToWideChar(CP_ACP, 0, &helper->rDlls[0], -1, szDllName, ARRAYSIZE(szDllName));
if (cchWrittenWideChar >= ARRAYSIZE(szDllName) || cchWrittenWideChar <= 0) {
goto Cleanup;
}
hr = StringCchPrintfW(szCommand, ARRAYSIZE(szCommand),
L"rundll32.exe \"%s\",#1", szDllName);
if (!SUCCEEDED(hr)) {
goto Cleanup;
}
ZeroMemory(&pi, sizeof(pi));
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
DETOUR_TRACE(("DetourProcessViaHelperDlls(\"%ls\", \"%ls\")\n", szExe, szCommand));
if (pfCreateProcessW(szExe, szCommand, NULL, NULL, FALSE, CREATE_SUSPENDED,
NULL, NULL, &si, &pi)) {
if (!DetourCopyPayloadToProcess(pi.hProcess,
DETOUR_EXE_HELPER_GUID,
helper, helper->cb)) {
DETOUR_TRACE(("DetourCopyPayloadToProcess failed: %lu\n", GetLastError()));
TerminateProcess(pi.hProcess, ~0u);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
goto Cleanup;
}
ResumeThread(pi.hThread);
WaitForSingleObject(pi.hProcess, INFINITE);
DWORD dwResult = 500;
GetExitCodeProcess(pi.hProcess, &dwResult);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
if (dwResult != 0) {
DETOUR_TRACE(("Rundll32.exe failed: result=%lu\n", dwResult));
goto Cleanup;
}
Result = TRUE;
}
else {
DETOUR_TRACE(("CreateProcess failed: %lu\n", GetLastError()));
goto Cleanup;
}
Cleanup:
FreeExeHelper(&helper);
return Result;
}
BOOL WINAPI DetourCreateProcessWithDllExA(_In_opt_ LPCSTR lpApplicationName,
_Inout_opt_ LPSTR lpCommandLine,
_In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,
_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ BOOL bInheritHandles,
_In_ DWORD dwCreationFlags,
_In_opt_ LPVOID lpEnvironment,
_In_opt_ LPCSTR lpCurrentDirectory,
_In_ LPSTARTUPINFOA lpStartupInfo,
_Out_ LPPROCESS_INFORMATION lpProcessInformation,
_In_ LPCSTR lpDllName,
_In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEA pfCreateProcessA)
{
if (pfCreateProcessA == NULL) {
pfCreateProcessA = CreateProcessA;
}
PROCESS_INFORMATION backup;
if (lpProcessInformation == NULL) {
lpProcessInformation = &backup;
ZeroMemory(&backup, sizeof(backup));
}
if (!pfCreateProcessA(lpApplicationName,
lpCommandLine,
lpProcessAttributes,
lpThreadAttributes,
bInheritHandles,
dwCreationFlags | CREATE_SUSPENDED,
lpEnvironment,
lpCurrentDirectory,
lpStartupInfo,
lpProcessInformation)) {
return FALSE;
}
LPCSTR szDll = lpDllName;
if (!DetourUpdateProcessWithDll(lpProcessInformation->hProcess, &szDll, 1) &&
!DetourProcessViaHelperA(lpProcessInformation->dwProcessId,
lpDllName,
pfCreateProcessA)) {
TerminateProcess(lpProcessInformation->hProcess, ~0u);
CloseHandle(lpProcessInformation->hProcess);
CloseHandle(lpProcessInformation->hThread);
return FALSE;
}
if (!(dwCreationFlags & CREATE_SUSPENDED)) {
ResumeThread(lpProcessInformation->hThread);
}
if (lpProcessInformation == &backup) {
CloseHandle(lpProcessInformation->hProcess);
CloseHandle(lpProcessInformation->hThread);
}
return TRUE;
}
BOOL WINAPI DetourCreateProcessWithDllExW(_In_opt_ LPCWSTR lpApplicationName,
_Inout_opt_ LPWSTR lpCommandLine,
_In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,
_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ BOOL bInheritHandles,
_In_ DWORD dwCreationFlags,
_In_opt_ LPVOID lpEnvironment,
_In_opt_ LPCWSTR lpCurrentDirectory,
_In_ LPSTARTUPINFOW lpStartupInfo,
_Out_ LPPROCESS_INFORMATION lpProcessInformation,
_In_ LPCSTR lpDllName,
_In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEW pfCreateProcessW)
{
if (pfCreateProcessW == NULL) {
pfCreateProcessW = CreateProcessW;
}
PROCESS_INFORMATION backup;
if (lpProcessInformation == NULL) {
lpProcessInformation = &backup;
ZeroMemory(&backup, sizeof(backup));
}
if (!pfCreateProcessW(lpApplicationName,
lpCommandLine,
lpProcessAttributes,
lpThreadAttributes,
bInheritHandles,
dwCreationFlags | CREATE_SUSPENDED,
lpEnvironment,
lpCurrentDirectory,
lpStartupInfo,
lpProcessInformation)) {
return FALSE;
}
LPCSTR sz = lpDllName;
if (!DetourUpdateProcessWithDll(lpProcessInformation->hProcess, &sz, 1) &&
!DetourProcessViaHelperW(lpProcessInformation->dwProcessId,
lpDllName,
pfCreateProcessW)) {
TerminateProcess(lpProcessInformation->hProcess, ~0u);
CloseHandle(lpProcessInformation->hProcess);
CloseHandle(lpProcessInformation->hThread);
return FALSE;
}
if (!(dwCreationFlags & CREATE_SUSPENDED)) {
ResumeThread(lpProcessInformation->hThread);
}
if (lpProcessInformation == &backup) {
CloseHandle(lpProcessInformation->hProcess);
CloseHandle(lpProcessInformation->hThread);
}
return TRUE;
}
BOOL WINAPI DetourCreateProcessWithDllsA(_In_opt_ LPCSTR lpApplicationName,
_Inout_opt_ LPSTR lpCommandLine,
_In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,
_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ BOOL bInheritHandles,
_In_ DWORD dwCreationFlags,
_In_opt_ LPVOID lpEnvironment,
_In_opt_ LPCSTR lpCurrentDirectory,
_In_ LPSTARTUPINFOA lpStartupInfo,
_Out_ LPPROCESS_INFORMATION lpProcessInformation,
_In_ DWORD nDlls,
_In_reads_(nDlls) LPCSTR *rlpDlls,
_In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEA pfCreateProcessA)
{
if (pfCreateProcessA == NULL) {
pfCreateProcessA = CreateProcessA;
}
PROCESS_INFORMATION backup;
if (lpProcessInformation == NULL) {
lpProcessInformation = &backup;
ZeroMemory(&backup, sizeof(backup));
}
if (!pfCreateProcessA(lpApplicationName,
lpCommandLine,
lpProcessAttributes,
lpThreadAttributes,
bInheritHandles,
dwCreationFlags | CREATE_SUSPENDED,
lpEnvironment,
lpCurrentDirectory,
lpStartupInfo,
lpProcessInformation)) {
return FALSE;
}
if (!DetourUpdateProcessWithDll(lpProcessInformation->hProcess, rlpDlls, nDlls) &&
!DetourProcessViaHelperDllsA(lpProcessInformation->dwProcessId,
nDlls,
rlpDlls,
pfCreateProcessA)) {
TerminateProcess(lpProcessInformation->hProcess, ~0u);
CloseHandle(lpProcessInformation->hProcess);
CloseHandle(lpProcessInformation->hThread);
return FALSE;
}
if (!(dwCreationFlags & CREATE_SUSPENDED)) {
ResumeThread(lpProcessInformation->hThread);
}
if (lpProcessInformation == &backup) {
CloseHandle(lpProcessInformation->hProcess);
CloseHandle(lpProcessInformation->hThread);
}
return TRUE;
}
BOOL WINAPI DetourCreateProcessWithDllsW(_In_opt_ LPCWSTR lpApplicationName,
_Inout_opt_ LPWSTR lpCommandLine,
_In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,
_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ BOOL bInheritHandles,
_In_ DWORD dwCreationFlags,
_In_opt_ LPVOID lpEnvironment,
_In_opt_ LPCWSTR lpCurrentDirectory,
_In_ LPSTARTUPINFOW lpStartupInfo,
_Out_ LPPROCESS_INFORMATION lpProcessInformation,
_In_ DWORD nDlls,
_In_reads_(nDlls) LPCSTR *rlpDlls,
_In_opt_ PDETOUR_CREATE_PROCESS_ROUTINEW pfCreateProcessW)
{
if (pfCreateProcessW == NULL) {
pfCreateProcessW = CreateProcessW;
}
PROCESS_INFORMATION backup;
if (lpProcessInformation == NULL) {
lpProcessInformation = &backup;
ZeroMemory(&backup, sizeof(backup));
}
if (!pfCreateProcessW(lpApplicationName,
lpCommandLine,
lpProcessAttributes,
lpThreadAttributes,
bInheritHandles,
dwCreationFlags | CREATE_SUSPENDED,
lpEnvironment,
lpCurrentDirectory,
lpStartupInfo,
lpProcessInformation)) {
return FALSE;
}
if (!DetourUpdateProcessWithDll(lpProcessInformation->hProcess, rlpDlls, nDlls) &&
!DetourProcessViaHelperDllsW(lpProcessInformation->dwProcessId,
nDlls,
rlpDlls,
pfCreateProcessW)) {
TerminateProcess(lpProcessInformation->hProcess, ~0u);
CloseHandle(lpProcessInformation->hProcess);
CloseHandle(lpProcessInformation->hThread);
return FALSE;
}
if (!(dwCreationFlags & CREATE_SUSPENDED)) {
ResumeThread(lpProcessInformation->hThread);
}
if (lpProcessInformation == &backup) {
CloseHandle(lpProcessInformation->hProcess);
CloseHandle(lpProcessInformation->hThread);
}
return TRUE;
}
//
///////////////////////////////////////////////////////////////// End of File.
================================================
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Detours/detours.cpp
================================================
//////////////////////////////////////////////////////////////////////////////
//
// Core Detours Functionality (detours.cpp of detours.lib)
//
// Microsoft Research Detours Package, Version 4.0.1
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//#define DETOUR_DEBUG 1
#define DETOURS_INTERNAL
#include "detours.h"
#if DETOURS_VERSION != 0x4c0c1 // 0xMAJORcMINORcPATCH
#error detours.h version mismatch
#endif
#define NOTHROW
//////////////////////////////////////////////////////////////////////////////
//
#ifdef _DEBUG
extern "C" IMAGE_DOS_HEADER __ImageBase;
int Detour_AssertExprWithFunctionName(int reportType, const char* filename, int linenumber, const char* FunctionName, const char* msg)
{
int nRet = 0;
DWORD dwLastError = GetLastError();
CHAR szModuleNameWithFunctionName[MAX_PATH * 2];
szModuleNameWithFunctionName[0] = 0;
GetModuleFileNameA((HMODULE)&__ImageBase, szModuleNameWithFunctionName, ARRAYSIZE(szModuleNameWithFunctionName));
StringCchCatNA(szModuleNameWithFunctionName, ARRAYSIZE(szModuleNameWithFunctionName), ",", ARRAYSIZE(szModuleNameWithFunctionName) - strlen(szModuleNameWithFunctionName) - 1);
StringCchCatNA(szModuleNameWithFunctionName, ARRAYSIZE(szModuleNameWithFunctionName), FunctionName, ARRAYSIZE(szModuleNameWithFunctionName) - strlen(szModuleNameWithFunctionName) - 1);
SetLastError(dwLastError);
nRet = _CrtDbgReport(reportType, filename, linenumber, szModuleNameWithFunctionName, msg);
SetLastError(dwLastError);
return nRet;
}
#endif// _DEBUG
//////////////////////////////////////////////////////////////////////////////
//
struct _DETOUR_ALIGN
{
BYTE obTarget : 3;
BYTE obTrampoline : 5;
};
C_ASSERT(sizeof(_DETOUR_ALIGN) == 1);
//////////////////////////////////////////////////////////////////////////////
//
// Region reserved for system DLLs, which cannot be used for trampolines.
//
static PVOID s_pSystemRegionLowerBound = (PVOID)(ULONG_PTR)0x70000000;
static PVOID s_pSystemRegionUpperBound = (PVOID)(ULONG_PTR)0x80000000;
//////////////////////////////////////////////////////////////////////////////
//
static bool detour_is_imported(PBYTE pbCode, PBYTE pbAddress)
{
MEMORY_BASIC_INFORMATION mbi;
VirtualQuery((PVOID)pbCode, &mbi, sizeof(mbi));
__try {
PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)mbi.AllocationBase;
if (pDosHeader->e_magic != IMAGE_DOS_SIGNATURE) {
return false;
}
PIMAGE_NT_HEADERS pNtHeader = (PIMAGE_NT_HEADERS)((PBYTE)pDosHeader +
pDosHeader->e_lfanew);
if (pNtHeader->Signature != IMAGE_NT_SIGNATURE) {
return false;
}
if (pbAddress >= ((PBYTE)pDosHeader +
pNtHeader->OptionalHeader
.DataDirectory[IMAGE_DIRECTORY_ENTRY_IAT].VirtualAddress) &&
pbAddress < ((PBYTE)pDosHeader +
pNtHeader->OptionalHeader
.DataDirectory[IMAGE_DIRECTORY_ENTRY_IAT].VirtualAddress +
pNtHeader->OptionalHeader
.DataDirectory[IMAGE_DIRECTORY_ENTRY_IAT].Size)) {
return true;
}
}
#pragma prefast(suppress:28940, "A bad pointer means this probably isn't a PE header.")
__except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
return false;
}
return false;
}
inline ULONG_PTR detour_2gb_below(ULONG_PTR address)
{
return (address > (ULONG_PTR)0x7ff80000) ? address - 0x7ff80000 : 0x80000;
}
inline ULONG_PTR detour_2gb_above(ULONG_PTR address)
{
#if defined(DETOURS_64BIT)
return (address < (ULONG_PTR)0xffffffff80000000) ? address + 0x7ff80000 : (ULONG_PTR)0xfffffffffff80000;
#else
return (address < (ULONG_PTR)0x80000000) ? address + 0x7ff80000 : (ULONG_PTR)0xfff80000;
#endif
}
///////////////////////////////////////////////////////////////////////// X86.
//
#ifdef DETOURS_X86
struct _DETOUR_TRAMPOLINE
{
BYTE rbCode[30]; // target code + jmp to pbRemain
BYTE cbCode; // size of moved target code.
BYTE cbCodeBreak; // padding to make debugging easier.
BYTE rbRestore[22]; // original target code.
BYTE cbRestore; // size of original target code.
BYTE cbRestoreBreak; // padding to make debugging easier.
_DETOUR_ALIGN rAlign[8]; // instruction alignment array.
PBYTE pbRemain; // first instruction after moved code. [free list]
PBYTE pbDetour; // first instruction of detour function.
};
C_ASSERT(sizeof(_DETOUR_TRAMPOLINE) == 72);
enum {
SIZE_OF_JMP = 5
};
inline PBYTE detour_gen_jmp_immediate(PBYTE pbCode, PBYTE pbJmpVal)
{
PBYTE pbJmpSrc = pbCode + 5;
*pbCode++ = 0xE9; // jmp +imm32
*((INT32*&)pbCode)++ = (INT32)(pbJmpVal - pbJmpSrc);
return pbCode;
}
inline PBYTE detour_gen_jmp_indirect(PBYTE pbCode, PBYTE *ppbJmpVal)
{
*pbCode++ = 0xff; // jmp [+imm32]
*pbCode++ = 0x25;
*((INT32*&)pbCode)++ = (INT32)((PBYTE)ppbJmpVal);
return pbCode;
}
inline PBYTE detour_gen_brk(PBYTE pbCode, PBYTE pbLimit)
{
while (pbCode < pbLimit) {
*pbCode++ = 0xcc; // brk;
}
return pbCode;
}
inline PBYTE detour_skip_jmp(PBYTE pbCode, PVOID *ppGlobals)
{
if (pbCode == NULL) {
return NULL;
}
if (ppGlobals != NULL) {
*ppGlobals = NULL;
}
// First, skip over the import vector if there is one.
if (pbCode[0] == 0xff && pbCode[1] == 0x25) { // jmp [imm32]
// Looks like an import alias jump, then get the code it points to.
PBYTE pbTarget = *(UNALIGNED PBYTE *)&pbCode[2];
if (detour_is_imported(pbCode, pbTarget)) {
PBYTE pbNew = *(UNALIGNED PBYTE *)pbTarget;
DETOUR_TRACE(("%p->%p: skipped over import table.\n", pbCode, pbNew));
pbCode = pbNew;
}
}
// Then, skip over a patch jump
if (pbCode[0] == 0xeb) { // jmp +imm8
PBYTE pbNew = pbCode + 2 + *(CHAR *)&pbCode[1];
DETOUR_TRACE(("%p->%p: skipped over short jump.\n", pbCode, pbNew));
pbCode = pbNew;
// First, skip over the import vector if there is one.
if (pbCode[0] == 0xff && pbCode[1] == 0x25) { // jmp [imm32]
// Looks like an import alias jump, then get the code it points to.
PBYTE pbTarget = *(UNALIGNED PBYTE *)&pbCode[2];
if (detour_is_imported(pbCode, pbTarget)) {
pbNew = *(UNALIGNED PBYTE *)pbTarget;
DETOUR_TRACE(("%p->%p: skipped over import table.\n", pbCode, pbNew));
pbCode = pbNew;
}
}
// Finally, skip over a long jump if it is the target of the patch jump.
else if (pbCode[0] == 0xe9) { // jmp +imm32
pbNew = pbCode + 5 + *(UNALIGNED INT32 *)&pbCode[1];
DETOUR_TRACE(("%p->%p: skipped over long jump.\n", pbCode, pbNew));
pbCode = pbNew;
}
}
return pbCode;
}
inline void detour_find_jmp_bounds(PBYTE pbCode,
PDETOUR_TRAMPOLINE *ppLower,
PDETOUR_TRAMPOLINE *ppUpper)
{
// We have to place trampolines within +/- 2GB of code.
ULONG_PTR lo = detour_2gb_below((ULONG_PTR)pbCode);
ULONG_PTR hi = detour_2gb_above((ULONG_PTR)pbCode);
DETOUR_TRACE(("[%p..%p..%p]\n", (PVOID)lo, pbCode, (PVOID)hi));
// And, within +/- 2GB of relative jmp targets.
if (pbCode[0] == 0xe9) { // jmp +imm32
PBYTE pbNew = pbCode + 5 + *(UNALIGNED INT32 *)&pbCode[1];
if (pbNew < pbCode) {
hi = detour_2gb_above((ULONG_PTR)pbNew);
}
else {
lo = detour_2gb_below((ULONG_PTR)pbNew);
}
DETOUR_TRACE(("[%p..%p..%p] +imm32\n", (PVOID)lo, pbCode, (PVOID)hi));
}
*ppLower = (PDETOUR_TRAMPOLINE)lo;
*ppUpper = (PDETOUR_TRAMPOLINE)hi;
}
inline BOOL detour_does_code_end_function(PBYTE pbCode)
{
if (pbCode[0] == 0xeb || // jmp +imm8
pbCode[0] == 0xe9 || // jmp +imm32
pbCode[0] == 0xe0 || // jmp eax
pbCode[0] == 0xc2 || // ret +imm8
pbCode[0] == 0xc3 || // ret
pbCode[0] == 0xcc) { // brk
return TRUE;
}
else if (pbCode[0] == 0xf3 && pbCode[1] == 0xc3) { // rep ret
return TRUE;
}
else if (pbCode[0] == 0xff && pbCode[1] == 0x25) { // jmp [+imm32]
return TRUE;
}
else if ((pbCode[0] == 0x26 || // jmp es:
pbCode[0] == 0x2e || // jmp cs:
pbCode[0] == 0x36 || // jmp ss:
pbCode[0] == 0x3e || // jmp ds:
pbCode[0] == 0x64 || // jmp fs:
pbCode[0] == 0x65) && // jmp gs:
pbCode[1] == 0xff && // jmp [+imm32]
pbCode[2] == 0x25) {
return TRUE;
}
return FALSE;
}
inline ULONG detour_is_code_filler(PBYTE pbCode)
{
// 1-byte through 11-byte NOPs.
if (pbCode[0] == 0x90) {
return 1;
}
if (pbCode[0] == 0x66 && pbCode[1] == 0x90) {
return 2;
}
if (pbCode[0] == 0x0F && pbCode[1] == 0x1F && pbCode[2] == 0x00) {
return 3;
}
if (pbCode[0] == 0x0F && pbCode[1] == 0x1F && pbCode[2] == 0x40 &&
pbCode[3] == 0x00) {
return 4;
}
if (pbCode[0] == 0x0F && pbCode[1] == 0x1F && pbCode[2] == 0x44 &&
pbCode[3] == 0x00 && pbCode[4] == 0x00) {
return 5;
}
if (pbCode[0] == 0x66 && pbCode[1] == 0x0F && pbCode[2] == 0x1F &&
pbCode[3] == 0x44 && pbCode[4] == 0x00 && pbCode[5] == 0x00) {
return 6;
}
if (pbCode[0] == 0x0F && pbCode[1] == 0x1F && pbCode[2] == 0x80 &&
pbCode[3] == 0x00 && pbCode[4] == 0x00 && pbCode[5] == 0x00 &&
pbCode[6] == 0x00) {
return 7;
}
if (pbCode[0] == 0x0F && pbCode[1] == 0x1F && pbCode[2] == 0x84 &&
pbCode[3] == 0x00 && pbCode[4] == 0x00 && pbCode[5] == 0x00 &&
pbCode[6] == 0x00 && pbCode[7] == 0x00) {
return 8;
}
if (pbCode[0] == 0x66 && pbCode[1] == 0x0F && pbCode[2] == 0x1F &&
pbCode[3] == 0x84 && pbCode[4] == 0x00 && pbCode[5] == 0x00 &&
pbCode[6] == 0x00 && pbCode[7] == 0x00 && pbCode[8] == 0x00) {
return 9;
}
if (pbCode[0] == 0x66 && pbCode[1] == 0x66 && pbCode[2] == 0x0F &&
pbCode[3] == 0x1F && pbCode[4] == 0x84 && pbCode[5] == 0x00 &&
pbCode[6] == 0x00 && pbCode[7] == 0x00 && pbCode[8] == 0x00 &&
pbCode[9] == 0x00) {
return 10;
}
if (pbCode[0] == 0x66 && pbCode[1] == 0x66 && pbCode[2] == 0x66 &&
pbCode[3] == 0x0F && pbCode[4] == 0x1F && pbCode[5] == 0x84 &&
pbCode[6] == 0x00 && pbCode[7] == 0x00 && pbCode[8] == 0x00 &&
pbCode[9] == 0x00 && pbCode[10] == 0x00) {
return 11;
}
// int 3.
if (pbCode[0] == 0xcc) {
return 1;
}
return 0;
}
#endif // DETOURS_X86
///////////////////////////////////////////////////////////////////////// X64.
//
#ifdef DETOURS_X64
struct _DETOUR_TRAMPOLINE
{
// An X64 instuction can be 15 bytes long.
// In practice 11 seems to be the limit.
BYTE rbCode[30]; // target code + jmp to pbRemain.
BYTE cbCode; // size of moved target code.
BYTE cbCodeBreak; // padding to make debugging easier.
BYTE rbRestore[30]; // original target code.
BYTE cbRestore; // size of original target code.
BYTE cbRestoreBreak; // padding to make debugging easier.
_DETOUR_ALIGN rAlign[8]; // instruction alignment array.
PBYTE pbRemain; // first instruction after moved code. [free list]
PBYTE pbDetour; // first instruction of detour function.
BYTE rbCodeIn[8]; // jmp [pbDetour]
};
C_ASSERT(sizeof(_DETOUR_TRAMPOLINE) == 96);
enum {
SIZE_OF_JMP = 5
};
inline PBYTE detour_gen_jmp_immediate(PBYTE pbCode, PBYTE pbJmpVal)
{
PBYTE pbJmpSrc = pbCode + 5;
*pbCode++ = 0xE9; // jmp +imm32
*((INT32*&)pbCode)++ = (INT32)(pbJmpVal - pbJmpSrc);
return pbCode;
}
inline PBYTE detour_gen_jmp_indirect(PBYTE pbCode, PBYTE *ppbJmpVal)
{
PBYTE pbJmpSrc = pbCode + 6;
*pbCode++ = 0xff; // jmp [+imm32]
*pbCode++ = 0x25;
*((INT32*&)pbCode)++ = (INT32)((PBYTE)ppbJmpVal - pbJmpSrc);
return pbCode;
}
inline PBYTE detour_gen_brk(PBYTE pbCode, PBYTE pbLimit)
{
while (pbCode < pbLimit) {
*pbCode++ = 0xcc; // brk;
}
return pbCode;
}
inline PBYTE detour_skip_jmp(PBYTE pbCode, PVOID *ppGlobals)
{
if (pbCode == NULL) {
return NULL;
}
if (ppGlobals != NULL) {
*ppGlobals = NULL;
}
// First, skip over the import vector if there is one.
if (pbCode[0] == 0xff && pbCode[1] == 0x25) { // jmp [+imm32]
// Looks like an import alias jump, then get the code it points to.
PBYTE pbTarget = pbCode + 6 + *(UNALIGNED INT32 *)&pbCode[2];
if (detour_is_imported(pbCode, pbTarget)) {
PBYTE pbNew = *(UNALIGNED PBYTE *)pbTarget;
DETOUR_TRACE(("%p->%p: skipped over import table.\n", pbCode, pbNew));
pbCode = pbNew;
}
}
// Then, skip over a patch jump
if (pbCode[0] == 0xeb) { // jmp +imm8
PBYTE pbNew = pbCode + 2 + *(CHAR *)&pbCode[1];
DETOUR_TRACE(("%p->%p: skipped over short jump.\n", pbCode, pbNew));
pbCode = pbNew;
// First, skip over the import vector if there is one.
if (pbCode[0] == 0xff && pbCode[1] == 0x25) { // jmp [+imm32]
// Looks like an import alias jump, then get the code it points to.
PBYTE pbTarget = pbCode + 6 + *(UNALIGNED INT32 *)&pbCode[2];
if (detour_is_imported(pbCode, pbTarget)) {
pbNew = *(UNALIGNED PBYTE *)pbTarget;
DETOUR_TRACE(("%p->%p: skipped over import table.\n", pbCode, pbNew));
pbCode = pbNew;
}
}
// Finally, skip over a long jump if it is the target of the patch jump.
else if (pbCode[0] == 0xe9) { // jmp +imm32
pbNew = pbCode + 5 + *(UNALIGNED INT32 *)&pbCode[1];
DETOUR_TRACE(("%p->%p: skipped over long jump.\n", pbCode, pbNew));
pbCode = pbNew;
}
}
return pbCode;
}
inline void detour_find_jmp_bounds(PBYTE pbCode,
PDETOUR_TRAMPOLINE *ppLower,
PDETOUR_TRAMPOLINE *ppUpper)
{
// We have to place trampolines within +/- 2GB of code.
ULONG_PTR lo = detour_2gb_below((ULONG_PTR)pbCode);
ULONG_PTR hi = detour_2gb_above((ULONG_PTR)pbCode);
DETOUR_TRACE(("[%p..%p..%p]\n", (PVOID)lo, pbCode, (PVOID)hi));
// And, within +/- 2GB of relative jmp vectors.
if (pbCode[0] == 0xff && pbCode[1] == 0x25) { // jmp [+imm32]
PBYTE pbNew = pbCode + 6 + *(UNALIGNED INT32 *)&pbCode[2];
if (pbNew < pbCode) {
hi = detour_2gb_above((ULONG_PTR)pbNew);
}
else {
lo = detour_2gb_below((ULONG_PTR)pbNew);
}
DETOUR_TRACE(("[%p..%p..%p] [+imm32]\n", (PVOID)lo, pbCode, (PVOID)hi));
}
// And, within +/- 2GB of relative jmp targets.
else if (pbCode[0] == 0xe9) { // jmp +imm32
PBYTE pbNew = pbCode + 5 + *(UNALIGNED INT32 *)&pbCode[1];
if (pbNew < pbCode) {
hi = detour_2gb_above((ULONG_PTR)pbNew);
}
else {
lo = detour_2gb_below((ULONG_PTR)pbNew);
}
DETOUR_TRACE(("[%p..%p..%p] +imm32\n", (PVOID)lo, pbCode, (PVOID)hi));
}
*ppLower = (PDETOUR_TRAMPOLINE)lo;
*ppUpper = (PDETOUR_TRAMPOLINE)hi;
}
inline BOOL detour_does_code_end_function(PBYTE pbCode)
{
if (pbCode[0] == 0xeb || // jmp +imm8
pbCode[0] == 0xe9 || // jmp +imm32
pbCode[0] == 0xe0 || // jmp eax
pbCode[0] == 0xc2 || // ret +imm8
pbCode[0] == 0xc3 || // ret
pbCode[0] == 0xcc) { // brk
return TRUE;
}
else if (pbCode[0] == 0xf3 && pbCode[1] == 0xc3) { // rep ret
return TRUE;
}
else if (pbCode[0] == 0xff && pbCode[1] == 0x25) { // jmp [+imm32]
return TRUE;
}
else if ((pbCode[0] == 0x26 || // jmp es:
pbCode[0] == 0x2e || // jmp cs:
pbCode[0] == 0x36 || // jmp ss:
pbCode[0] == 0x3e || // jmp ds:
pbCode[0] == 0x64 || // jmp fs:
pbCode[0] == 0x65) && // jmp gs:
pbCode[1] == 0xff && // jmp [+imm32]
pbCode[2] == 0x25) {
return TRUE;
}
return FALSE;
}
inline ULONG detour_is_code_filler(PBYTE pbCode)
{
// 1-byte through 11-byte NOPs.
if (pbCode[0] == 0x90) {
return 1;
}
if (pbCode[0] == 0x66 && pbCode[1] == 0x90) {
return 2;
}
if (pbCode[0] == 0x0F && pbCode[1] == 0x1F && pbCode[2] == 0x00) {
return 3;
}
if (pbCode[0] == 0x0F && pbCode[1] == 0x1F && pbCode[2] == 0x40 &&
pbCode[3] == 0x00) {
return 4;
}
if (pbCode[0] == 0x0F && pbCode[1] == 0x1F && pbCode[2] == 0x44 &&
pbCode[3] == 0x00 && pbCode[4] == 0x00) {
return 5;
}
if (pbCode[0] == 0x66 && pbCode[1] == 0x0F && pbCode[2] == 0x1F &&
pbCode[3] == 0x44 && pbCode[4] == 0x00 && pbCode[5] == 0x00) {
return 6;
}
if (pbCode[0] == 0x0F && pbCode[1] == 0x1F && pbCode[2] == 0x80 &&
pbCode[3] == 0x00 && pbCode[4] == 0x00 && pbCode[5] == 0x00 &&
pbCode[6] == 0x00) {
return 7;
}
if (pbCode[0] == 0x0F && pbCode[1] == 0x1F && pbCode[2] == 0x84 &&
pbCode[3] == 0x00 && pbCode[4] == 0x00 && pbCode[5] == 0x00 &&
pbCode[6] == 0x00 && pbCode[7] == 0x00) {
return 8;
}
if (pbCode[0] == 0x66 && pbCode[1] == 0x0F && pbCode[2] == 0x1F &&
pbCode[3] == 0x84 && pbCode[4] == 0x00 && pbCode[5] == 0x00 &&
pbCode[6] == 0x00 && pbCode[7] == 0x00 && pbCode[8] == 0x00) {
return 9;
}
if (pbCode[0] == 0x66 && pbCode[1] == 0x66 && pbCode[2] == 0x0F &&
pbCode[3] == 0x1F && pbCode[4] == 0x84 && pbCode[5] == 0x00 &&
pbCode[6] == 0x00 && pbCode[7] == 0x00 && pbCode[8] == 0x00 &&
pbCode[9] == 0x00) {
return 10;
}
if (pbCode[0] == 0x66 && pbCode[1] == 0x66 && pbCode[2] == 0x66 &&
pbCode[3] == 0x0F && pbCode[4] == 0x1F && pbCode[5] == 0x84 &&
pbCode[6] == 0x00 && pbCode[7] == 0x00 && pbCode[8] == 0x00 &&
pbCode[9] == 0x00 && pbCode[10] == 0x00) {
return 11;
}
// int 3.
if (pbCode[0] == 0xcc) {
return 1;
}
return 0;
}
#endif // DETOURS_X64
//////////////////////////////////////////////////////////////////////// IA64.
//
#ifdef DETOURS_IA64
struct _DETOUR_TRAMPOLINE
{
// On the IA64, a trampoline is used for both incoming and outgoing calls.
//
// The trampoline contains the following bundles for the outgoing call:
// movl gp=target_gp;
// <relocated target bundle>
// brl target_code;
//
// The trampoline contains the following bundles for the incoming call:
// alloc r41=ar.pfs, b, 0, 8, 0
// mov r40=rp
//
// adds r50=0, r39
// adds r49=0, r38
// adds r48=0, r37 ;;
//
// adds r47=0, r36
// adds r46=0, r35
// adds r45=0, r34
//
// adds r44=0, r33
// adds r43=0, r32
// adds r42=0, gp ;;
//
// movl gp=ffffffff`ffffffff ;;
//
// brl.call.sptk.few rp=disas!TestCodes+20e0 (00000000`00404ea0) ;;
//
// adds gp=0, r42
// mov rp=r40, +0 ;;
// mov.i ar.pfs=r41
//
// br.ret.sptk.many rp ;;
//
// This way, we only have to relocate a single bundle.
//
// The complicated incoming trampoline is required because we have to
// create an additional stack frame so that we save and restore the gp.
// We must do this because gp is a caller-saved register, but not saved
// if the caller thinks the target is in the same DLL, which changes
// when we insert a detour.
//
DETOUR_IA64_BUNDLE bMovlTargetGp; // Bundle which sets target GP
BYTE rbCode[sizeof(DETOUR_IA64_BUNDLE)]; // moved bundle.
DETOUR_IA64_BUNDLE bBrlRemainEip; // Brl to pbRemain
// This must be adjacent to bBranchIslands.
// Each instruction in the moved bundle could be a IP-relative chk or branch or call.
// Any such instructions are changed to point to a brl in bBranchIslands.
// This must be adjacent to bBrlRemainEip -- see "pbPool".
DETOUR_IA64_BUNDLE bBranchIslands[DETOUR_IA64_INSTRUCTIONS_PER_BUNDLE];
// Target of brl inserted in target function
DETOUR_IA64_BUNDLE bAllocFrame; // alloc frame
DETOUR_IA64_BUNDLE bSave37to39; // save r37, r38, r39.
DETOUR_IA64_BUNDLE bSave34to36; // save r34, r35, r36.
DETOUR_IA64_BUNDLE bSaveGPto33; // save gp, r32, r33.
DETOUR_IA64_BUNDLE bMovlDetourGp; // set detour GP.
DETOUR_IA64_BUNDLE bCallDetour; // call detour.
DETOUR_IA64_BUNDLE bPopFrameGp; // pop frame and restore gp.
DETOUR_IA64_BUNDLE bReturn; // return to caller.
PLABEL_DESCRIPTOR pldTrampoline;
BYTE rbRestore[sizeof(DETOUR_IA64_BUNDLE)]; // original target bundle.
BYTE cbRestore; // size of original target code.
BYTE cbCode; // size of moved target code.
_DETOUR_ALIGN rAlign[14]; // instruction alignment array.
PBYTE pbRemain; // first instruction after moved code. [free list]
PBYTE pbDetour; // first instruction of detour function.
PPLABEL_DESCRIPTOR ppldDetour; // [pbDetour,gpDetour]
PPLABEL_DESCRIPTOR ppldTarget; // [pbTarget,gpDetour]
};
C_ASSERT(sizeof(DETOUR_IA64_BUNDLE) == 16);
C_ASSERT(sizeof(_DETOUR_TRAMPOLINE) == 256 + DETOUR_IA64_INSTRUCTIONS_PER_BUNDLE * 16);
enum {
SIZE_OF_JMP = sizeof(DETOUR_IA64_BUNDLE)
};
inline PBYTE detour_skip_jmp(PBYTE pPointer, PVOID *ppGlobals)
{
PBYTE pGlobals = NULL;
PBYTE pbCode = NULL;
if (pPointer != NULL) {
PPLABEL_DESCRIPTOR ppld = (PPLABEL_DESCRIPTOR)pPointer;
pbCode = (PBYTE)ppld->EntryPoint;
pGlobals = (PBYTE)ppld->GlobalPointer;
}
if (ppGlobals != NULL) {
*ppGlobals = pGlobals;
}
if (pbCode == NULL) {
return NULL;
}
DETOUR_IA64_BUNDLE *pb = (DETOUR_IA64_BUNDLE *)pbCode;
// IA64 Local Import Jumps look like:
// addl r2=ffffffff`ffe021c0, gp ;;
// ld8 r2=[r2]
// nop.i 0 ;;
//
// ld8 r3=[r2], 8 ;;
// ld8 gp=[r2]
// mov b6=r3, +0
//
// nop.m 0
// nop.i 0
// br.cond.sptk.few b6
//
// 002024000200100b
if ((pb[0].wide[0] & 0xfffffc000603ffff) == 0x002024000200100b &&
pb[0].wide[1] == 0x0004000000203008 &&
pb[1].wide[0] == 0x001014180420180a &&
pb[1].wide[1] == 0x07000830c0203008 &&
pb[2].wide[0] == 0x0000000100000010 &&
pb[2].wide[1] == 0x0080006000000200) {
ULONG64 offset =
((pb[0].wide[0] & 0x0000000001fc0000) >> 18) | // imm7b
((pb[0].wide[0] & 0x000001ff00000000) >> 25) | // imm9d
((pb[0].wide[0] & 0x00000000f8000000) >> 11); // imm5c
if (pb[0].wide[0] & 0x0000020000000000) { // sign
offset |= 0xffffffffffe00000;
}
PBYTE pbTarget = pGlobals + offset;
DETOUR_TRACE(("%p: potential import jump, target=%p\n", pb, pbTarget));
if (detour_is_imported(pbCode, pbTarget) && *(PBYTE*)pbTarget != NULL) {
DETOUR_TRACE(("%p: is import jump, label=%p\n", pb, *(PBYTE *)pbTarget));
PPLABEL_DESCRIPTOR ppld = (PPLABEL_DESCRIPTOR)*(PBYTE *)pbTarget;
pbCode = (PBYTE)ppld->EntryPoint;
pGlobals = (PBYTE)ppld->GlobalPointer;
if (ppGlobals != NULL) {
*ppGlobals = pGlobals;
}
}
}
return pbCode;
}
inline void detour_find_jmp_bounds(PBYTE pbCode,
PDETOUR_TRAMPOLINE *ppLower,
PDETOUR_TRAMPOLINE *ppUpper)
{
(void)pbCode;
*ppLower = (PDETOUR_TRAMPOLINE)(ULONG_PTR)0x0000000000080000;
*ppUpper = (PDETOUR_TRAMPOLINE)(ULONG_PTR)0xfffffffffff80000;
}
inline BOOL detour_does_code_end_function(PBYTE pbCode)
{
// Routine not needed on IA64.
(void)pbCode;
return FALSE;
}
inline ULONG detour_is_code_filler(PBYTE pbCode)
{
// Routine not needed on IA64.
(void)pbCode;
return 0;
}
#endif // DETOURS_IA64
#ifdef DETOURS_ARM
struct _DETOUR_TRAMPOLINE
{
// A Thumb-2 instruction can be 2 or 4 bytes long.
BYTE rbCode[62]; // target code + jmp to pbRemain
BYTE cbCode; // size of moved target code.
BYTE cbCodeBreak; // padding to make debugging easier.
BYTE rbRestore[22]; // original target code.
BYTE cbRestore; // size of original target code.
BYTE cbRestoreBreak; // padding to make debugging easier.
_DETOUR_ALIGN rAlign[8]; // instruction alignment array.
PBYTE pbRemain; // first instruction after moved code. [free list]
PBYTE pbDetour; // first instruction of detour function.
};
C_ASSERT(sizeof(_DETOUR_TRAMPOLINE) == 104);
enum {
SIZE_OF_JMP = 8
};
inline PBYTE align4(PBYTE pValue)
{
return (PBYTE)(((ULONG)pValue) & ~(ULONG)3u);
}
inline ULONG fetch_thumb_opcode(PBYTE pbCode)
{
ULONG Opcode = *(UINT16 *)&pbCode[0];
if (Opcode >= 0xe800) {
Opcode = (Opcode << 16) | *(UINT16 *)&pbCode[2];
}
return Opcode;
}
inline void write_thumb_opcode(PBYTE &pbCode, ULONG Opcode)
{
if (Opcode >= 0x10000) {
*((UINT16*&)pbCode)++ = Opcode >> 16;
}
*((UINT16*&)pbCode)++ = (UINT16)Opcode;
}
PBYTE detour_gen_jmp_immediate(PBYTE pbCode, PBYTE *ppPool, PBYTE pbJmpVal)
{
PBYTE pbLiteral;
if (ppPool != NULL) {
*ppPool = *ppPool - 4;
pbLiteral = *ppPool;
}
else {
pbLiteral = align4(pbCode + 6);
}
*((PBYTE*&)pbLiteral) = DETOURS_PBYTE_TO_PFUNC(pbJmpVal);
LONG delta = pbLiteral - align4(pbCode + 4);
write_thumb_opcode(pbCode, 0xf8dff000 | delta); // LDR PC,[PC+n]
if (ppPool == NULL) {
if (((ULONG)pbCode & 2) != 0) {
write_thumb_opcode(pbCode, 0xdefe); // BREAK
}
pbCode += 4;
}
return pbCode;
}
inline PBYTE detour_gen_brk(PBYTE pbCode, PBYTE pbLimit)
{
while (pbCode < pbLimit) {
write_thumb_opcode(pbCode, 0xdefe);
}
return pbCode;
}
inline PBYTE detour_skip_jmp(PBYTE pbCode, PVOID *ppGlobals)
{
if (pbCode == NULL) {
return NULL;
}
if (ppGlobals != NULL) {
*ppGlobals = NULL;
}
// Skip over the import jump if there is one.
pbCode = (PBYTE)DETOURS_PFUNC_TO_PBYTE(pbCode);
ULONG Opcode = fetch_thumb_opcode(pbCode);
if ((Opcode & 0xfbf08f00) == 0xf2400c00) { // movw r12,#xxxx
ULONG Opcode2 = fetch_thumb_opcode(pbCode+4);
if ((Opcode2 & 0xfbf08f00) == 0xf2c00c00) { // movt r12,#xxxx
ULONG Opcode3 = fetch_thumb_opcode(pbCode+8);
if (Opcode3 == 0xf8dcf000) { // ldr pc,[r12]
PBYTE pbTarget = (PBYTE)(((Opcode2 << 12) & 0xf7000000) |
((Opcode2 << 1) & 0x08000000) |
((Opcode2 << 16) & 0x00ff0000) |
((Opcode >> 4) & 0x0000f700) |
((Opcode >> 15) & 0x00000800) |
((Opcode >> 0) & 0x000000ff));
if (detour_is_imported(pbCode, pbTarget)) {
PBYTE pbNew = *(PBYTE *)pbTarget;
pbNew = DETOURS_PFUNC_TO_PBYTE(pbNew);
DETOUR_TRACE(("%p->%p: skipped over import table.\n", pbCode, pbNew));
return pbNew;
}
}
}
}
return pbCode;
}
inline void detour_find_jmp_bounds(PBYTE pbCode,
PDETOUR_TRAMPOLINE *ppLower,
PDETOUR_TRAMPOLINE *ppUpper)
{
// We have to place trampolines within +/- 2GB of code.
ULONG_PTR lo = detour_2gb_below((ULONG_PTR)pbCode);
ULONG_PTR hi = detour_2gb_above((ULONG_PTR)pbCode);
DETOUR_TRACE(("[%p..%p..%p]\n", (PVOID)lo, pbCode, (PVOID)hi));
*ppLower = (PDETOUR_TRAMPOLINE)lo;
*ppUpper = (PDETOUR_TRAMPOLINE)hi;
}
inline BOOL detour_does_code_end_function(PBYTE pbCode)
{
ULONG Opcode = fetch_thumb_opcode(pbCode);
if ((Opcode & 0xffffff87) == 0x4700 || // bx <reg>
(Opcode & 0xf800d000) == 0xf0009000) { // b <imm20>
return TRUE;
}
if ((Opcode & 0xffff8000) == 0xe8bd8000) { // pop {...,pc}
__debugbreak();
return TRUE;
}
if ((Opcode & 0xffffff00) == 0x0000bd00) { // pop {...,pc}
__debugbreak();
return TRUE;
}
return FALSE;
}
inline ULONG detour_is_code_filler(PBYTE pbCode)
{
if (pbCode[0] == 0x00 && pbCode[1] == 0xbf) { // nop.
return 2;
}
if (pbCode[0] == 0x00 && pbCode[1] == 0x00) { // zero-filled padding.
return 2;
}
return 0;
}
#endif // DETOURS_ARM
#ifdef DETOURS_ARM64
struct _DETOUR_TRAMPOLINE
{
// An ARM64 instruction is 4 bytes long.
//
// The overwrite is always composed of 3 instructions (12 bytes) which perform an indirect jump
// using _DETOUR_TRAMPOLINE::pbDetour as the address holding the target location.
//
// Copied instructions can expand.
//
// The scheme using MovImmediate can cause an instruction
// to grow as much as 6 times.
// That would be Bcc or Tbz with a large address space:
// 4 instructions to form immediate
// inverted tbz/bcc
// br
//
// An expansion of 4 is not uncommon -- bl/blr and small address space:
// 3 instructions to form immediate
// br or brl
//
// A theoretical maximum for rbCode is thefore 4*4*6 + 16 = 112 (another 16 for jmp to pbRemain).
//
// With literals, the maximum expansion is 5, including the literals: 4*4*5 + 16 = 96.
//
// The number is rounded up to 128. m_rbScratchDst should match this.
//
BYTE rbCode[128]; // target code + jmp to pbRemain
BYTE cbCode; // size of moved target code.
BYTE cbCodeBreak[3]; // padding to make debugging easier.
BYTE rbRestore[24]; // original target code.
BYTE cbRestore; // size of original target code.
BYTE cbRestoreBreak[3]; // padding to make debugging easier.
_DETOUR_ALIGN rAlign[8]; // instruction alignment array.
PBYTE pbRemain; // first instruction after moved code. [free list]
PBYTE pbDetour; // first instruction of detour function.
};
C_ASSERT(sizeof(_DETOUR_TRAMPOLINE) == 184);
enum {
SIZE_OF_JMP = 12
};
inline ULONG fetch_opcode(PBYTE pbCode)
{
return *(ULONG *)pbCode;
}
inline void write_opcode(PBYTE &pbCode, ULONG Opcode)
{
*(ULONG *)pbCode = Opcode;
pbCode += 4;
}
struct ARM64_INDIRECT_JMP {
struct {
ULONG Rd : 5;
ULONG immhi : 19;
ULONG iop : 5;
ULONG immlo : 2;
ULONG op : 1;
} ardp;
struct {
ULONG Rt : 5;
ULONG Rn : 5;
ULONG imm : 12;
ULONG opc : 2;
ULONG iop1 : 2;
ULONG V : 1;
ULONG iop2 : 3;
ULONG size : 2;
} ldr;
ULONG br;
};
#pragma warning(push)
#pragma warning(disable:4201)
union ARM64_INDIRECT_IMM {
struct {
ULONG64 pad : 12;
ULONG64 adrp_immlo : 2;
ULONG64 adrp_immhi : 19;
};
LONG64 value;
};
#pragma warning(pop)
PBYTE detour_gen_jmp_indirect(BYTE *pbCode, ULONG64 *pbJmpVal)
{
// adrp x17, [jmpval]
// ldr x17, [x17, jmpval]
// br x17
struct ARM64_INDIRECT_JMP *pIndJmp;
union ARM64_INDIRECT_IMM jmpIndAddr;
jmpIndAddr.value = (((LONG64)pbJmpVal) & 0xFFFFFFFFFFFFF000) -
(((LONG64)pbCode) & 0xFFFFFFFFFFFFF000);
pIndJmp = (struct ARM64_INDIRECT_JMP *)pbCode;
pbCode = (BYTE *)(pIndJmp + 1);
pIndJmp->ardp.Rd = 17;
pIndJmp->ardp.immhi = jmpIndAddr.adrp_immhi;
pIndJmp->ardp.iop = 0x10;
pIndJmp->ardp.immlo = jmpIndAddr.adrp_immlo;
pIndJmp->ardp.op = 1;
pIndJmp->ldr.Rt = 17;
pIndJmp->ldr.Rn = 17;
pIndJmp->ldr.imm = (((ULONG64)pbJmpVal) & 0xFFF) / 8;
pIndJmp->ldr.opc = 1;
pIndJmp->ldr.iop1 = 1;
pIndJmp->ldr.V = 0;
pIndJmp->ldr.iop2 = 7;
pIndJmp->ldr.size = 3;
pIndJmp->br = 0xD61F0220;
return pbCode;
}
PBYTE detour_gen_jmp_immediate(PBYTE pbCode, PBYTE *ppPool, PBYTE pbJmpVal)
{
PBYTE pbLiteral;
if (ppPool != NULL) {
*ppPool = *ppPool - 8;
pbLiteral = *ppPool;
}
else {
pbLiteral = pbCode + 8;
}
*((PBYTE*&)pbLiteral) = pbJmpVal;
LONG delta = (LONG)(pbLiteral - pbCode);
write_opcode(pbCode, 0x58000011 | ((delta / 4) << 5)); // LDR X17,[PC+n]
write_opcode(pbCode, 0xd61f0000 | (17 << 5)); // BR X17
if (ppPool == NULL) {
pbCode += 8;
}
return pbCode;
}
inline PBYTE detour_gen_brk(PBYTE pbCode, PBYTE pbLimit)
{
while (pbCode < pbLimit) {
write_opcode(pbCode, 0xd4100000 | (0xf000 << 5));
}
return pbCode;
}
inline INT64 detour_sign_extend(UINT64 value, UINT bits)
{
const UINT left = 64 - bits;
const INT64 m1 = -1;
const INT64 wide = (INT64)(value << left);
const INT64 sign = (wide < 0) ? (m1 << left) : 0;
return value | sign;
}
inline PBYTE detour_skip_jmp(PBYTE pbCode, PVOID *ppGlobals)
{
if (pbCode == NULL) {
return NULL;
}
if (ppGlobals != NULL) {
*ppGlobals = NULL;
}
// Skip over the import jump if there is one.
pbCode = (PBYTE)pbCode;
ULONG Opcode = fetch_opcode(pbCode);
if ((Opcode & 0x9f00001f) == 0x90000010) { // adrp x16, IAT
ULONG Opcode2 = fetch_opcode(pbCode + 4);
if ((Opcode2 & 0xffe003ff) == 0xf9400210) { // ldr x16, [x16, IAT]
ULONG Opcode3 = fetch_opcode(pbCode + 8);
if (Opcode3 == 0xd61f0200) { // br x16
/* https://static.docs.arm.com/ddi0487/bb/DDI0487B_b_armv8_arm.pdf
The ADRP instruction shifts a signed, 21-bit immediate left by 12 bits, adds it to the value of the program counter with
the bottom 12 bits cleared to zero, and then writes the result to a general-purpose register. This permits the
calculation of the address at a 4KB aligned memory region. In conjunction with an ADD (immediate) instruction, or
a Load/Store instruction with a 12-bit immediate offset, this allows for the calculation of, or access to, any address
within +/- 4GB of the current PC.
PC-rel. addressing
This section describes the encoding of the PC-rel. addressing instruction class. The encodings in this section are
decoded from Data Processing -- Immediate on page C4-226.
Add/subtract (immediate)
This section describes the encoding of the Add/subtract (immediate) instruction class. The encodings in this section
are decoded from Data Processing -- Immediate on page C4-226.
Decode fields
Instruction page
op
0 ADR
1 ADRP
C6.2.10 ADRP
Form PC-relative address to 4KB page adds an immediate value that is shifted left by 12 bits, to the PC value to
form a PC-relative address, with the bottom 12 bits masked out, and writes the result to the destination register.
ADRP <Xd>, <label>
imm = SignExtend(immhi:immlo:Zeros(12), 64);
31 30 29 28 27 26 25 24 23 5 4 0
1 immlo 1 0 0 0 0 immhi Rd
9 0
Rd is hardcoded as 0x10 above.
Immediate is 21 signed bits split into 2 bits and 19 bits, and is scaled by 4K.
*/
UINT64 const pageLow2 = (Opcode >> 29) & 3;
UINT64 const pageHigh19 = (Opcode >> 5) & ~(~0ui64 << 19);
INT64 const page = detour_sign_extend((pageHigh19 << 2) | pageLow2, 21) << 12;
/* https://static.docs.arm.com/ddi0487/bb/DDI0487B_b_armv8_arm.pdf
C6.2.101 LDR (immediate)
Load Register (immediate) loads a word or doubleword from memory and writes it to a register. The address that is
used for the load is calculated from a base register and an immediate offset.
The Unsigned offset variant scales the immediate offset value by the size of the value accessed before adding it
to the base register value.
Unsigned offset
64-bit variant Applies when size == 11.
31 30 29 28 27 26 25 24 23 22 21 10 9 5 4 0
1 x 1 1 1 0 0 1 0 1 imm12 Rn Rt
F 9 4 200 10
That is, two low 5 bit fields are registers, hardcoded as 0x10 and 0x10 << 5 above,
then unsigned size-unscaled (8) 12-bit offset, then opcode bits 0xF94.
*/
UINT64 const offset = ((Opcode2 >> 10) & ~(~0ui64 << 12)) << 3;
PBYTE const pbTarget = (PBYTE)((ULONG64)pbCode & 0xfffffffffffff000ULL) + page + offset;
if (detour_is_imported(pbCode, pbTarget)) {
PBYTE pbNew = *(PBYTE *)pbTarget;
DETOUR_TRACE(("%p->%p: skipped over import table.\n", pbCode, pbNew));
return pbNew;
}
}
}
}
return pbCode;
}
inline void detour_find_jmp_bounds(PBYTE pbCode,
PDETOUR_TRAMPOLINE *ppLower,
PDETOUR_TRAMPOLINE *ppUpper)
{
// The encoding used by detour_gen_jmp_indirect actually enables a
// displacement of +/- 4GiB. In the future, this could be changed to
// reflect that. For now, just reuse the x86 logic which is plenty.
ULONG_PTR lo = detour_2gb_below((ULONG_PTR)pbCode);
ULONG_PTR hi = detour_2gb_above((ULONG_PTR)pbCode);
DETOUR_TRACE(("[%p..%p..%p]\n", (PVOID)lo, pbCode, (PVOID)hi));
*ppLower = (PDETOUR_TRAMPOLINE)lo;
*ppUpper = (PDETOUR_TRAMPOLINE)hi;
}
inline BOOL detour_does_code_end_function(PBYTE pbCode)
{
ULONG Opcode = fetch_opcode(pbCode);
if ((Opcode & 0xfffffc1f) == 0xd65f0000 || // br <reg>
(Opcode & 0xfc000000) == 0x14000000) { // b <imm26>
return TRUE;
}
return FALSE;
}
inline ULONG detour_is_code_filler(PBYTE pbCode)
{
if (*(ULONG *)pbCode == 0xd503201f) { // nop.
return 4;
}
if (*(ULONG *)pbCode == 0x00000000) { // zero-filled padding.
return 4;
}
return 0;
}
#endif // DETOURS_ARM64
//////////////////////////////////////////////// Trampoline Memory Management.
//
struct DETOUR_REGION
{
ULONG dwSignature;
DETOUR_REGION * pNext; // Next region in list of regions.
DETOUR_TRAMPOLINE * pFree; // List of free trampolines in this region.
};
typedef DETOUR_REGION * PDETOUR_REGION;
const ULONG DETOUR_REGION_SIGNATURE = 'Rrtd';
const ULONG DETOUR_REGION_SIZE = 0x10000;
const ULONG DETOUR_TRAMPOLINES_PER_REGION = (DETOUR_REGION_SIZE
/ sizeof(DETOUR_TRAMPOLINE)) - 1;
static PDETOUR_REGION s_pRegions = NULL; // List of all regions.
static PDETOUR_REGION s_pRegion = NULL; // Default region.
static DWORD detour_writable_trampoline_regions()
{
// Mark all of the regions as writable.
for (PDETOUR_REGION pRegion = s_pRegions; pRegion != NULL; pRegion = pRegion->pNext) {
DWORD dwOld;
if (!VirtualProtect(pRegion, DETOUR_REGION_SIZE, PAGE_EXECUTE_READWRITE, &dwOld)) {
return GetLastError();
}
}
return NO_ERROR;
}
static void detour_runnable_trampoline_regions()
{
HANDLE hProcess = GetCurrentProcess();
// Mark all of the regions as executable.
for (PDETOUR_REGION pRegion = s_pRegions; pRegion != NULL; pRegion = pRegion->pNext) {
DWORD dwOld;
VirtualProtect(pRegion, DETOUR_REGION_SIZE, PAGE_EXECUTE_READ, &dwOld);
FlushInstructionCache(hProcess, pRegion, DETOUR_REGION_SIZE);
}
}
static PBYTE detour_alloc_round_down_to_region(PBYTE pbTry)
{
// WinXP64 returns free areas that aren't REGION aligned to 32-bit applications.
ULONG_PTR extra = ((ULONG_PTR)pbTry) & (DETOUR_REGION_SIZE - 1);
if (extra != 0) {
pbTry -= extra;
}
return pbTry;
}
static PBYTE detour_alloc_round_up_to_region(PBYTE pbTry)
{
// WinXP64 returns free areas that aren't REGION aligned to 32-bit applications.
ULONG_PTR extra = ((ULONG_PTR)pbTry) & (DETOUR_REGION_SIZE - 1);
if (extra != 0) {
ULONG_PTR adjust = DETOUR_REGION_SIZE - extra;
pbTry += adjust;
}
return pbTry;
}
// Starting at pbLo, try to allocate a memory region, continue until pbHi.
static PVOID detour_alloc_region_from_lo(PBYTE pbLo, PBYTE pbHi)
{
PBYTE pbTry = detour_alloc_round_up_to_region(pbLo);
DETOUR_TRACE((" Looking for free region in %p..%p from %p:\n", pbLo, pbHi, pbTry));
for (; pbTry < pbHi;) {
MEMORY_BASIC_INFORMATION mbi;
if (pbTry >= s_pSystemRegionLowerBound && pbTry <= s_pSystemRegionUpperBound) {
// Skip region reserved for system DLLs, but preserve address space entropy.
pbTry += 0x08000000;
continue;
}
ZeroMemory(&mbi, sizeof(mbi));
if (!VirtualQuery(pbTry, &mbi, sizeof(mbi))) {
break;
}
DETOUR_TRACE((" Try %p => %p..%p %6lx\n",
pbTry,
mbi.BaseAddress,
(PBYTE)mbi.BaseAddress + mbi.RegionSize - 1,
mbi.State));
if (mbi.State == MEM_FREE && mbi.RegionSize >= DETOUR_REGION_SIZE) {
PVOID pv = VirtualAlloc(pbTry,
DETOUR_REGION_SIZE,
MEM_COMMIT|MEM_RESERVE,
PAGE_EXECUTE_READWRITE);
if (pv != NULL) {
return pv;
}
else if (GetLastError() == ERROR_DYNAMIC_CODE_BLOCKED) {
return NULL;
}
pbTry += DETOUR_REGION_SIZE;
}
else {
pbTry = detour_alloc_round_up_to_region((PBYTE)mbi.BaseAddress + mbi.RegionSize);
}
}
return NULL;
}
// Starting at pbHi, try to allocate a memory region, continue until pbLo.
static PVOID detour_alloc_region_from_hi(PBYTE pbLo, PBYTE pbHi)
{
PBYTE pbTry = detour_alloc_round_down_to_region(pbHi - DETOUR_REGION_SIZE);
DETOUR_TRACE((" Looking for free region in %p..%p from %p:\n", pbLo, pbHi, pbTry));
for (; pbTry > pbLo;) {
MEMORY_BASIC_INFORMATION mbi;
DETOUR_TRACE((" Try %p\n", pbTry));
if (pbTry >= s_pSystemRegionLowerBound && pbTry <= s_pSystemRegionUpperBound) {
// Skip region reserved for system DLLs, but preserve address space entropy.
pbTry -= 0x08000000;
continue;
}
ZeroMemory(&mbi, sizeof(mbi));
if (!VirtualQuery(pbTry, &mbi, sizeof(mbi))) {
break;
}
DETOUR_TRACE((" Try %p => %p..%p %6lx\n",
pbTry,
mbi.BaseAddress,
(PBYTE)mbi.BaseAddress + mbi.RegionSize - 1,
mbi.State));
if (mbi.State == MEM_FREE && mbi.RegionSize >= DETOUR_REGION_SIZE) {
PVOID pv = VirtualAlloc(pbTry,
DETOUR_REGION_SIZE,
MEM_COMMIT|MEM_RESERVE,
PAGE_EXECUTE_READWRITE);
if (pv != NULL) {
return pv;
}
else if (GetLastError() == ERROR_DYNAMIC_CODE_BLOCKED) {
return NULL;
}
pbTry -= DETOUR_REGION_SIZE;
}
else {
pbTry = detour_alloc_round_down_to_region((PBYTE)mbi.AllocationBase
- DETOUR_REGION_SIZE);
}
}
return NULL;
}
static PVOID detour_alloc_trampoline_allocate_new(PBYTE pbTarget,
PDETOUR_TRAMPOLINE pLo,
PDETOUR_TRAMPOLINE pHi)
{
PVOID pbTry = NULL;
// NB: We must always also start the search at an offset from pbTarget
// in order to maintain ASLR entropy.
#if defined(DETOURS_64BIT)
// Try looking 1GB below or lower.
if (pbTry == NULL && pbTarget > (PBYTE)0x40000000) {
pbTry = detour_alloc_region_from_hi((PBYTE)pLo, pbTarget - 0x40000000);
}
// Try looking 1GB above or higher.
if (pbTry == NULL && pbTarget < (PBYTE)0xffffffff40000000) {
pbTry = detour_alloc_region_from_lo(pbTarget + 0x40000000, (PBYTE)pHi);
}
// Try looking 1GB below or higher.
if (pbTry == NULL && pbTarget > (PBYTE)0x40000000) {
pbTry = detour_alloc_region_from_lo(pbTarget - 0x40000000, pbTarget);
}
// Try looking 1GB above or lower.
if (pbTry == NULL && pbTarget < (PBYTE)0xffffffff40000000) {
pbTry = detour_alloc_region_from_hi(pbTarget, pbTarget + 0x40000000);
}
#endif
// Try anything below.
if (pbTry == NULL) {
pbTry = detour_alloc_region_from_hi((PBYTE)pLo, pbTarget);
}
// try anything above.
if (pbTry == NULL) {
pbTry = detour_alloc_region_from_lo(pbTarget, (PBYTE)pHi);
}
return pbTry;
}
PVOID WINAPI DetourAllocateRegionWithinJumpBounds(_In_ LPCVOID pbTarget,
_Out_ PDWORD pcbAllocatedSize)
{
PDETOUR_TRAMPOLINE pLo;
PDETOUR_TRAMPOLINE pHi;
detour_find_jmp_bounds((PBYTE)pbTarget, &pLo, &pHi);
PVOID pbNewlyAllocated =
detour_alloc_trampoline_allocate_new((PBYTE)pbTarget, pLo, pHi);
if (pbNewlyAllocated == NULL) {
DETOUR_TRACE(("Couldn't find available memory region!\n"));
*pcbAllocatedSize = 0;
return NULL;
}
*pcbAllocatedSize = DETOUR_REGION_SIZE;
return pbNewlyAllocated;
}
static PDETOUR_TRAMPOLINE detour_alloc_trampoline(PBYTE pbTarget)
{
// We have to place trampolines within +/- 2GB of target.
PDETOUR_TRAMPOLINE pLo;
PDETOUR_TRAMPOLINE pHi;
detour_find_jmp_bounds(pbTarget, &pLo, &pHi);
PDETOUR_TRAMPOLINE pTrampoline = NULL;
// Insure that there is a default region.
if (s_pRegion == NULL && s_pRegions != NULL) {
s_pRegion = s_pRegions;
}
// First check the default region for an valid free block.
if (s_pRegion != NULL && s_pRegion->pFree != NULL &&
s_pRegion->pFree >= pLo && s_pRegion->pFree <= pHi) {
found_region:
pTrampoline = s_pRegion->pFree;
// do a last sanity check on region.
if (pTrampoline < pLo || pTrampoline > pHi) {
return NULL;
}
s_pRegion->pFree = (PDETOUR_TRAMPOLINE)pTrampoline->pbRemain;
memset(pTrampoline, 0xcc, sizeof(*pTrampoline));
return pTrampoline;
}
// Then check the existing regions for a valid free block.
for (s_pRegion = s_pRegions; s_pRegion != NULL; s_pRegion = s_pRegion->pNext) {
if (s_pRegion != NULL && s_pRegion->pFree != NULL &&
s_pRegion->pFree >= pLo && s_pRegion->pFree <= pHi) {
goto found_region;
}
}
// We need to allocate a new region.
// Round pbTarget down to 64KB block.
pbTarget = pbTarget - (PtrToUlong(pbTarget) & 0xffff);
PVOID pbNewlyAllocated =
detour_alloc_trampoline_allocate_new(pbTarget, pLo, pHi);
if (pbNewlyAllocated != NULL) {
s_pRegion = (DETOUR_REGION*)pbNewlyAllocated;
s_pRegion->dwSignature = DETOUR_REGION_SIGNATURE;
s_pRegion->pFree = NULL;
s_pRegion->pNext = s_pRegions;
s_pRegions = s_pRegion;
DETOUR_TRACE((" Allocated region %p..%p\n\n",
s_pRegion, ((PBYTE)s_pRegion) + DETOUR_REGION_SIZE - 1));
// Put everything but the first trampoline on the free list.
PBYTE pFree = NULL;
pTrampoline = ((PDETOUR_TRAMPOLINE)s_pRegion) + 1;
for (int i = DETOUR_TRAMPOLINES_PER_REGION - 1; i > 1; i--) {
pTrampoline[i].pbRemain = pFree;
pFree = (PBYTE)&pTrampoline[i];
}
s_pRegion->pFree = (PDETOUR_TRAMPOLINE)pFree;
goto found_region;
}
DETOUR_TRACE(("Couldn't find available memory region!\n"));
return NULL;
}
static void detour_free_trampoline(PDETOUR_TRAMPOLINE pTrampoline)
{
PDETOUR_REGION pRegion = (PDETOUR_REGION)
((ULONG_PTR)pTrampoline & ~(ULONG_PTR)0xffff);
memset(pTrampoline, 0, sizeof(*pTrampoline));
pTrampoline->pbRemain = (PBYTE)pRegion->pFree;
pRegion->pFree = pTrampoline;
}
static BOOL detour_is_region_empty(PDETOUR_REGION pRegion)
{
// Stop if the region isn't a region (this would be bad).
if (pRegion->dwSignature != DETOUR_REGION_SIGNATURE) {
return FALSE;
}
PBYTE pbRegionBeg = (PBYTE)pRegion;
PBYTE pbRegionLim = pbRegionBeg + DETOUR_REGION_SIZE;
// Stop if any of the trampolines aren't free.
PDETOUR_TRAMPOLINE pTrampoline = ((PDETOUR_TRAMPOLINE)pRegion) + 1;
for (int i = 0; i < DETOUR_TRAMPOLINES_PER_REGION; i++) {
if (pTrampoline[i].pbRemain != NULL &&
(pTrampoline[i].pbRemain < pbRegionBeg ||
pTrampoline[i].pbRemain >= pbRegionLim)) {
return FALSE;
}
}
// OK, the region is empty.
return TRUE;
}
static void detour_free_unused_trampoline_regions()
{
PDETOUR_REGION *ppRegionBase = &s_pRegions;
PDETOUR_REGION pRegion = s_pRegions;
while (pRegion != NULL) {
if (detour_is_region_empty(pRegion)) {
*ppRegionBase = pRegion->pNext;
VirtualFree(pRegion, 0, MEM_RELEASE);
s_pRegion = NULL;
}
else {
ppRegionBase = &pRegion->pNext;
}
pRegion = *ppRegionBase;
}
}
///////////////////////////////////////////////////////// Transaction Structs.
//
struct DetourThread
{
DetourThread * pNext;
HANDLE hThread;
};
struct DetourOperation
{
DetourOperation * pNext;
BOOL fIsRemove;
PBYTE * ppbPointer;
PBYTE pbTarget;
PDETOUR_TRAMPOLINE pTrampoline;
ULONG dwPerm;
};
static BOOL s_fIgnoreTooSmall = FALSE;
static BOOL s_fRetainRegions = FALSE;
static LONG s_nPendingThreadId = 0; // Thread owning pending transaction.
static LONG s_nPendingError = NO_ERROR;
static PVOID * s_ppPendingError = NULL;
static DetourThread * s_pPendingThreads = NULL;
static DetourOperation * s_pPendingOperations = NULL;
//////////////////////////////////////////////////////////////////////////////
//
PVOID WINAPI DetourCodeFromPointer(_In_ PVOID pPointer,
_Out_opt_ PVOID *ppGlobals)
{
return detour_skip_jmp((PBYTE)pPointer, ppGlobals);
}
//////////////////////////////////////////////////////////// Transaction APIs.
//
BOOL WINAPI DetourSetIgnoreTooSmall(_In_ BOOL fIgnore)
{
BOOL fPrevious = s_fIgnoreTooSmall;
s_fIgnoreTooSmall = fIgnore;
return fPrevious;
}
BOOL WINAPI DetourSetRetainRegions(_In_ BOOL fRetain)
{
BOOL fPrevious = s_fRetainRegions;
s_fRetainRegions = fRetain;
return fPrevious;
}
PVOID WINAPI DetourSetSystemRegionLowerBound(_In_ PVOID pSystemRegionLowerBound)
{
PVOID pPrevious = s_pSystemRegionLowerBound;
s_pSystemRegionLowerBound = pSystemRegionLowerBound;
return pPrevious;
}
PVOID WINAPI DetourSetSystemRegionUpperBound(_In_ PVOID pSystemRegionUpperBound)
{
PVOID pPrevious = s_pSystemRegionUpperBound;
s_pSystemRegionUpperBound = pSystemRegionUpperBound;
return pPrevious;
}
LONG WINAPI DetourTransactionBegin()
{
// Only one transaction is allowed at a time.
_Benign_race_begin_
if (s_nPendingThreadId != 0) {
return ERROR_INVALID_OPERATION;
}
_Benign_race_end_
// Make sure only one thread can start a transaction.
if (InterlockedCompareExchange(&s_nPendingThreadId, (LONG)GetCurrentThreadId(), 0) != 0) {
return ERROR_INVALID_OPERATION;
}
s_pPendingOperations = NULL;
s_pPendingThreads = NULL;
s_ppPendingError = NULL;
// Make sure the trampoline pages are writable.
s_nPendingError = detour_writable_trampoline_regions();
return s_nPendingError;
}
LONG WINAPI DetourTransactionAbort()
{
if (s_nPendingThreadId != (LONG)GetCurrentThreadId()) {
return ERROR_INVALID_OPERATION;
}
// Restore all of the page permissions.
for (DetourOperation *o = s_pPendingOperations; o != NULL;) {
// We don't care if this fails, because the code is still accessible.
DWORD dwOld;
VirtualProtect(o->pbTarget, o->pTrampoline->cbRestore,
o->dwPerm, &dwOld);
if (!o->fIsRemove) {
if (o->pTrampoline) {
detour_free_trampoline(o->pTrampoline);
o->pTrampoline = NULL;
}
}
DetourOperation *n = o->pNext;
delete o;
o = n;
}
s_pPendingOperations = NULL;
// Make sure the trampoline pages are no longer writable.
detour_runnable_trampoline_regions();
// Resume any suspended threads.
for (DetourThread *t = s_pPendingThreads; t != NULL;) {
// There is nothing we can do if this fails.
ResumeThread(t->hThread);
DetourThread *n = t->pNext;
delete t;
t = n;
}
s_pPendingThreads = NULL;
s_nPendingThreadId = 0;
return NO_ERROR;
}
LONG WINAPI DetourTransactionCommit()
{
return DetourTransactionCommitEx(NULL);
}
static BYTE detour_align_from_trampoline(PDETOUR_TRAMPOLINE pTrampoline, BYTE obTrampoline)
{
for (LONG n = 0; n < ARRAYSIZE(pTrampoline->rAlign); n++) {
if (pTrampoline->rAlign[n].obTrampoline == obTrampoline) {
return pTrampoline->rAlign[n].obTarget;
}
}
return 0;
}
static LONG detour_align_from_target(PDETOUR_TRAMPOLINE pTrampoline, LONG obTarget)
{
for (LONG n = 0; n < ARRAYSIZE(pTrampoline->rAlign); n++) {
if (pTrampoline->rAlign[n].obTarget == obTarget) {
return pTrampoline->rAlign[n].obTrampoline;
}
}
return 0;
}
LONG WINAPI DetourTransactionCommitEx(_Out_opt_ PVOID **pppFailedPointer)
{
if (pppFailedPointer != NULL) {
// Used to get the last error.
*pppFailedPointer = s_ppPendingError;
}
if (s_nPendingThreadId != (LONG)GetCurrentThreadId()) {
return ERROR_INVALID_OPERATION;
}
// If any of the pending operations failed, then we abort the whole transaction.
if (s_nPendingError != NO_ERROR) {
DETOUR_BREAK();
DetourTransactionAbort();
return s_nPendingError;
}
// Common variables.
DetourOperation *o;
DetourThread *t;
BOOL freed = FALSE;
// Insert or remove each of the detours.
for (o = s_pPendingOperations; o != NULL; o = o->pNext) {
if (o->fIsRemove) {
CopyMemory(o->pbTarget,
o->pTrampoline->rbRestore,
o->pTrampoline->cbRestore);
#ifdef DETOURS_IA64
*o->ppbPointer = (PBYTE)o->pTrampoline->ppldTarget;
#endif // DETOURS_IA64
#ifdef DETOURS_X86
*o->ppbPointer = o->pbTarget;
#endif // DETOURS_X86
#ifdef DETOURS_X64
*o->ppbPointer = o->pbTarget;
#endif // DETOURS_X64
#ifdef DETOURS_ARM
*o->ppbPointer = DETOURS_PBYTE_TO_PFUNC(o->pbTarget);
#endif // DETOURS_ARM
#ifdef DETOURS_ARM64
*o->ppbPointer = o->pbTarget;
#endif // DETOURS_ARM
}
else {
DETOUR_TRACE(("detours: pbTramp =%p, pbRemain=%p, pbDetour=%p, cbRestore=%u\n",
o->pTrampoline,
o->pTrampoline->pbRemain,
o->pTrampoline->pbDetour,
o->pTrampoline->cbRestore));
DETOUR_TRACE(("detours: pbTarget=%p: "
"%02x %02x %02x %02x "
"%02x %02x %02x %02x "
"%02x %02x %02x %02x [before]\n",
o->pbTarget,
o->pbTarget[0], o->pbTarget[1], o->pbTarget[2], o->pbTarget[3],
o->pbTarget[4], o->pbTarget[5], o->pbTarget[6], o->pbTarget[7],
o->pbTarget[8], o->pbTarget[9], o->pbTarget[10], o->pbTarget[11]));
#ifdef DETOURS_IA64
((DETOUR_IA64_BUNDLE*)o->pbTarget)
->SetBrl((UINT64)&o->pTrampoline->bAllocFrame);
*o->ppbPointer = (PBYTE)&o->pTrampoline->pldTrampoline;
#endif // DETOURS_IA64
#ifdef DETOURS_X64
detour_gen_jmp_indirect(o->pTrampoline->rbCodeIn, &o->pTrampoline->pbDetour);
PBYTE pbCode = detour_gen_jmp_immediate(o->pbTarget, o->pTrampoline->rbCodeIn);
pbCode = detour_gen_brk(pbCode, o->pTrampoline->pbRemain);
*o->ppbPointer = o->pTrampoline->rbCode;
UNREFERENCED_PARAMETER(pbCode);
#endif // DETOURS_X64
#ifdef DETOURS_X86
PBYTE pbCode = detour_gen_jmp_immediate(o->pbTarget, o->pTrampoline->pbDetour);
pbCode = detour_gen_brk(pbCode, o->pTrampoline->pbRemain);
*o->ppbPointer = o->pTrampoline->rbCode;
UNREFERENCED_PARAMETER(pbCode);
#endif // DETOURS_X86
#ifdef DETOURS_ARM
PBYTE pbCode = detour_gen_jmp_immediate(o->pbTarget, NULL, o->pTrampoline->pbDetour);
pbCode = detour_gen_brk(pbCode, o->pTrampoline->pbRemain);
*o->ppbPointer = DETOURS_PBYTE_TO_PFUNC(o->pTrampoline->rbCode);
UNREFERENCED_PARAMETER(pbCode);
#endif // DETOURS_ARM
#ifdef DETOURS_ARM64
PBYTE pbCode = detour_gen_jmp_indirect(o->pbTarget, (ULONG64*)&(o->pTrampoline->pbDetour));
pbCode = detour_gen_brk(pbCode, o->pTrampoline->pbRemain);
*o->ppbPointer = o->pTrampoline->rbCode;
UNREFERENCED_PARAMETER(pbCode);
#endif // DETOURS_ARM64
DETOUR_TRACE(("detours: pbTarget=%p: "
"%02x %02x %02x %02x "
"%02x %02x %02x %02x "
"%02x %02x %02x %02x [after]\n",
o->pbTarget,
o->pbTarget[0], o->pbTarget[1], o->pbTarget[2], o->pbTarget[3],
o->pbTarget[4], o->pbTarget[5], o->pbTarget[6], o->pbTarget[7],
o->pbTarget[8], o->pbTarget[9], o->pbTarget[10], o->pbTarget[11]));
DETOUR_TRACE(("detours: pbTramp =%p: "
"%02x %02x %02x %02x "
"%02x %02x %02x %02x "
"%02x %02x %02x %02x\n",
o->pTrampoline,
o->pTrampoline->rbCode[0], o->pTrampoline->rbCode[1],
o->pTrampoline->rbCode[2], o->pTrampoline->rbCode[3],
o->pTrampoline->rbCode[4], o->pTrampoline->rbCode[5],
o->pTrampoline->rbCode[6], o->pTrampoline->rbCode[7],
o->pTrampoline->rbCode[8], o->pTrampoline->rbCode[9],
o->pTrampoline->rbCode[10], o->pTrampoline->rbCode[11]));
#ifdef DETOURS_IA64
DETOUR_TRACE(("\n"));
DETOUR_TRACE(("detours: &pldTrampoline =%p\n",
&o->pTrampoline->pldTrampoline));
DETOUR_TRACE(("detours: &bMovlTargetGp =%p [%p]\n",
&o->pTrampoline->bMovlTargetGp,
o->pTrampoline->bMovlTargetGp.GetMovlGp()));
DETOUR_TRACE(("detours: &rbCode =%p [%p]\n",
&o->pTrampoline->rbCode,
((DETOUR_IA64_BUNDLE&)o->pTrampoline->rbCode).GetBrlTarget()));
DETOUR_TRACE(("detours: &bBrlRemainEip =%p [%p]\n",
&o->pTrampoline->bBrlRemainEip,
o->pTrampoline->bBrlRemainEip.GetBrlTarget()));
DETOUR_TRACE(("detours: &bMovlDetourGp =%p [%p]\n",
&o->pTrampoline->bMovlDetourGp,
o->pTrampoline->bMovlDetourGp.GetMovlGp()));
DETOUR_TRACE(("detours: &bBrlDetourEip =%p [%p]\n",
&o->pTrampoline->bCallDetour,
o->pTrampoline->bCallDetour.GetBrlTarget()));
DETOUR_TRACE(("detours: pldDetour =%p [%p]\n",
o->pTrampoline->ppldDetour->EntryPoint,
o->pTrampoline->ppldDetour->GlobalPointer));
DETOUR_TRACE(("detours: pldTarget =%p [%p]\n",
o->pTrampoline->ppldTarget->EntryPoint,
o->pTrampoline->ppldTarget->GlobalPointer));
DETOUR_TRACE(("detours: pbRemain =%p\n",
o->pTrampoline->pbRemain));
DETOUR_TRACE(("detours: pbDetour =%p\n",
o->pTrampoline->pbDetour));
DETOUR_TRACE(("\n"));
#endif // DETOURS_IA64
}
}
// Update any suspended threads.
for (t = s_pPendingThreads; t != NULL; t = t->pNext) {
CONTEXT cxt;
cxt.ContextFlags = CONTEXT_CONTROL;
#undef DETOURS_EIP
#ifdef DETOURS_X86
#define DETOURS_EIP Eip
#endif // DETOURS_X86
#ifdef DETOURS_X64
#define DETOURS_EIP Rip
#endif // DETOURS_X64
#ifdef DETOURS_IA64
#define DETOURS_EIP StIIP
#endif // DETOURS_IA64
#ifdef DETOURS_ARM
#define DETOURS_EIP Pc
#endif // DETOURS_ARM
#ifdef DETOURS_ARM64
#define DETOURS_EIP Pc
#endif // DETOURS_ARM64
typedef ULONG_PTR DETOURS_EIP_TYPE;
if (GetThreadContext(t->hThread, &cxt)) {
for (o = s_pPendingOperations; o != NULL; o = o->pNext) {
if (o->fIsRemove) {
if (cxt.DETOURS_EIP >= (DETOURS_EIP_TYPE)(ULONG_PTR)o->pTrampoline &&
cxt.DETOURS_EIP < (DETOURS_EIP_TYPE)((ULONG_PTR)o->pTrampoline
+ sizeof(o->pTrampoline))
) {
cxt.DETOURS_EIP = (DETOURS_EIP_TYPE)
((ULONG_PTR)o->pbTarget
+ detour_align_from_trampoline(o->pTrampoline,
(BYTE)(cxt.DETOURS_EIP
- (DETOURS_EIP_TYPE)(ULONG_PTR)
o->pTrampoline)));
SetThreadContext(t->hThread, &cxt);
}
}
else {
if (cxt.DETOURS_EIP >= (DETOURS_EIP_TYPE)(ULONG_PTR)o->pbTarget &&
cxt.DETOURS_EIP < (DETOURS_EIP_TYPE)((ULONG_PTR)o->pbTarget
+ o->pTrampoline->cbRestore)
) {
cxt.DETOURS_EIP = (DETOURS_EIP_TYPE)
((ULONG_PTR)o->pTrampoline
+ detour_align_from_target(o->pTrampoline,
(BYTE)(cxt.DETOURS_EIP
- (DETOURS_EIP_TYPE)(ULONG_PTR)
o->pbTarget)));
SetThreadContext(t->hThread, &cxt);
}
}
}
}
#undef DETOURS_EIP
}
// Restore all of the page permissions and flush the icache.
HANDLE hProcess = GetCurrentProcess();
for (o = s_pPendingOperations; o != NULL;) {
// We don't care if this fails, because the code is still accessible.
DWORD dwOld;
VirtualProtect(o->pbTarget, o->pTrampoline->cbRestore, o->dwPerm, &dwOld);
FlushInstructionCache(hProcess, o->pbTarget, o->pTrampoline->cbRestore);
if (o->fIsRemove && o->pTrampoline) {
detour_free_trampoline(o->pTrampoline);
o->pTrampoline = NULL;
freed = true;
}
DetourOperation *n = o->pNext;
delete o;
o = n;
}
s_pPendingOperations = NULL;
// Free any trampoline regions that are now unused.
if (freed && !s_fRetainRegions) {
detour_free_unused_trampoline_regions();
}
// Make sure the trampoline pages are no longer writable.
detour_runnable_trampoline_regions();
// Resume any suspended threads.
for (t = s_pPendingThreads; t != NULL;) {
// There is nothing we can do if this fails.
ResumeThread(t->hThread);
DetourThread *n = t->pNext;
delete t;
t = n;
}
s_pPendingThreads = NULL;
s_nPendingThreadId = 0;
if (pppFailedPointer != NULL) {
*pppFailedPointer = s_ppPendingError;
}
return s_nPendingError;
}
LONG WINAPI DetourUpdateThread(_In_ HANDLE hThread)
{
LONG error;
// If any of the pending operations failed, then we don't need to do this.
if (s_nPendingError != NO_ERROR) {
return s_nPendingError;
}
// Silently (and safely) drop any attempt to suspend our own thread.
if (hThread == GetCurrentThread()) {
return NO_ERROR;
}
DetourThread *t = new NOTHROW DetourThread;
if (t == NULL) {
error = ERROR_NOT_ENOUGH_MEMORY;
fail:
if (t != NULL) {
delete t;
t = NULL;
}
s_nPendingError = error;
s_ppPendingError = NULL;
DETOUR_BREAK();
return error;
}
if (SuspendThread(hThread) == (DWORD)-1) {
error = GetLastError();
DETOUR_BREAK();
goto fail;
}
t->hThread = hThread;
t->pNext = s_pPendingThreads;
s_pPendingThreads = t;
return NO_ERROR;
}
///////////////////////////////////////////////////////////// Transacted APIs.
//
LONG WINAPI DetourAttach(_Inout_ PVOID *ppPointer,
_In_ PVOID pDetour)
{
return DetourAttachEx(ppPointer, pDetour, NULL, NULL, NULL);
}
LONG WINAPI DetourAttachEx(_Inout_ PVOID *ppPointer,
_In_ PVOID pDetour,
_Out_opt_ PDETOUR_TRAMPOLINE *ppRealTrampoline,
_Out_opt_ PVOID *ppRealTarget,
_Out_opt_ PVOID *ppRealDetour)
{
LONG error = NO_ERROR;
if (ppRealTrampoline != NULL) {
*ppRealTrampoline = NULL;
}
if (ppRealTarget != NULL) {
*ppRealTarget = NULL;
}
if (ppRealDetour != NULL) {
*ppRealDetour = NULL;
}
if (pDetour == NULL) {
DETOUR_TRACE(("empty detour\n"));
return ERROR_INVALID_PARAMETER;
}
if (s_nPendingThreadId != (LONG)GetCurrentThreadId()) {
DETOUR_TRACE(("transaction conflict with thread id=%ld\n", s_nPendingThreadId));
return ERROR_INVALID_OPERATION;
}
// If any of the pending operations failed, then we don't need to do this.
if (s_nPendingError != NO_ERROR) {
DETOUR_TRACE(("pending transaction error=%ld\n", s_nPendingError));
return s_nPendingError;
}
if (ppPointer == NULL) {
DETOUR_TRACE(("ppPointer is null\n"));
return ERROR_INVALID_HANDLE;
}
if (*ppPointer == NULL) {
error = ERROR_INVALID_HANDLE;
s_nPendingError = error;
s_ppPendingError = ppPointer;
DETOUR_TRACE(("*ppPointer is null (ppPointer=%p)\n", ppPointer));
DETOUR_BREAK();
return error;
}
PBYTE pbTarget = (PBYTE)*ppPointer;
PDETOUR_TRAMPOLINE pTrampoline = NULL;
DetourOperation *o = NULL;
#ifdef DETOURS_IA64
PPLABEL_DESCRIPTOR ppldDetour = (PPLABEL_DESCRIPTOR)pDetour;
PPLABEL_DESCRIPTOR ppldTarget = (PPLABEL_DESCRIPTOR)pbTarget;
PVOID pDetourGlobals = NULL;
PVOID pTargetGlobals = NULL;
pDetour = (PBYTE)DetourCodeFromPointer(ppldDetour, &pDetourGlobals);
pbTarget = (PBYTE)DetourCodeFromPointer(ppldTarget, &pTargetGlobals);
DETOUR_TRACE((" ppldDetour=%p, code=%p [gp=%p]\n",
ppldDetour, pDetour, pDetourGlobals));
DETOUR_TRACE((" ppldTarget=%p, code=%p [gp=%p]\n",
ppldTarget, pbTarget, pTargetGlobals));
#else // DETOURS_IA64
pbTarget = (PBYTE)DetourCodeFromPointer(pbTarget, NULL);
pDetour = DetourCodeFromPointer(pDetour, NULL);
#endif // !DETOURS_IA64
// Don't follow a jump if its destination is the target function.
// This happens when the detour does nothing other than call the target.
if (pDetour == (PVOID)pbTarget) {
if (s_fIgnoreTooSmall) {
goto stop;
}
else {
DETOUR_BREAK();
goto fail;
}
}
if (ppRealTarget != NULL) {
*ppRealTarget = pbTarget;
}
if (ppRealDetour != NULL) {
*ppRealDetour = pDetour;
}
o = new NOTHROW DetourOperation;
if (o == NULL) {
error = ERROR_NOT_ENOUGH_MEMORY;
fail:
s_nPendingError = error;
DETOUR_BREAK();
stop:
if (pTrampoline != NULL) {
detour_free_trampoline(pTrampoline);
pTrampoline = NULL;
if (ppRealTrampoline != NULL) {
*ppRealTrampoline = NULL;
}
}
if (o != NULL) {
delete o;
o = NULL;
}
if (ppRealDetour != NULL) {
*ppRealDetour = NULL;
}
if (ppRealTarget != NULL) {
*ppRealTarget = NULL;
}
s_ppPendingError = ppPointer;
return error;
}
pTrampoline = detour_alloc_trampoline(pbTarget);
if (pTrampoline == NULL) {
error = ERROR_NOT_ENOUGH_MEMORY;
DETOUR_BREAK();
goto fail;
}
if (ppRealTrampoline != NULL) {
*ppRealTrampoline = pTrampoline;
}
DETOUR_TRACE(("detours: pbTramp=%p, pDetour=%p\n", pTrampoline, pDetour));
memset(pTrampoline->rAlign, 0, sizeof(pTrampoline->rAlign));
// Determine the number of movable target instructions.
PBYTE pbSrc = pbTarget;
PBYTE pbTrampoline = pTrampoline->rbCode;
#ifdef DETOURS_IA64
PBYTE pbPool = (PBYTE)(&pTrampoline->bBranchIslands + 1);
#else
PBYTE pbPool = pbTrampoline + sizeof(pTrampoline->rbCode);
#endif
ULONG cbTarget = 0;
ULONG cbJump = SIZE_OF_JMP;
ULONG nAlign = 0;
#ifdef DETOURS_ARM
// On ARM, we need an extra instruction when the function isn't 32-bit aligned.
// Check if the existing code is another detour (or at least a similar
// "ldr pc, [PC+0]" jump.
if ((ULONG)pbTarget & 2) {
cbJump += 2;
ULONG op = fetch_thumb_opcode(pbSrc);
if (op == 0xbf00) {
op = fetch_thumb_opcode(pbSrc + 2);
if (op == 0xf8dff000) { // LDR PC,[PC]
*((PUSHORT&)pbTrampoline)++ = *((PUSHORT&)pbSrc)++;
*((PULONG&)pbTrampoline)++ = *((PULONG&)pbSrc)++;
*((PULONG&)pbTrampoline)++ = *((PULONG&)pbSrc)++;
cbTarget = (LONG)(pbSrc - pbTarget);
// We will fall through the "while" because cbTarget is now >= cbJump.
}
}
}
else {
ULONG op = fetch_thumb_opcode(pbSrc);
if (op == 0xf8dff000) { // LDR PC,[PC]
*((PULONG&)pbTrampoline)++ = *((PULONG&)pbSrc)++;
*((PULONG&)pbTrampoline)++ = *((PULONG&)pbSrc)++;
cbTarget = (LONG)(pbSrc - pbTarget);
// We will fall through the "while" because cbTarget is now >= cbJump.
}
}
#endif
while (cbTarget < cbJump) {
PBYTE pbOp = pbSrc;
LONG lExtra = 0;
DETOUR_TRACE((" DetourCopyInstruction(%p,%p)\n",
pbTrampoline, pbSrc));
pbSrc = (PBYTE)
DetourCopyInstruction(pbTrampoline, (PVOID*)&pbPool, pbSrc, NULL, &lExtra);
DETOUR_TRACE((" DetourCopyInstruction() = %p (%d bytes)\n",
pbSrc, (int)(pbSrc - pbOp)));
pbTrampoline += (pbSrc - pbOp) + lExtra;
cbTarget = (LONG)(pbSrc - pbTarget);
pTrampoline->rAlign[nAlign].obTarget = cbTarget;
pTrampoline->rAlign[nAlign].obTrampoline = pbTrampoline - pTrampoline->rbCode;
nAlign++;
if (nAlign >= ARRAYSIZE(pTrampoline->rAlign)) {
break;
}
if (detour_does_code_end_function(pbOp)) {
break;
}
}
// Consume, but don't duplicate padding if it is needed and available.
while (cbTarget < cbJump) {
LONG cFiller = detour_is_code_filler(pbSrc);
if (cFiller == 0) {
break;
}
pbSrc += cFiller;
cbTarget = (LONG)(pbSrc - pbTarget);
}
#if DETOUR_DEBUG
{
DETOUR_TRACE((" detours: rAlign ["));
LONG n = 0;
for (n = 0; n < ARRAYSIZE(pTrampoline->rAlign); n++) {
if (pTrampoline->rAlign[n].obTarget == 0 &&
pTrampoline->rAlign[n].obTrampoline == 0) {
break;
}
DETOUR_TRACE((" %u/%u",
pTrampoline->rAlign[n].obTarget,
pTrampoline->rAlign[n].obTrampoline
));
}
DETOUR_TRACE((" ]\n"));
}
#endif
if (cbTarget < cbJump || nAlign > ARRAYSIZE(pTrampoline->rAlign)) {
// Too few instructions.
error = ERROR_INVALID_BLOCK;
if (s_fIgnoreTooSmall) {
goto stop;
}
else {
DETOUR_BREAK();
goto fail;
}
}
if (pbTrampoline > pbPool) {
__debugbreak();
}
pTrampoline->cbCode = (BYTE)(pbTrampoline - pTrampoline->rbCode);
pTrampoline->cbRestore = (BYTE)cbTarget;
CopyMemory(pTrampoline->rbRestore, pbTarget, cbTarget);
#if !defined(DETOURS_IA64)
if (cbTarget > sizeof(pTrampoline->rbCode) - cbJump) {
// Too many instructions.
error = ERROR_INVALID_HANDLE;
DETOUR_BREAK();
goto fail;
}
#endif // !DETOURS_IA64
pTrampoline->pbRemain = pbTarget + cbTarget;
pTrampoline->pbDetour = (PBYTE)pDetour;
#ifdef DETOURS_IA64
pTrampoline->ppldDetour = ppldDetour;
pTrampoline->ppldTarget = ppldTarget;
pTrampoline->pldTrampoline.EntryPoint = (UINT64)&pTrampoline->bMovlTargetGp;
pTrampoline->pldTrampoline.GlobalPointer = (UINT64)pDetourGlobals;
((DETOUR_IA64_BUNDLE *)pTrampoline->rbCode)->SetStop();
pTrampoline->bMovlTargetGp.SetMovlGp((UINT64)pTargetGlobals);
pTrampoline->bBrlRemainEip.SetBrl((UINT64)pTrampoline->pbRemain);
// Alloc frame: alloc r41=ar.pfs,11,0,8,0; mov r40=rp
pTrampoline->bAllocFrame.wide[0] = 0x00000580164d480c;
pTrampoline->bAllocFrame.wide[1] = 0x00c4000500000200;
// save r36, r37, r38.
pTrampoline->bSave37to39.wide[0] = 0x031021004e019001;
pTrampoline->bSave37to39.wide[1] = 0x8401280600420098;
// save r34,r35,r36: adds r47=0,r36; adds r46=0,r35; adds r45=0,r34
pTrampoline->bSave34to36.wide[0] = 0x02e0210048017800;
pTrampoline->bSave34to36.wide[1] = 0x84011005a042008c;
// save gp,r32,r33" adds r44=0,r33; adds r43=0,r32; adds r42=0,gp ;;
pTrampoline->bSaveGPto33.wide[0] = 0x02b0210042016001;
pTrampoline->bSaveGPto33.wide[1] = 0x8400080540420080;
// set detour GP.
pTrampoline->bMovlDetourGp.SetMovlGp((UINT64)pDetourGlobals);
// call detour: brl.call.sptk.few rp=detour ;;
pTrampoline->bCallDetour.wide[0] = 0x0000000100000005;
pTrampoline->bCallDetour.wide[1] = 0xd000001000000000;
pTrampoline->bCallDetour.SetBrlTarget((UINT64)pDetour);
// pop frame & gp: adds gp=0,r42; mov rp=r40,+0;; mov.i ar.pfs=r41
gitextract_0qf8lc79/ ├── .gitattributes ├── .gitignore ├── 001.NVL/ │ ├── BKEngine/ │ │ ├── BKEFileNameDumper/ │ │ │ ├── BKEFileNameDumper/ │ │ │ │ ├── BKEFileNameDumper.vcxproj │ │ │ │ ├── BKEFileNameDumper.vcxproj.filters │ │ │ │ └── dllmain.cpp │ │ │ ├── BKEFileNameDumper.sln │ │ │ ├── Common/ │ │ │ │ ├── encoding.cpp │ │ │ │ ├── encoding.h │ │ │ │ ├── file.cpp │ │ │ │ ├── file.h │ │ │ │ ├── log.cpp │ │ │ │ ├── log.h │ │ │ │ ├── path.cpp │ │ │ │ ├── path.h │ │ │ │ ├── pe.cpp │ │ │ │ ├── pe.h │ │ │ │ ├── stringhelper.cpp │ │ │ │ ├── stringhelper.h │ │ │ │ ├── util.cpp │ │ │ │ └── util.h │ │ │ ├── Detours/ │ │ │ │ ├── creatwth.cpp │ │ │ │ ├── detours.cpp │ │ │ │ ├── detours.h │ │ │ │ ├── disasm.cpp │ │ │ │ ├── image.cpp │ │ │ │ ├── modules.cpp │ │ │ │ └── uimports.cpp │ │ │ └── Loader/ │ │ │ ├── Loader.cpp │ │ │ ├── Loader.vcxproj │ │ │ └── Loader.vcxproj.filters │ │ ├── BKEngine/ │ │ │ ├── BKEngine.sln │ │ │ ├── BKEngineStatic/ │ │ │ │ ├── BKEngine/ │ │ │ │ │ ├── BKARCFileBase.cs │ │ │ │ │ ├── BKARCFileV20.cs │ │ │ │ │ ├── BKARCFileV21.cs │ │ │ │ │ ├── BKARCFileV40.cs │ │ │ │ │ ├── BZip2Helper.cs │ │ │ │ │ └── ZstdHelper.cs │ │ │ │ └── BKEngineStatic.csproj │ │ │ └── ExtractGUI/ │ │ │ ├── ExtractGUI.csproj │ │ │ ├── MainForm.Designer.cs │ │ │ ├── MainForm.cs │ │ │ ├── MainForm.resx │ │ │ ├── Program.cs │ │ │ └── Properties/ │ │ │ └── PublishProfiles/ │ │ │ └── FolderProfile64.pubxml │ │ └── Manual.md │ ├── NVLKrkr2/ │ │ ├── DataBase/ │ │ │ └── FileNameList/ │ │ │ ├── Conspiracy Field Fog Shadow.lst │ │ │ ├── Conspiracy Field Snow Trap.lst │ │ │ └── the Melody of Iris.lst │ │ ├── Manual.md │ │ ├── NVLKR2Extract/ │ │ │ ├── ExtractGUI/ │ │ │ │ ├── ExtractGUI.csproj │ │ │ │ ├── MainForm.Designer.cs │ │ │ │ ├── MainForm.cs │ │ │ │ ├── MainForm.resx │ │ │ │ ├── Program.cs │ │ │ │ └── Properties/ │ │ │ │ └── PublishProfiles/ │ │ │ │ └── FolderProfile64.pubxml │ │ │ ├── HashDecoder/ │ │ │ │ ├── BinaryDataConvert.cs │ │ │ │ ├── HashDecoder.csproj │ │ │ │ ├── MainForm.Designer.cs │ │ │ │ ├── MainForm.cs │ │ │ │ ├── MainForm.resx │ │ │ │ ├── PathUtil.cs │ │ │ │ ├── Program.cs │ │ │ │ ├── Properties/ │ │ │ │ │ └── PublishProfiles/ │ │ │ │ │ └── FolderProfile64.pubxml │ │ │ │ ├── TextCreator.Designer.cs │ │ │ │ ├── TextCreator.cs │ │ │ │ └── TextCreator.resx │ │ │ ├── NVLKR2.sln │ │ │ └── NVLKR2Static/ │ │ │ ├── NVLKR2Static.csproj │ │ │ └── NvlKr2/ │ │ │ ├── GameKey.cs │ │ │ ├── XP3Archive.cs │ │ │ ├── XP3Filter.cs │ │ │ └── Zlib.cs │ │ └── NVLKrkrDump/ │ │ ├── Common/ │ │ │ ├── encoding.cpp │ │ │ ├── encoding.h │ │ │ ├── file.cpp │ │ │ ├── file.h │ │ │ ├── log.cpp │ │ │ ├── log.h │ │ │ ├── path.cpp │ │ │ ├── path.h │ │ │ ├── pe.cpp │ │ │ ├── pe.h │ │ │ ├── stringhelper.cpp │ │ │ ├── stringhelper.h │ │ │ ├── util.cpp │ │ │ └── util.h │ │ ├── Detours/ │ │ │ ├── creatwth.cpp │ │ │ ├── detours.cpp │ │ │ ├── detours.h │ │ │ ├── disasm.cpp │ │ │ ├── image.cpp │ │ │ ├── modules.cpp │ │ │ └── uimports.cpp │ │ ├── KrkrPlugin/ │ │ │ ├── tp_stub.cpp │ │ │ └── tp_stub.h │ │ ├── NVLKrkrDump/ │ │ │ ├── NVLKrkrDump.vcxproj │ │ │ ├── NVLKrkrDump.vcxproj.filters │ │ │ └── dllmain.cpp │ │ ├── NVLKrkrDump.sln │ │ └── NVLKrkrDumpLoader/ │ │ ├── KrkrDumpLoader.cpp │ │ ├── KrkrDumpLoader.vcxproj │ │ └── KrkrDumpLoader.vcxproj.filters │ ├── NVLUnity/ │ │ ├── Manual.md │ │ ├── NVLUnityDecryptor/ │ │ │ ├── DecryptorGui/ │ │ │ │ ├── DecryptorGui.csproj │ │ │ │ ├── MainForm.Designer.cs │ │ │ │ ├── MainForm.cs │ │ │ │ ├── MainForm.resx │ │ │ │ ├── Program.cs │ │ │ │ └── Properties/ │ │ │ │ └── PublishProfiles/ │ │ │ │ └── FolderProfile64.pubxml │ │ │ ├── NvlUnity.sln │ │ │ └── NvlUnityDecrypt/ │ │ │ ├── NvlUnity/ │ │ │ │ └── ArchiveCrypto.cs │ │ │ ├── NvlUnity.V1/ │ │ │ │ ├── GameDBV1.cs │ │ │ │ └── NVLFilterV1.cs │ │ │ └── NvlUnityDecryptor.csproj │ │ └── NVLUnityScriptDumper/ │ │ ├── Common/ │ │ │ ├── encoding.cpp │ │ │ ├── encoding.h │ │ │ ├── file.cpp │ │ │ ├── file.h │ │ │ ├── log.cpp │ │ │ ├── log.h │ │ │ ├── path.cpp │ │ │ ├── path.h │ │ │ ├── pe.cpp │ │ │ ├── pe.h │ │ │ ├── stringhelper.cpp │ │ │ ├── stringhelper.h │ │ │ ├── util.cpp │ │ │ └── util.h │ │ ├── Detours/ │ │ │ ├── creatwth.cpp │ │ │ ├── detours.cpp │ │ │ ├── detours.h │ │ │ ├── disasm.cpp │ │ │ ├── image.cpp │ │ │ ├── modules.cpp │ │ │ └── uimports.cpp │ │ ├── DumperGUI/ │ │ │ ├── DumperGUI.rc │ │ │ ├── DumperGUI.vcxproj │ │ │ ├── DumperGUI.vcxproj.filters │ │ │ ├── dllmain.cpp │ │ │ └── resource.h │ │ ├── Il2Cpp/ │ │ │ ├── Il2CppAPI.cpp │ │ │ ├── Il2CppAPI.h │ │ │ └── Il2CppClass.h │ │ ├── Loader/ │ │ │ ├── Loader.cpp │ │ │ ├── Loader.vcxproj │ │ │ └── Loader.vcxproj.filters │ │ ├── NVLUnityScriptDumper.sln │ │ └── ScriptDumper/ │ │ ├── Export.def │ │ ├── ScriptDumper.vcxproj │ │ ├── ScriptDumper.vcxproj.filters │ │ └── dllmain.cpp │ └── NVLWeb/ │ ├── ConsoleTest/ │ │ ├── ConsoleTest.csproj │ │ └── Program.cs │ ├── EndOfTheWorldExtractor/ │ │ ├── EndOfTheWorldExtractor.csproj │ │ └── Program.cs │ ├── Manual.md │ ├── NVLWeb.sln │ └── NVLWebStatic/ │ ├── ASARPackage.cs │ ├── Crypto.cs │ ├── EndOfTheWorld.cs │ ├── EntryProcess.cs │ └── NVLWebStatic.csproj ├── 002.Strrationalism/ │ └── Snowing/ │ ├── Manual.md │ └── SnowingExtract/ │ ├── ConsoleExecute/ │ │ ├── ConsoleExecute.csproj │ │ └── Program.cs │ ├── SnowingExtract.sln │ ├── SnowingStatic/ │ │ ├── Snowing/ │ │ │ ├── AesHelper.cs │ │ │ ├── Archive.cs │ │ │ ├── ArchiveFile.cs │ │ │ ├── MemorySearch.cs │ │ │ ├── ScenarioArchive.cs │ │ │ ├── StructureConvert.cs │ │ │ └── TextureArchive.cs │ │ ├── Snowing.Games/ │ │ │ └── GameKeys.cs │ │ └── SnowingStatic.csproj │ └── VainRiserExtractor/ │ ├── Program.cs │ └── VainRiserExtractor.csproj ├── 003.BlueAngel/ │ ├── BlueAngelExtract/ │ │ ├── BlueAngelExtract.sln │ │ ├── BlueAngelStaticExtract/ │ │ │ ├── BlueAngel/ │ │ │ │ ├── AssemblyEmulator.cs │ │ │ │ ├── LZ4.cs │ │ │ │ └── XP3Archive.cs │ │ │ ├── BlueAngel.StarlightofAeons/ │ │ │ │ ├── Archive.cs │ │ │ │ └── Key.cs │ │ │ ├── BlueAngel.V1/ │ │ │ │ └── ArchiveCrypto.cs │ │ │ └── BlueAngelStaticExtract.csproj │ │ ├── ConsoleExecute/ │ │ │ ├── ConsoleExecute.csproj │ │ │ └── Program.cs │ │ └── StarlightofAeonsExtractor/ │ │ ├── Program.cs │ │ └── StarlightofAeonsExtractor.csproj │ ├── Manual.md │ ├── TheCardinalMemoryNotch/ │ │ ├── ConsoleExecute/ │ │ │ ├── ConsoleExecute.csproj │ │ │ └── Program.cs │ │ ├── EngineCoreStatic/ │ │ │ ├── EngineCoreStatic.csproj │ │ │ ├── SPKArchive.cs │ │ │ ├── XP3Struct.cs │ │ │ └── Zlib.cs │ │ ├── ExtractorV1/ │ │ │ ├── ExtractorV1.csproj │ │ │ └── Program.cs │ │ ├── ProtectorFileDumper/ │ │ │ ├── Common/ │ │ │ │ ├── directory.cpp │ │ │ │ ├── directory.h │ │ │ │ ├── encoding.cpp │ │ │ │ ├── encoding.h │ │ │ │ ├── file.cpp │ │ │ │ ├── file.h │ │ │ │ ├── log.cpp │ │ │ │ ├── log.h │ │ │ │ ├── path.cpp │ │ │ │ ├── path.h │ │ │ │ ├── pe.cpp │ │ │ │ ├── pe.h │ │ │ │ ├── stringhelper.cpp │ │ │ │ ├── stringhelper.h │ │ │ │ ├── util.cpp │ │ │ │ └── util.h │ │ │ ├── ProtectorFileDumper.vcxproj │ │ │ ├── ProtectorFileDumper.vcxproj.filters │ │ │ └── dllmain.cpp │ │ └── TheCardinalMemoryNotch.sln │ └── TheCardinalMemoryNotchV2/ │ ├── KrkrFileDumper/ │ │ ├── Common/ │ │ │ ├── directory.cpp │ │ │ ├── directory.h │ │ │ ├── encoding.cpp │ │ │ ├── encoding.h │ │ │ ├── file.cpp │ │ │ ├── file.h │ │ │ ├── log.cpp │ │ │ ├── log.h │ │ │ ├── path.cpp │ │ │ ├── path.h │ │ │ ├── pe.cpp │ │ │ ├── pe.h │ │ │ ├── stringhelper.cpp │ │ │ ├── stringhelper.h │ │ │ ├── util.cpp │ │ │ └── util.h │ │ ├── Exports.def │ │ ├── KrkrFileDumper.vcxproj │ │ ├── KrkrFileDumper.vcxproj.filters │ │ ├── KrkrPlugin/ │ │ │ ├── tp_stub.cpp │ │ │ └── tp_stub.h │ │ └── dllmain.cpp │ ├── KrkrFileDumperLoader/ │ │ ├── Common/ │ │ │ ├── directory.cpp │ │ │ ├── directory.h │ │ │ ├── encoding.cpp │ │ │ ├── encoding.h │ │ │ ├── file.cpp │ │ │ ├── file.h │ │ │ ├── log.cpp │ │ │ ├── log.h │ │ │ ├── path.cpp │ │ │ ├── path.h │ │ │ ├── pe.cpp │ │ │ ├── pe.h │ │ │ ├── stringhelper.cpp │ │ │ ├── stringhelper.h │ │ │ ├── util.cpp │ │ │ └── util.h │ │ ├── KrkrFileDumperLoader.cpp │ │ ├── KrkrFileDumperLoader.vcxproj │ │ ├── KrkrFileDumperLoader.vcxproj.filters │ │ ├── Ntdll/ │ │ │ ├── ntdll.h │ │ │ ├── ntdll_x64.lib │ │ │ ├── ntdll_x86.lib │ │ │ ├── ntdllp_x64.lib │ │ │ └── ntdllp_x86.lib │ │ └── inlinestring.h │ └── TheCardinalMemoryNotchV2.sln ├── 004.Fontainebleau/ │ ├── Manual.md │ └── MeetInParisDumper/ │ ├── Fontainebleau.sln │ ├── MeetInParisDumper/ │ │ ├── BaseType.h │ │ ├── MeetInParisDumper.vcxproj │ │ ├── MeetInParisDumper.vcxproj.filters │ │ ├── Path.cpp │ │ ├── Path.h │ │ ├── StringHelper.cpp │ │ ├── StringHelper.h │ │ └── dllmain.cpp │ └── Rename/ │ ├── Program.cs │ └── Rename.csproj ├── 005.ZixSolution/ │ ├── ConsoleExecute/ │ │ ├── ConsoleExecute.csproj │ │ └── Program.cs │ ├── Extractor/ │ │ ├── Extractor.csproj │ │ ├── Untils/ │ │ │ ├── Pickle.cs │ │ │ └── Zlib.cs │ │ ├── ZixRenpy7V1/ │ │ │ ├── Archive.cs │ │ │ └── Crypto.cs │ │ └── ZixRenpy8V1/ │ │ ├── Archive.cs │ │ └── Crypto.cs │ ├── Manual.md │ ├── ZixExtractorR7/ │ │ ├── Program.cs │ │ └── ZixExtractorR7.csproj │ ├── ZixExtractorR8/ │ │ ├── Program.cs │ │ └── ZixExtractorR8.csproj │ └── zedraxloRenpy.sln ├── 006.iFAction/ │ └── iFActionTool/ │ ├── ConsoleExecute/ │ │ ├── ConsoleExecute.csproj │ │ └── Program.cs │ ├── Manual.md │ ├── UnitTest/ │ │ ├── Program.cs │ │ └── UnitTest.csproj │ ├── iFActionExtractor/ │ │ ├── IFAction.V1/ │ │ │ └── Archive.cs │ │ └── iFActionExtractor.csproj │ └── iFActionTool.sln ├── 007.AsicxArt/ │ ├── AsicxArtTool/ │ │ ├── AsicxArt.sln │ │ ├── AsicxArtStatic/ │ │ │ ├── AsicxArt/ │ │ │ │ ├── MemoryExtension.cs │ │ │ │ ├── SQLite3.cs │ │ │ │ └── SQLite3Command.cs │ │ │ ├── AsicxArt.V1/ │ │ │ │ ├── Archive.cs │ │ │ │ └── Games.cs │ │ │ └── AsicxArtStatic.csproj │ │ └── ExtractorGui/ │ │ ├── ExtractorGui.csproj │ │ ├── MainForm.Designer.cs │ │ ├── MainForm.cs │ │ ├── MainForm.resx │ │ ├── Program.cs │ │ └── Properties/ │ │ └── PublishProfiles/ │ │ └── FolderProfile86.pubxml │ └── Manual.md ├── 008.XinYvanGames/ │ ├── Manual.md │ ├── SapphireMoonForeverMemories/ │ │ └── ExtractorCode.cs │ ├── ShadowOfTwelveKeyGen/ │ │ ├── Program.cs │ │ └── ShadowOfTwelveKeyGen.csproj │ └── XinYvanGames.sln ├── 009.SoraPlayer/ │ ├── Manual.md │ └── SOAExtract/ │ ├── ConsoleExecute/ │ │ ├── ConsoleExecute.csproj │ │ └── Program.cs │ ├── SoraPlayer.sln │ ├── SoraPlayerExtractorV1/ │ │ ├── Program.cs │ │ └── SoraPlayerExtractorV1.csproj │ └── SoraPlayerStatic/ │ ├── Archive.cs │ ├── SoraPlayerStatic.csproj │ ├── XP3Archive.cs │ └── Zlib.cs ├── 010.UniversalXP3DecFilter/ │ ├── MainFrom/ │ │ ├── MainFrom.Designer.cs │ │ ├── MainFrom.cs │ │ ├── MainFrom.csproj │ │ ├── MainFrom.resx │ │ ├── Program.cs │ │ └── Properties/ │ │ └── PublishProfiles/ │ │ └── FolderProfile64.pubxml │ ├── Manual.md │ ├── XP3Archive/ │ │ ├── Archive.cs │ │ ├── XP3Archive.cs │ │ ├── XP3Archive.csproj │ │ ├── XP3Filter.cs │ │ └── Zlib.cs │ └── XP3DecTPM.sln ├── 011.Irregulars/ │ ├── ConsoleTest/ │ │ ├── ConsoleTest.csproj │ │ └── Program.cs │ ├── Irregulars.sln │ ├── IrregularsExtractorV1/ │ │ ├── IrregularsExtractorV1.csproj │ │ └── Program.cs │ ├── IrregularsStatic/ │ │ ├── Crypto.cs │ │ ├── IrregularsStatic.csproj │ │ └── PathUtil.cs │ └── Manual.md ├── 012.VisualNovelMaker/ │ ├── ConsoleTest/ │ │ ├── ConsoleTest.csproj │ │ └── Program.cs │ ├── Manual.md │ ├── VNMakerCore/ │ │ ├── Crypto.V1/ │ │ │ └── Games/ │ │ │ └── GameInfo.cs │ │ ├── General/ │ │ │ ├── CryptoFilter.cs │ │ │ ├── NWPath.cs │ │ │ └── NWResource.cs │ │ └── VNMakerCore.csproj │ ├── VNMakerGUI/ │ │ ├── MainForm.Designer.cs │ │ ├── MainForm.cs │ │ ├── MainForm.resx │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── PublishProfiles/ │ │ │ └── FolderProfile64.pubxml │ │ └── VNMakerGUI.csproj │ └── VisualNovelMaker.sln ├── 013.GameCreatorTool/ │ ├── GCExtractorGUI/ │ │ ├── GCExtractorGUI.csproj │ │ ├── MainForm.Designer.cs │ │ ├── MainForm.cs │ │ ├── MainForm.resx │ │ ├── Program.cs │ │ └── Properties/ │ │ └── PublishProfiles/ │ │ └── FolderProfile64.pubxml │ ├── GameCreatorStatic/ │ │ ├── Commom.cs │ │ ├── Extractor.V1/ │ │ │ ├── GCCryptoV1.cs │ │ │ ├── GCGameV1.cs │ │ │ └── GCStructureV1.cs │ │ ├── GameCreatorStatic.csproj │ │ └── Utils.cs │ ├── GameCreatorTool.sln │ ├── Manual.md │ └── UnitTest/ │ ├── Program.cs │ └── UnitTest.csproj ├── 014.OrangeStudio/ │ ├── Lover/ │ │ ├── ConsoleExecute/ │ │ │ ├── ConsoleExecute.csproj │ │ │ ├── ImageDecoder.cs │ │ │ ├── Program.cs │ │ │ └── StreamExtend.cs │ │ └── Lover.sln │ └── Manual.md ├── 015.SeparateHearts/ │ └── SeparateHeartsEngineExtractor/ │ ├── ConsoleExecute/ │ │ ├── ConsoleExecute.csproj │ │ └── Program.cs │ ├── EngineCoreStatic/ │ │ ├── EngineCoreStatic.csproj │ │ ├── HACDecompressor.cs │ │ ├── HACDirectFile.cs │ │ ├── HACImageDecoder.cs │ │ ├── HACPackage.cs │ │ ├── HACStreamExtend.cs │ │ ├── HTPImageDecoder.cs │ │ └── ImageProcessUtils.cs │ ├── Manual.md │ ├── SeparateHeartsEngineExtractor.sln │ └── SeparateHeartsExtractorV1/ │ ├── Program.cs │ └── SeparateHeartsExtractorV1.csproj ├── 016.NekoNovel/ │ └── NekoNovel/ │ ├── ConsoleExecute/ │ │ ├── ConsoleExecute.csproj │ │ └── Program.cs │ ├── Manual.md │ ├── NekoNovel.sln │ ├── NekoNovelExtractorV1/ │ │ ├── NekoNovelExtractorV1.csproj │ │ └── Program.cs │ └── NekoNovelStatic/ │ ├── NekoNovelStatic.csproj │ ├── NekoPackage.cs │ ├── StreamExtend.cs │ └── Zlib.cs ├── 017.OurshowGames/ │ ├── ConsoleTest/ │ │ ├── ConsoleTest.csproj │ │ └── Program.cs │ ├── Manual.md │ ├── OurshowExtractorV1/ │ │ ├── OurshowExtractorV1.csproj │ │ └── Program.cs │ ├── OurshowGames.sln │ └── OurshowStatic/ │ ├── AGPArchiveV1.cs │ ├── BitReader.cs │ ├── CompressLZ77.cs │ └── OurshowStatic.csproj ├── 018.CaramelMochaStudio/ │ └── TheStreetOfAdriftToolkit/ │ ├── Manual.md │ ├── TSOACheat/ │ │ ├── BulletHellCheat.cpp │ │ ├── BulletHellCheat.h │ │ ├── Common/ │ │ │ ├── directory.cpp │ │ │ ├── directory.h │ │ │ ├── encoding.cpp │ │ │ ├── encoding.h │ │ │ ├── file.cpp │ │ │ ├── file.h │ │ │ ├── log.cpp │ │ │ ├── log.h │ │ │ ├── path.cpp │ │ │ ├── path.h │ │ │ ├── pe.cpp │ │ │ ├── pe.h │ │ │ ├── stringhelper.cpp │ │ │ ├── stringhelper.h │ │ │ ├── util.cpp │ │ │ └── util.h │ │ ├── Detours/ │ │ │ ├── creatwth.cpp │ │ │ ├── detours.cpp │ │ │ ├── detours.h │ │ │ ├── disasm.cpp │ │ │ ├── image.cpp │ │ │ ├── modules.cpp │ │ │ └── uimports.cpp │ │ ├── ExtendUtils.h │ │ ├── GameDotCheat.cpp │ │ ├── GameDotCheat.h │ │ ├── Il2Cpp/ │ │ │ ├── Il2Cpp.cpp │ │ │ ├── Il2Cpp.h │ │ │ ├── Il2CppAPI.cpp │ │ │ ├── Il2CppAPI.h │ │ │ └── Il2CppHeader.h │ │ ├── Ntdll/ │ │ │ ├── ntdll.h │ │ │ ├── ntdll_x64.lib │ │ │ ├── ntdll_x86.lib │ │ │ ├── ntdllp_x64.lib │ │ │ └── ntdllp_x86.lib │ │ ├── NtdllExtend.cpp │ │ ├── NtdllExtend.h │ │ ├── System.cpp │ │ ├── System.h │ │ ├── TSOACheat.vcxproj │ │ ├── TSOACheat.vcxproj.filters │ │ ├── UnityEngine.cpp │ │ ├── UnityEngine.h │ │ └── dllmain.cpp │ ├── TSOALoader/ │ │ ├── Common/ │ │ │ ├── directory.cpp │ │ │ ├── directory.h │ │ │ ├── encoding.cpp │ │ │ ├── encoding.h │ │ │ ├── file.cpp │ │ │ ├── file.h │ │ │ ├── log.cpp │ │ │ ├── log.h │ │ │ ├── path.cpp │ │ │ ├── path.h │ │ │ ├── pe.cpp │ │ │ ├── pe.h │ │ │ ├── stringhelper.cpp │ │ │ ├── stringhelper.h │ │ │ ├── util.cpp │ │ │ └── util.h │ │ ├── Detours/ │ │ │ ├── creatwth.cpp │ │ │ ├── detours.cpp │ │ │ ├── detours.h │ │ │ ├── disasm.cpp │ │ │ ├── image.cpp │ │ │ ├── modules.cpp │ │ │ └── uimports.cpp │ │ ├── TSOALoader.vcxproj │ │ ├── TSOALoader.vcxproj.filters │ │ └── winmain.cpp │ └── TheStreetOfAdriftToolkit.sln ├── 019.PygmaGame/ │ ├── ExtractorV1/ │ │ ├── ExtractorV1.csproj │ │ └── Program.cs │ ├── ExtractorV2/ │ │ ├── ExtractorV2.csproj │ │ └── Program.cs │ ├── Manual.md │ ├── PygmaGame.sln │ ├── PygmaGameStatic/ │ │ ├── HLXRenpyPackageV2.cs │ │ ├── Misc/ │ │ │ └── DeobfuscatorV1.cs │ │ ├── Pickle.cs │ │ ├── PygmaGameStatic.csproj │ │ ├── WJZRenpyPackageV1.cs │ │ └── Zlib.cs │ └── UnitTest/ │ ├── Program.cs │ └── UnitTest.csproj ├── 020.Xso/ │ ├── ExtractorV1/ │ │ ├── ExtractorV1.csproj │ │ └── Program.cs │ ├── Manual.md │ ├── UnitTest/ │ │ ├── Program.cs │ │ └── UnitTest.csproj │ ├── Xso.sln │ └── XsoStatic/ │ ├── Pickle.cs │ ├── XsoRenpyV1.cs │ ├── XsoStatic.csproj │ └── Zlib.cs ├── 021.UniversalRPAExtractor/ │ ├── Manual.md │ ├── RPAArchive/ │ │ ├── RPAArchive.csproj │ │ ├── RenpyRPA.cs │ │ ├── RenpyRPAv3.cs │ │ └── Utils/ │ │ ├── Pickle.cs │ │ └── Zlib.cs │ ├── RPAExtractorGUI/ │ │ ├── MainForm.Designer.cs │ │ ├── MainForm.cs │ │ ├── MainForm.resx │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── PublishProfiles/ │ │ │ └── FolderProfile64.pubxml │ │ └── RPAExtractorGUI.csproj │ └── UniversalRPAExtractor.sln ├── 022.XiangShe/ │ ├── AGreatScientistDecryptor/ │ │ ├── AGreatScientistDecryptor.csproj │ │ └── Program.cs │ ├── Manual.md │ ├── UnitTest/ │ │ ├── Program.cs │ │ └── UnitTest.csproj │ ├── XiangShe.sln │ └── XiangSheStatic/ │ ├── Crypto.V1/ │ │ ├── Crypto.cs │ │ ├── GameDB.cs │ │ └── ResourceExtractor.cs │ ├── Utils/ │ │ └── GZip.cs │ └── XiangSheStatic.csproj ├── 023.YuriAVGEngine/ │ ├── EngineCore/ │ │ ├── EngineCore.csproj │ │ ├── YuriCrypto.cs │ │ ├── YuriGames.cs │ │ ├── YuriPackage.cs │ │ ├── YuriScenario.cs │ │ └── YuriSerializer.cs │ ├── ExtractorGUI/ │ │ ├── ExtractorGUI.csproj │ │ ├── MainForm.Designer.cs │ │ ├── MainForm.cs │ │ ├── MainForm.resx │ │ ├── Program.cs │ │ └── Properties/ │ │ └── PublishProfiles/ │ │ └── FolderProfile64.pubxml │ ├── Manual.md │ └── YuriAVGEngine.sln ├── 024.SanHuaMiao/ │ ├── Manual.md │ └── SanHuaMiaoStudio/ │ ├── 3001Pages/ │ │ ├── 3001Pages.csproj │ │ └── Program.cs │ └── SanHuaMiaoStudio.sln ├── 025.SugarRush/ │ ├── IdolForging/ │ │ ├── IdolForging.csproj │ │ └── Program.cs │ ├── Manual.md │ └── SugarRush.sln ├── 994.AleCubicSoft/ │ └── UndercoverAgent/ │ ├── Manual.md │ ├── UALoader/ │ │ ├── Common/ │ │ │ ├── directory.cpp │ │ │ ├── directory.h │ │ │ ├── encoding.cpp │ │ │ ├── encoding.h │ │ │ ├── file.cpp │ │ │ ├── file.h │ │ │ ├── log.cpp │ │ │ ├── log.h │ │ │ ├── path.cpp │ │ │ ├── path.h │ │ │ ├── pe.cpp │ │ │ ├── pe.h │ │ │ ├── stringhelper.cpp │ │ │ ├── stringhelper.h │ │ │ ├── util.cpp │ │ │ └── util.h │ │ ├── Detours/ │ │ │ ├── creatwth.cpp │ │ │ ├── detours.cpp │ │ │ ├── detours.h │ │ │ ├── disasm.cpp │ │ │ ├── image.cpp │ │ │ ├── modules.cpp │ │ │ └── uimports.cpp │ │ ├── UALoader.vcxproj │ │ ├── UALoader.vcxproj.filters │ │ └── winmain.cpp │ ├── UAPatch/ │ │ ├── Common/ │ │ │ ├── directory.cpp │ │ │ ├── directory.h │ │ │ ├── encoding.cpp │ │ │ ├── encoding.h │ │ │ ├── file.cpp │ │ │ ├── file.h │ │ │ ├── log.cpp │ │ │ ├── log.h │ │ │ ├── path.cpp │ │ │ ├── path.h │ │ │ ├── pe.cpp │ │ │ ├── pe.h │ │ │ ├── stringhelper.cpp │ │ │ ├── stringhelper.h │ │ │ ├── util.cpp │ │ │ └── util.h │ │ ├── Detours/ │ │ │ ├── creatwth.cpp │ │ │ ├── detours.cpp │ │ │ ├── detours.h │ │ │ ├── disasm.cpp │ │ │ ├── image.cpp │ │ │ ├── modules.cpp │ │ │ └── uimports.cpp │ │ ├── ExtendUtils.h │ │ ├── Il2Cpp/ │ │ │ ├── Il2Cpp.cpp │ │ │ ├── Il2Cpp.h │ │ │ ├── Il2CppApi.cpp │ │ │ ├── Il2CppApi.h │ │ │ └── Il2CppHeader.h │ │ ├── Ntdll/ │ │ │ ├── ntdll.h │ │ │ ├── ntdll_x64.lib │ │ │ ├── ntdll_x86.lib │ │ │ ├── ntdllp_x64.lib │ │ │ └── ntdllp_x86.lib │ │ ├── NtdllExtend.cpp │ │ ├── NtdllExtend.h │ │ ├── SaveDataPatch.cpp │ │ ├── SaveDataPatch.h │ │ ├── TSKTContainer.h │ │ ├── UAPatch.vcxproj │ │ ├── UAPatch.vcxproj.filters │ │ └── dllmain.cpp │ └── UndercoverAgent.sln ├── 995.Chatte Noire/ │ ├── 01.Nie no Hakoniwa/ │ │ ├── FileExtractor/ │ │ │ ├── ExfsPackage.cs │ │ │ ├── FileExtractor.csproj │ │ │ └── Program.cs │ │ └── Nie no Hakoniwa.sln │ └── Manual.md ├── 996.LightVN/ │ └── LightVN/ │ ├── ConsoleExecute/ │ │ ├── ConsoleExecute.csproj │ │ └── Program.cs │ ├── LightVN.sln │ ├── LightVNExtractorV1/ │ │ ├── LightVNExtractorV1.csproj │ │ └── Program.cs │ ├── LightVNExtractorV2/ │ │ ├── LightVNExtractorV2.csproj │ │ └── Program.cs │ ├── LightVNStatic/ │ │ ├── CryptoFilterV1.cs │ │ ├── CryptoFilterV2.cs │ │ ├── GameV1.cs │ │ ├── GameV2.cs │ │ ├── LightVNStatic.csproj │ │ ├── PackageV1.cs │ │ └── PackageV2.cs │ └── Manual.md ├── 997.SyawaseWorks/ │ ├── HamidashiCreative/ │ │ ├── Common/ │ │ │ ├── encoding.cpp │ │ │ ├── encoding.h │ │ │ ├── file.cpp │ │ │ ├── file.h │ │ │ ├── log.cpp │ │ │ ├── log.h │ │ │ ├── path.cpp │ │ │ ├── path.h │ │ │ ├── pe.cpp │ │ │ ├── pe.h │ │ │ ├── stringhelper.cpp │ │ │ ├── stringhelper.h │ │ │ ├── util.cpp │ │ │ └── util.h │ │ ├── ConsoleExecute/ │ │ │ ├── ConsoleExecute.csproj │ │ │ └── Program.cs │ │ ├── Detours/ │ │ │ ├── creatwth.cpp │ │ │ ├── detours.cpp │ │ │ ├── detours.h │ │ │ ├── disasm.cpp │ │ │ ├── image.cpp │ │ │ ├── modules.cpp │ │ │ └── uimports.cpp │ │ ├── HamidashiCreative.sln │ │ ├── HamidashiCreativeStatic/ │ │ │ ├── HamidashiCreativeStatic.csproj │ │ │ ├── SWArchive.cs │ │ │ ├── SWFilter.cs │ │ │ └── SWHash.cs │ │ ├── HamidashiPatch/ │ │ │ ├── HamidashiPatch.vcxproj │ │ │ ├── HamidashiPatch.vcxproj.filters │ │ │ └── dllmain.cpp │ │ ├── Ntdll/ │ │ │ ├── ntdll.h │ │ │ ├── ntdll_x64.lib │ │ │ ├── ntdll_x86.lib │ │ │ ├── ntdllp_x64.lib │ │ │ └── ntdllp_x86.lib │ │ └── SteamPatch/ │ │ └── ds.ini │ ├── HappyLiveShowUp/ │ │ ├── Common/ │ │ │ ├── encoding.cpp │ │ │ ├── encoding.h │ │ │ ├── file.cpp │ │ │ ├── file.h │ │ │ ├── log.cpp │ │ │ ├── log.h │ │ │ ├── path.cpp │ │ │ ├── path.h │ │ │ ├── pe.cpp │ │ │ ├── pe.h │ │ │ ├── stringhelper.cpp │ │ │ ├── stringhelper.h │ │ │ ├── util.cpp │ │ │ └── util.h │ │ ├── ConsoleExecute/ │ │ │ ├── ConsoleExecute.csproj │ │ │ └── Program.cs │ │ ├── Detours/ │ │ │ ├── creatwth.cpp │ │ │ ├── detours.cpp │ │ │ ├── detours.h │ │ │ ├── disasm.cpp │ │ │ ├── image.cpp │ │ │ ├── modules.cpp │ │ │ └── uimports.cpp │ │ ├── HappyLiveShowUp.sln │ │ ├── HappyLiveShowUpStatic/ │ │ │ ├── Enc_Key_V102 │ │ │ ├── HappyLiveShowUpStatic.csproj │ │ │ ├── Patch_Key_V102 │ │ │ ├── SWCrypto.cs │ │ │ ├── SWDataPack.cs │ │ │ └── SWGameData.cs │ │ ├── Ntdll/ │ │ │ ├── ntdll.h │ │ │ ├── ntdll_x64.lib │ │ │ ├── ntdll_x86.lib │ │ │ ├── ntdllp_x64.lib │ │ │ └── ntdllp_x86.lib │ │ ├── Patch/ │ │ │ ├── Patch.vcxproj │ │ │ ├── Patch.vcxproj.filters │ │ │ └── dllmain.cpp │ │ ├── SteamPatch/ │ │ │ └── ds.ini │ │ └── TestExecute/ │ │ ├── Program.cs │ │ └── TestExecute.csproj │ └── Manual.md ├── 998.HikariField/ │ ├── FutureRadio/ │ │ ├── ConsoleExecute/ │ │ │ ├── ConsoleExecute.csproj │ │ │ └── Program.cs │ │ ├── FutureRadio.sln │ │ ├── FutureRadioStatic/ │ │ │ ├── BinArchive.cs │ │ │ ├── FutureRadioStatic.csproj │ │ │ └── PidaArchive.cs │ │ └── Manual.md │ ├── HFUnityV1/ │ │ ├── AonatsuLine/ │ │ │ ├── AonatsuLine.csproj │ │ │ └── Program.cs │ │ ├── EngineCore/ │ │ │ ├── EngineCore.csproj │ │ │ ├── PacArchive.cs │ │ │ ├── QuickLZ.cs │ │ │ └── Until.cs │ │ ├── HFUnityV1.sln │ │ ├── MakingLoverFHD/ │ │ │ ├── MakingLoverFHD.csproj │ │ │ └── Program.cs │ │ └── Manual.md │ └── NekoNyan/ │ ├── ConsoleExecute/ │ │ ├── ConsoleExecute.csproj │ │ └── Program.cs │ ├── ExtractorGUI/ │ │ ├── ExtractorGUI.csproj │ │ ├── MainForm.Designer.cs │ │ ├── MainForm.cs │ │ ├── MainForm.resx │ │ ├── Program.cs │ │ └── Properties/ │ │ └── PublishProfiles/ │ │ └── FolderProfile64.pubxml │ ├── Manual.md │ ├── NekoNyan.sln │ └── NekoNyanStatic/ │ ├── Crypto/ │ │ ├── ArchiveCryptoBase.cs │ │ └── DataManager.cs │ ├── Crypto.V1/ │ │ ├── ArchiveCryptoV10.cs │ │ ├── ArchiveCryptoV11.cs │ │ ├── ArchiveCryptoV12.cs │ │ └── ArchiveCryptoV13.cs │ └── NekoNyanStatic.csproj ├── LICENSE └── README.md
Showing preview only (927K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (9465 symbols across 513 files)
FILE: 001.NVL/BKEngine/BKEFileNameDumper/BKEFileNameDumper/dllmain.cpp
type StdWStringMSVC2013 (line 12) | struct StdWStringMSVC2013
method wchar_t (line 22) | const wchar_t* ConstString()
method Length (line 33) | int Length()
function InstallHook (line 57) | void InstallHook()
function Initialize (line 70) | void Initialize()
function ShutDown (line 82) | void ShutDown()
function BOOL (line 87) | BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID ...
function Dummy (line 109) | __declspec(dllexport) void Dummy() {}
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/encoding.cpp
type Encoding (line 8) | namespace Encoding
function AnsiToUnicode (line 10) | std::wstring AnsiToUnicode(const std::string& source, int codePage)
function UnicodeToAnsi (line 39) | std::string UnicodeToAnsi(const std::wstring& source, int codePage)
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/encoding.h
function namespace (line 7) | namespace Encoding
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/file.cpp
type File (line 9) | namespace File
function ReadAllText (line 11) | std::string ReadAllText(const std::string& path)
function ReadAllText (line 98) | std::string ReadAllText(const std::wstring& path)
function WriteAllBytes (line 190) | bool WriteAllBytes(const std::string& path, const void* buffer, size_t...
function WriteAllBytes (line 229) | bool WriteAllBytes(const std::wstring& path, const void* buffer, size_...
function Delete (line 273) | void Delete(const std::string& path)
function Delete (line 278) | void Delete(const std::wstring& path)
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/file.h
function namespace (line 7) | namespace File
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/log.cpp
type Log (line 10) | namespace Log
function GetTimeString (line 51) | static std::string GetTimeString()
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/log.h
function namespace (line 7) | namespace Log
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/path.cpp
type Path (line 6) | namespace Path
function GetFileName (line 8) | std::string GetFileName(const std::string& path)
function GetFileName (line 29) | std::wstring GetFileName(const std::wstring& path)
function GetFileNameWithoutExtension (line 50) | std::string GetFileNameWithoutExtension(const std::string& path)
function GetFileNameWithoutExtension (line 64) | std::wstring GetFileNameWithoutExtension(const std::wstring& path)
function GetDirectoryName (line 78) | std::string GetDirectoryName(const std::string& path)
function GetDirectoryName (line 99) | std::wstring GetDirectoryName(const std::wstring& path)
function GetExtension (line 120) | std::string GetExtension(const std::string& path)
function GetExtension (line 149) | std::wstring GetExtension(const std::wstring& path)
function ChangeExtension (line 178) | std::string ChangeExtension(const std::string& path, const std::string...
function ChangeExtension (line 222) | std::wstring ChangeExtension(const std::wstring& path, const std::wstr...
function GetFullPath (line 266) | std::string GetFullPath(const std::string& path)
function GetFullPath (line 296) | std::wstring GetFullPath(const std::wstring& path)
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/path.h
function namespace (line 7) | namespace Path
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/pe.cpp
type PE (line 5) | namespace PE
function PVOID (line 7) | PVOID GetModuleBase(HMODULE hModule)
function DWORD (line 17) | DWORD GetModuleSize(HMODULE hModule)
function PIMAGE_SECTION_HEADER (line 22) | PIMAGE_SECTION_HEADER GetSectionHeader(HMODULE hModule, PCSTR lpName)
function PBYTE (line 53) | static inline PBYTE RvaAdjust(PIMAGE_DOS_HEADER pDosHeader, DWORD raddr)
function PVOID (line 63) | PVOID GetImportAddress(HMODULE hModule, LPCSTR lpModuleName, LPCSTR lp...
function PVOID (line 118) | PVOID SearchPattern(PVOID lpStartSearch, DWORD dwSearchLen, const char...
function BOOL (line 147) | BOOL WriteMemory(PVOID lpAddress, PVOID lpBuffer, DWORD nSize)
function BOOL (line 161) | BOOL IATHook(HMODULE hModule, LPCSTR lpModuleName, LPCSTR lpProcName, ...
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/pe.h
function namespace (line 8) | namespace PE
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/stringhelper.cpp
type StringHelper (line 7) | namespace StringHelper
function StartsWith (line 9) | bool StartsWith(const char* source, const char* sub)
function StartsWith (line 22) | bool StartsWith(const wchar_t* source, const wchar_t* sub)
function StartsWith (line 35) | bool StartsWith(const std::string& source, const std::string& sub)
function StartsWith (line 45) | bool StartsWith(const std::wstring& source, const std::wstring& sub)
function EndsWith (line 55) | bool EndsWith(const char* source, const char* sub)
function EndsWith (line 68) | bool EndsWith(const wchar_t* source, const wchar_t* sub)
function EndsWith (line 81) | bool EndsWith(const std::string& source, const std::string& sub)
function EndsWith (line 91) | bool EndsWith(const std::wstring& source, const std::wstring& sub)
function ToLower (line 101) | std::string ToLower(const std::string& source)
function ToLower (line 110) | std::wstring ToLower(const std::wstring& source)
function ToUpper (line 119) | std::string ToUpper(const std::string& source)
function ToUpper (line 128) | std::wstring ToUpper(const std::wstring& source)
function Format (line 137) | std::string Format(const char* format, ...)
function VFormat (line 178) | std::string VFormat(const char* format, va_list ap)
function Format (line 214) | std::wstring Format(const wchar_t* format, ...)
function VFormat (line 255) | std::wstring VFormat(const wchar_t* format, va_list ap)
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/stringhelper.h
function namespace (line 7) | namespace StringHelper
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/util.cpp
type Util (line 7) | namespace Util
function GetModulePathA (line 9) | std::string GetModulePathA(HMODULE hModule)
function GetModulePathW (line 47) | std::wstring GetModulePathW(HMODULE hModule)
function GetAppPathA (line 85) | std::string GetAppPathA()
function GetAppPathW (line 90) | std::wstring GetAppPathW()
function GetAppDirectoryA (line 95) | std::string GetAppDirectoryA()
function GetAppDirectoryW (line 109) | std::wstring GetAppDirectoryW()
function GetLastErrorMessageA (line 123) | std::string GetLastErrorMessageA()
function GetLastErrorMessageW (line 142) | std::wstring GetLastErrorMessageW()
function ThrowError (line 161) | __declspec(noreturn) void ThrowError(const char* format, ...)
function ThrowError (line 173) | __declspec(noreturn) void ThrowError(const wchar_t* format, ...)
function WriteDebugMessage (line 185) | void WriteDebugMessage(const char* format, ...)
function WriteDebugMessage (line 196) | void WriteDebugMessage(const wchar_t* format, ...)
function OpenFolderDialog (line 207) | std::string OpenFolderDialog(const std::string& title)
function OpenFolderDialog (line 236) | std::wstring OpenFolderDialog(const std::wstring& title)
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Common/util.h
function namespace (line 8) | namespace Util
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Detours/creatwth.cpp
function PVOID (line 34) | static PVOID LoadNtHeaderFromProcess(_In_ HANDLE hProcess,
function HMODULE (line 86) | static HMODULE EnumerateModulesInProcess(_In_ HANDLE hProcess,
function PVOID (line 145) | static PVOID FindDetourSectionInRemoteModule(_In_ HANDLE hProcess,
function PVOID (line 188) | static PVOID FindPayloadInRemoteDetourSection(_In_ HANDLE hProcess,
function WINAPI (line 243) | WINAPI DetourFindRemotePayload(_In_ HANDLE hProcess,
function PBYTE (line 272) | static PBYTE FindAndAllocateNearBase(HANDLE hProcess, PBYTE pbModule, PB...
function DWORD (line 348) | static inline DWORD PadToDword(DWORD dw)
function DWORD (line 353) | static inline DWORD PadToDwordPtr(DWORD dw)
function HRESULT (line 358) | static inline HRESULT ReplaceOptionalSizeA(_Inout_z_count_(cchDest) LPST...
function BOOL (line 380) | static BOOL RecordExeRestore(HANDLE hProcess, HMODULE hModule, DETOUR_EX...
function BOOL (line 501) | static BOOL UpdateFrom32To64(HANDLE hProcess, HMODULE hModule, WORD mach...
function BOOL (line 646) | static BOOL IsWow64ProcessHelper(HANDLE hProcess,
function BOOL (line 677) | BOOL WINAPI DetourUpdateProcessWithDll(_In_ HANDLE hProcess,
function BOOL (line 750) | BOOL WINAPI DetourUpdateProcessWithDllEx(_In_ HANDLE hProcess,
function BOOL (line 899) | BOOL WINAPI DetourCreateProcessWithDllA(_In_opt_ LPCSTR lpApplicationName,
function BOOL (line 957) | BOOL WINAPI DetourCreateProcessWithDllW(_In_opt_ LPCWSTR lpApplicationName,
function BOOL (line 1013) | BOOL WINAPI DetourCopyPayloadToProcess(_In_ HANDLE hProcess,
function WINAPI (line 1022) | WINAPI DetourCopyPayloadToProcessEx(_In_ HANDLE hProcess,
function VOID (line 1131) | VOID CALLBACK DetourFinishHelperProcess(_In_ HWND,
function BOOL (line 1196) | BOOL WINAPI DetourIsHelperProcess(VOID)
function BOOL (line 1221) | static
function VOID (line 1325) | static
function BOOL (line 1334) | BOOL WINAPI DetourProcessViaHelperA(_In_ DWORD dwTargetPid,
function BOOL (line 1342) | BOOL WINAPI DetourProcessViaHelperDllsA(_In_ DWORD dwTargetPid,
function BOOL (line 1433) | BOOL WINAPI DetourProcessViaHelperW(_In_ DWORD dwTargetPid,
function BOOL (line 1440) | BOOL WINAPI DetourProcessViaHelperDllsW(_In_ DWORD dwTargetPid,
function BOOL (line 1538) | BOOL WINAPI DetourCreateProcessWithDllExA(_In_opt_ LPCSTR lpApplicationN...
function BOOL (line 1599) | BOOL WINAPI DetourCreateProcessWithDllExW(_In_opt_ LPCWSTR lpApplication...
function BOOL (line 1660) | BOOL WINAPI DetourCreateProcessWithDllsA(_In_opt_ LPCSTR lpApplicationName,
function BOOL (line 1721) | BOOL WINAPI DetourCreateProcessWithDllsW(_In_opt_ LPCWSTR lpApplicationN...
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Detours/detours.cpp
function Detour_AssertExprWithFunctionName (line 26) | int Detour_AssertExprWithFunctionName(int reportType, const char* filena...
type _DETOUR_ALIGN (line 44) | struct _DETOUR_ALIGN
function detour_is_imported (line 61) | static bool detour_is_imported(PBYTE pbCode, PBYTE pbAddress)
function ULONG_PTR (line 96) | inline ULONG_PTR detour_2gb_below(ULONG_PTR address)
function ULONG_PTR (line 101) | inline ULONG_PTR detour_2gb_above(ULONG_PTR address)
type _DETOUR_TRAMPOLINE (line 114) | struct _DETOUR_TRAMPOLINE
function PBYTE (line 133) | inline PBYTE detour_gen_jmp_immediate(PBYTE pbCode, PBYTE pbJmpVal)
function PBYTE (line 141) | inline PBYTE detour_gen_jmp_indirect(PBYTE pbCode, PBYTE *ppbJmpVal)
function PBYTE (line 149) | inline PBYTE detour_gen_brk(PBYTE pbCode, PBYTE pbLimit)
function PBYTE (line 157) | inline PBYTE detour_skip_jmp(PBYTE pbCode, PVOID *ppGlobals)
function detour_find_jmp_bounds (line 203) | inline void detour_find_jmp_bounds(PBYTE pbCode,
function BOOL (line 229) | inline BOOL detour_does_code_end_function(PBYTE pbCode)
function ULONG (line 258) | inline ULONG detour_is_code_filler(PBYTE pbCode)
type _DETOUR_TRAMPOLINE (line 323) | struct _DETOUR_TRAMPOLINE
function PBYTE (line 345) | inline PBYTE detour_gen_jmp_immediate(PBYTE pbCode, PBYTE pbJmpVal)
function PBYTE (line 353) | inline PBYTE detour_gen_jmp_indirect(PBYTE pbCode, PBYTE *ppbJmpVal)
function PBYTE (line 362) | inline PBYTE detour_gen_brk(PBYTE pbCode, PBYTE pbLimit)
function PBYTE (line 370) | inline PBYTE detour_skip_jmp(PBYTE pbCode, PVOID *ppGlobals)
function detour_find_jmp_bounds (line 416) | inline void detour_find_jmp_bounds(PBYTE pbCode,
function BOOL (line 454) | inline BOOL detour_does_code_end_function(PBYTE pbCode)
function ULONG (line 483) | inline ULONG detour_is_code_filler(PBYTE pbCode)
type _DETOUR_TRAMPOLINE (line 548) | struct _DETOUR_TRAMPOLINE
function PBYTE (line 630) | inline PBYTE detour_skip_jmp(PBYTE pPointer, PVOID *ppGlobals)
function detour_find_jmp_bounds (line 696) | inline void detour_find_jmp_bounds(PBYTE pbCode,
function BOOL (line 705) | inline BOOL detour_does_code_end_function(PBYTE pbCode)
function ULONG (line 712) | inline ULONG detour_is_code_filler(PBYTE pbCode)
type _DETOUR_TRAMPOLINE (line 723) | struct _DETOUR_TRAMPOLINE
function PBYTE (line 743) | inline PBYTE align4(PBYTE pValue)
function ULONG (line 748) | inline ULONG fetch_thumb_opcode(PBYTE pbCode)
function write_thumb_opcode (line 757) | inline void write_thumb_opcode(PBYTE &pbCode, ULONG Opcode)
function PBYTE (line 765) | PBYTE detour_gen_jmp_immediate(PBYTE pbCode, PBYTE *ppPool, PBYTE pbJmpVal)
function PBYTE (line 790) | inline PBYTE detour_gen_brk(PBYTE pbCode, PBYTE pbLimit)
function PBYTE (line 798) | inline PBYTE detour_skip_jmp(PBYTE pbCode, PVOID *ppGlobals)
function detour_find_jmp_bounds (line 835) | inline void detour_find_jmp_bounds(PBYTE pbCode,
function BOOL (line 849) | inline BOOL detour_does_code_end_function(PBYTE pbCode)
function ULONG (line 867) | inline ULONG detour_is_code_filler(PBYTE pbCode)
type _DETOUR_TRAMPOLINE (line 882) | struct _DETOUR_TRAMPOLINE
function ULONG (line 925) | inline ULONG fetch_opcode(PBYTE pbCode)
function write_opcode (line 930) | inline void write_opcode(PBYTE &pbCode, ULONG Opcode)
type ARM64_INDIRECT_JMP (line 936) | struct ARM64_INDIRECT_JMP {
function PBYTE (line 974) | PBYTE detour_gen_jmp_indirect(BYTE *pbCode, ULONG64 *pbJmpVal)
function PBYTE (line 1009) | PBYTE detour_gen_jmp_immediate(PBYTE pbCode, PBYTE *ppPool, PBYTE pbJmpVal)
function PBYTE (line 1032) | inline PBYTE detour_gen_brk(PBYTE pbCode, PBYTE pbLimit)
function INT64 (line 1040) | inline INT64 detour_sign_extend(UINT64 value, UINT bits)
function PBYTE (line 1049) | inline PBYTE detour_skip_jmp(PBYTE pbCode, PVOID *ppGlobals)
function detour_find_jmp_bounds (line 1138) | inline void detour_find_jmp_bounds(PBYTE pbCode,
function BOOL (line 1154) | inline BOOL detour_does_code_end_function(PBYTE pbCode)
function ULONG (line 1164) | inline ULONG detour_is_code_filler(PBYTE pbCode)
type DETOUR_REGION (line 1179) | struct DETOUR_REGION
function DWORD (line 1194) | static DWORD detour_writable_trampoline_regions()
function detour_runnable_trampoline_regions (line 1206) | static void detour_runnable_trampoline_regions()
function PBYTE (line 1218) | static PBYTE detour_alloc_round_down_to_region(PBYTE pbTry)
function PBYTE (line 1228) | static PBYTE detour_alloc_round_up_to_region(PBYTE pbTry)
function PVOID (line 1241) | static PVOID detour_alloc_region_from_lo(PBYTE pbLo, PBYTE pbHi)
function PVOID (line 1290) | static PVOID detour_alloc_region_from_hi(PBYTE pbLo, PBYTE pbHi)
function PVOID (line 1339) | static PVOID detour_alloc_trampoline_allocate_new(PBYTE pbTarget,
function PVOID (line 1379) | PVOID WINAPI DetourAllocateRegionWithinJumpBounds(_In_ LPCVOID pbTarget,
function PDETOUR_TRAMPOLINE (line 1398) | static PDETOUR_TRAMPOLINE detour_alloc_trampoline(PBYTE pbTarget)
function detour_free_trampoline (line 1468) | static void detour_free_trampoline(PDETOUR_TRAMPOLINE pTrampoline)
function BOOL (line 1478) | static BOOL detour_is_region_empty(PDETOUR_REGION pRegion)
function detour_free_unused_trampoline_regions (line 1502) | static void detour_free_unused_trampoline_regions()
type DetourThread (line 1523) | struct DetourThread
type DetourOperation (line 1529) | struct DetourOperation
function PVOID (line 1550) | PVOID WINAPI DetourCodeFromPointer(_In_ PVOID pPointer,
function BOOL (line 1558) | BOOL WINAPI DetourSetIgnoreTooSmall(_In_ BOOL fIgnore)
function BOOL (line 1565) | BOOL WINAPI DetourSetRetainRegions(_In_ BOOL fRetain)
function PVOID (line 1572) | PVOID WINAPI DetourSetSystemRegionLowerBound(_In_ PVOID pSystemRegionLow...
function PVOID (line 1579) | PVOID WINAPI DetourSetSystemRegionUpperBound(_In_ PVOID pSystemRegionUpp...
function LONG (line 1586) | LONG WINAPI DetourTransactionBegin()
function LONG (line 1610) | LONG WINAPI DetourTransactionAbort()
function LONG (line 1654) | LONG WINAPI DetourTransactionCommit()
function BYTE (line 1659) | static BYTE detour_align_from_trampoline(PDETOUR_TRAMPOLINE pTrampoline,...
function LONG (line 1669) | static LONG detour_align_from_target(PDETOUR_TRAMPOLINE pTrampoline, LON...
function LONG (line 1679) | LONG WINAPI DetourTransactionCommitEx(_Out_opt_ PVOID **pppFailedPointer)
function LONG (line 1948) | LONG WINAPI DetourUpdateThread(_In_ HANDLE hThread)
function LONG (line 1991) | LONG WINAPI DetourAttach(_Inout_ PVOID *ppPointer,
function LONG (line 1997) | LONG WINAPI DetourAttachEx(_Inout_ PVOID *ppPointer,
function LONG (line 2357) | LONG WINAPI DetourDetach(_Inout_ PVOID *ppPointer,
function DWORD (line 2528) | static DWORD DetourPageProtectAdjustExecute(_In_ DWORD dwOldProtect,
function WINAPI (line 2547) | WINAPI DetourVirtualProtectSameExecuteEx(_In_ HANDLE hProcess,
function WINAPI (line 2572) | WINAPI DetourVirtualProtectSameExecute(_In_ PVOID pAddress,
function BOOL (line 2581) | BOOL WINAPI DetourAreSameGuid(_In_ REFGUID left, _In_ REFGUID right)
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Detours/detours.h
type LONG (line 133) | typedef LONG LONG_PTR;
type ULONG (line 134) | typedef ULONG ULONG_PTR;
type GUID (line 333) | typedef struct _GUID
type DETOUR_TRAMPOLINE (line 384) | typedef struct _DETOUR_TRAMPOLINE DETOUR_TRAMPOLINE, *PDETOUR_TRAMPOLINE;
type DETOUR_SECTION_HEADER (line 389) | typedef struct _DETOUR_SECTION_HEADER
type DETOUR_SECTION_RECORD (line 414) | typedef struct _DETOUR_SECTION_RECORD
type DETOUR_CLR_HEADER (line 421) | typedef struct _DETOUR_CLR_HEADER
type DETOUR_EXE_RESTORE (line 435) | typedef struct _DETOUR_EXE_RESTORE
type DETOUR_EXE_HELPER (line 477) | typedef struct _DETOUR_EXE_HELPER
type VOID (line 550) | typedef VOID * PDETOUR_BINARY;
type VOID (line 551) | typedef VOID * PDETOUR_LOADED_BINARY;
type IMAGEHLP_MODULE (line 928) | typedef IMAGEHLP_MODULE IMAGEHLP_MODULE64;
type PIMAGEHLP_MODULE (line 929) | typedef PIMAGEHLP_MODULE PIMAGEHLP_MODULE64;
type IMAGEHLP_SYMBOL (line 930) | typedef IMAGEHLP_SYMBOL SYMBOL_INFO;
type PIMAGEHLP_SYMBOL (line 931) | typedef PIMAGEHLP_SYMBOL PSYMBOL_INFO;
function LONG (line 933) | static inline
type DETOUR_SYM_INFO (line 966) | typedef struct _DETOUR_SYM_INFO
type DETOUR_IA64_BUNDLE (line 1033) | struct DETOUR_IA64_BUNDLE
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Detours/disasm.cpp
class CDetourDis (line 156) | class CDetourDis
type COPYENTRY (line 167) | struct COPYENTRY
type COPYENTRY (line 187) | struct COPYENTRY
type COPYENTRY (line 2307) | struct COPYENTRY {
type Branch5 (line 2314) | struct Branch5
type Branch5Target (line 2323) | struct Branch5Target
type Branch8 (line 2331) | struct Branch8
type Branch8Target (line 2338) | struct Branch8Target
type Branch11 (line 2345) | struct Branch11
type Branch11Target (line 2351) | struct Branch11Target
type Branch20 (line 2358) | struct Branch20
type Branch20Target (line 2371) | struct Branch20Target
type Branch24 (line 2382) | struct Branch24
type Branch24Target (line 2395) | struct Branch24Target
type LiteralLoad8 (line 2406) | struct LiteralLoad8
type LiteralLoad8Target (line 2413) | struct LiteralLoad8Target
type LiteralLoad12 (line 2420) | struct LiteralLoad12
type LiteralLoad12Target (line 2429) | struct LiteralLoad12Target
type ImmediateRegisterLoad32 (line 2435) | struct ImmediateRegisterLoad32
type ImmediateRegisterLoad16 (line 2443) | struct ImmediateRegisterLoad16
type TableBranch (line 2450) | struct TableBranch
type Shift (line 2459) | struct Shift
type Add32 (line 2465) | struct Add32
type LogicalShiftLeft32 (line 2478) | struct LogicalShiftLeft32
type StoreImmediate12 (line 2490) | struct StoreImmediate12
method ULONG (line 2536) | ULONG GetLongInstruction(BYTE* pSource)
method BYTE (line 2541) | BYTE EmitLongInstruction(PUSHORT& pDstInst, ULONG instruction)
method BYTE (line 2548) | BYTE EmitShortInstruction(PUSHORT& pDstInst, USHORT instruction)
method PBYTE (line 2554) | PBYTE Align4(PBYTE pValue)
method PBYTE (line 2559) | PBYTE CalculateTarget(PBYTE pSource, LONG delta)
method LONG (line 2564) | LONG CalculateNewDelta(PBYTE pTarget, BYTE* pDest)
method BYTE (line 2569) | BYTE EmitAdd32(PUSHORT& pDstInst, BYTE op1Reg, BYTE op2Reg, BYTE ds...
method BYTE (line 2578) | BYTE EmitLogicalShiftLeft32(PUSHORT& pDstInst, BYTE srcReg, BYTE ds...
method BYTE (line 2586) | BYTE EmitStoreImmediate12(PUSHORT& pDstInst, BYTE srcReg, BYTE base...
method DWORD (line 3653) | static DWORD Assemble(DWORD size, DWORD rd, DWORD rn, ULONG imm, DWORD...
method DWORD (line 3664) | static DWORD AssembleAdd32(DWORD rd, DWORD rn, ULONG imm, DWORD shift)...
method DWORD (line 3665) | static DWORD AssembleAdd64(DWORD rd, DWORD rn, ULONG imm, DWORD shift)...
method LONG (line 3679) | inline LONG Imm() const { DWORD Imm = (s.Imm19 << 2) | s.Imm2; return ...
method DWORD (line 3680) | static DWORD Assemble(DWORD type, DWORD rd, LONG delta)
method DWORD (line 3690) | static DWORD AssembleAdr(DWORD rd, LONG delta) { return Assemble(0, rd...
method DWORD (line 3691) | static DWORD AssembleAdrp(DWORD rd, LONG delta) { return Assemble(1, r...
method LONG (line 3704) | inline LONG Imm() const { return (LONG)(s.Imm19 << 13) >> 11; }
method DWORD (line 3705) | static DWORD AssembleBcc(DWORD condition, LONG delta)
method LONG (line 3725) | inline LONG Imm() const { return (LONG)(s.Imm26 << 6) >> 4; }
method DWORD (line 3726) | static DWORD Assemble(DWORD link, LONG delta)
method DWORD (line 3734) | static DWORD AssembleB(LONG delta) { return Assemble(0, delta); }
method DWORD (line 3735) | static DWORD AssembleBl(LONG delta) { return Assemble(1, delta); }
method DWORD (line 3748) | static DWORD Assemble(DWORD rn, bool link)
method DWORD (line 3758) | static DWORD AssembleBr(DWORD rn)
method DWORD (line 3762) | static DWORD AssembleBrl(DWORD rn)
method LONG (line 3779) | inline LONG Imm() const { return (LONG)(s.Imm19 << 13) >> 11; }
method DWORD (line 3780) | static DWORD Assemble(DWORD size, DWORD nz, DWORD rt, LONG delta)
method LONG (line 3804) | inline LONG Imm() const { return (LONG)(s.Imm19 << 13) >> 11; }
method DWORD (line 3805) | static DWORD Assemble(DWORD size, DWORD fpneon, DWORD rt, LONG delta)
method DWORD (line 3831) | static DWORD Assemble(DWORD size, DWORD rt, DWORD rn, ULONG imm)
method DWORD (line 3857) | static DWORD Assemble(DWORD size, DWORD type, DWORD rd, DWORD imm, DWO...
method DWORD (line 3868) | static DWORD AssembleMovn32(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3869) | static DWORD AssembleMovn64(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3870) | static DWORD AssembleMovz32(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3871) | static DWORD AssembleMovz64(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3872) | static DWORD AssembleMovk32(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3873) | static DWORD AssembleMovk64(DWORD rd, DWORD imm, DWORD shift) { return...
method LONG (line 3888) | inline LONG Imm() const { return (LONG)(s.Imm14 << 18) >> 16; }
method DWORD (line 3889) | static DWORD Assemble(DWORD size, DWORD nz, DWORD rt, DWORD bit, LONG ...
method ULONG (line 3916) | ULONG GetInstruction(BYTE* pSource)
method BYTE (line 3921) | BYTE EmitInstruction(PULONG& pDstInst, ULONG instruction)
function PVOID (line 312) | PVOID WINAPI DetourCopyInstruction(_In_opt_ PVOID pDst,
function PBYTE (line 342) | PBYTE CDetourDis::CopyInstruction(PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 361) | PBYTE CDetourDis::CopyBytes(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function else (line 416) | else if (bFlags & RIP) {
function PBYTE (line 442) | PBYTE CDetourDis::CopyBytesPrefix(REFCOPYENTRY pEntry, PBYTE pbDst, PBYT...
function PBYTE (line 449) | PBYTE CDetourDis::CopyBytesSegment(REFCOPYENTRY, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 455) | PBYTE CDetourDis::CopyBytesRax(REFCOPYENTRY, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 463) | PBYTE CDetourDis::CopyBytesJump(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE ...
function PBYTE (line 496) | PBYTE CDetourDis::AdjustTarget(PBYTE pbDst, PBYTE pbSrc, UINT cbOp,
function PBYTE (line 576) | PBYTE CDetourDis::Invalid(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 586) | PBYTE CDetourDis::Copy0F(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 593) | PBYTE CDetourDis::Copy0F78(REFCOPYENTRY, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 611) | PBYTE CDetourDis::Copy0F00(REFCOPYENTRY, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 623) | PBYTE CDetourDis::Copy0FB8(REFCOPYENTRY, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 633) | PBYTE CDetourDis::Copy66(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 639) | PBYTE CDetourDis::Copy67(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 645) | PBYTE CDetourDis::CopyF2(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 651) | PBYTE CDetourDis::CopyF3(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 657) | PBYTE CDetourDis::CopyF6(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 677) | PBYTE CDetourDis::CopyF7(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 697) | PBYTE CDetourDis::CopyFF(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 748) | PBYTE CDetourDis::CopyVexEvexCommon(BYTE m, PBYTE pbDst, PBYTE pbSrc, BY...
function PBYTE (line 777) | PBYTE CDetourDis::CopyVexCommon(BYTE m, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 787) | PBYTE CDetourDis::CopyVex3(REFCOPYENTRY, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 832) | PBYTE CDetourDis::CopyVex2(REFCOPYENTRY, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 847) | PBYTE CDetourDis::CopyEvex(REFCOPYENTRY, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 887) | PBYTE CDetourDis::CopyXop(REFCOPYENTRY, PBYTE pbDst, PBYTE pbSrc)
function BOOL (line 927) | BOOL CDetourDis::SetCodeModule(PBYTE pbBeg, PBYTE pbEnd, BOOL fLimitRefe...
function BOOL (line 1602) | BOOL CDetourDis::SanityCheckSystem()
function BYTE (line 1665) | BYTE DETOUR_IA64_BUNDLE::GetTemplate() const
function BYTE (line 1670) | BYTE DETOUR_IA64_BUNDLE::GetInst0() const
function BYTE (line 1675) | BYTE DETOUR_IA64_BUNDLE::GetInst1() const
function BYTE (line 1680) | BYTE DETOUR_IA64_BUNDLE::GetInst2() const
function BYTE (line 1685) | BYTE DETOUR_IA64_BUNDLE::GetUnit(BYTE slot) const
function BYTE (line 1696) | BYTE DETOUR_IA64_BUNDLE::GetUnit0() const
function BYTE (line 1701) | BYTE DETOUR_IA64_BUNDLE::GetUnit1() const
function BYTE (line 1706) | BYTE DETOUR_IA64_BUNDLE::GetUnit2() const
function UINT64 (line 1711) | UINT64 DETOUR_IA64_BUNDLE::GetData0() const
function UINT64 (line 1716) | UINT64 DETOUR_IA64_BUNDLE::GetData1() const
function UINT64 (line 1722) | UINT64 DETOUR_IA64_BUNDLE::GetData2() const
function VOID (line 1727) | VOID DETOUR_IA64_BUNDLE::SetInst(BYTE slot, BYTE nInst)
function VOID (line 1738) | VOID DETOUR_IA64_BUNDLE::SetInst0(BYTE nInst)
function VOID (line 1743) | VOID DETOUR_IA64_BUNDLE::SetInst1(BYTE nInst)
function VOID (line 1748) | VOID DETOUR_IA64_BUNDLE::SetInst2(BYTE nInst)
function VOID (line 1753) | VOID DETOUR_IA64_BUNDLE::SetData(BYTE slot, UINT64 nData)
function VOID (line 1764) | VOID DETOUR_IA64_BUNDLE::SetData0(UINT64 nData)
function VOID (line 1769) | VOID DETOUR_IA64_BUNDLE::SetData1(UINT64 nData)
function VOID (line 1775) | VOID DETOUR_IA64_BUNDLE::SetData2(UINT64 nData)
function UINT64 (line 1780) | UINT64 DETOUR_IA64_BUNDLE::GetInstruction(BYTE slot) const
function UINT64 (line 1791) | UINT64 DETOUR_IA64_BUNDLE::GetInstruction0() const
function UINT64 (line 1797) | UINT64 DETOUR_IA64_BUNDLE::GetInstruction1() const
function UINT64 (line 1805) | UINT64 DETOUR_IA64_BUNDLE::GetInstruction2() const
function UINT64 (line 1842) | UINT64 DETOUR_IA64_BUNDLE::SignExtend(UINT64 Value, UINT64 Offset)
function UINT64 (line 1851) | UINT64 DETOUR_IA64_BUNDLE::GetBits(UINT64 Value, UINT64 Offset, UINT64 C...
function UINT64 (line 1857) | UINT64 DETOUR_IA64_BUNDLE::SetBits(UINT64 Value, UINT64 Offset, UINT64 C...
function UINT64 (line 1864) | UINT64 DETOUR_IA64_BUNDLE::GetOpcode(UINT64 instruction)
function UINT64 (line 1871) | UINT64 DETOUR_IA64_BUNDLE::GetX(UINT64 instruction)
function UINT64 (line 1878) | UINT64 DETOUR_IA64_BUNDLE::GetX3(UINT64 instruction)
function UINT64 (line 1885) | UINT64 DETOUR_IA64_BUNDLE::GetX6(UINT64 instruction)
function UINT64 (line 1892) | UINT64 DETOUR_IA64_BUNDLE::GetImm7a(UINT64 instruction)
function UINT64 (line 1898) | UINT64 DETOUR_IA64_BUNDLE::SetImm7a(UINT64 instruction, UINT64 imm7a)
function UINT64 (line 1904) | UINT64 DETOUR_IA64_BUNDLE::GetImm13c(UINT64 instruction)
function UINT64 (line 1910) | UINT64 DETOUR_IA64_BUNDLE::SetImm13c(UINT64 instruction, UINT64 imm13c)
function UINT64 (line 1916) | UINT64 DETOUR_IA64_BUNDLE::GetSignBit(UINT64 instruction)
function UINT64 (line 1922) | UINT64 DETOUR_IA64_BUNDLE::SetSignBit(UINT64 instruction, UINT64 signBit)
function UINT64 (line 1928) | UINT64 DETOUR_IA64_BUNDLE::GetImm20a(UINT64 instruction)
function UINT64 (line 1934) | UINT64 DETOUR_IA64_BUNDLE::SetImm20a(UINT64 instruction, UINT64 imm20a)
function UINT64 (line 1940) | UINT64 DETOUR_IA64_BUNDLE::GetImm20b(UINT64 instruction)
function UINT64 (line 1946) | UINT64 DETOUR_IA64_BUNDLE::SetImm20b(UINT64 instruction, UINT64 imm20b)
function UINT (line 2054) | UINT DETOUR_IA64_BUNDLE::RelocateBundle(_Inout_ DETOUR_IA64_BUNDLE* pDst,
function BOOL (line 2072) | BOOL DETOUR_IA64_BUNDLE::IsBrl() const
function VOID (line 2082) | VOID DETOUR_IA64_BUNDLE::SetBrl()
function UINT64 (line 2089) | UINT64 DETOUR_IA64_BUNDLE::GetBrlImm() const
function VOID (line 2103) | VOID DETOUR_IA64_BUNDLE::SetBrlImm(UINT64 imm)
function UINT64 (line 2119) | UINT64 DETOUR_IA64_BUNDLE::GetBrlTarget() const
function VOID (line 2124) | VOID DETOUR_IA64_BUNDLE::SetBrl(UINT64 target)
function VOID (line 2131) | VOID DETOUR_IA64_BUNDLE::SetBrlTarget(UINT64 target)
function BOOL (line 2137) | BOOL DETOUR_IA64_BUNDLE::IsMovlGp() const
function UINT64 (line 2146) | UINT64 DETOUR_IA64_BUNDLE::GetMovlGp() const
function VOID (line 2168) | VOID DETOUR_IA64_BUNDLE::SetMovlGp(UINT64 gp)
function UINT (line 2193) | UINT DETOUR_IA64_BUNDLE::Copy(_Out_ DETOUR_IA64_BUNDLE *pDst,
function BOOL (line 2213) | BOOL DETOUR_IA64_BUNDLE::SetNop(BYTE slot)
function BOOL (line 2231) | BOOL DETOUR_IA64_BUNDLE::SetNop0()
function BOOL (line 2236) | BOOL DETOUR_IA64_BUNDLE::SetNop1()
function BOOL (line 2241) | BOOL DETOUR_IA64_BUNDLE::SetNop2()
function VOID (line 2246) | VOID DETOUR_IA64_BUNDLE::SetStop()
function PVOID (line 2253) | PVOID WINAPI DetourCopyInstruction(_In_opt_ PVOID pDst,
class CDetourDis (line 2293) | class CDetourDis
type COPYENTRY (line 167) | struct COPYENTRY
type COPYENTRY (line 187) | struct COPYENTRY
type COPYENTRY (line 2307) | struct COPYENTRY {
type Branch5 (line 2314) | struct Branch5
type Branch5Target (line 2323) | struct Branch5Target
type Branch8 (line 2331) | struct Branch8
type Branch8Target (line 2338) | struct Branch8Target
type Branch11 (line 2345) | struct Branch11
type Branch11Target (line 2351) | struct Branch11Target
type Branch20 (line 2358) | struct Branch20
type Branch20Target (line 2371) | struct Branch20Target
type Branch24 (line 2382) | struct Branch24
type Branch24Target (line 2395) | struct Branch24Target
type LiteralLoad8 (line 2406) | struct LiteralLoad8
type LiteralLoad8Target (line 2413) | struct LiteralLoad8Target
type LiteralLoad12 (line 2420) | struct LiteralLoad12
type LiteralLoad12Target (line 2429) | struct LiteralLoad12Target
type ImmediateRegisterLoad32 (line 2435) | struct ImmediateRegisterLoad32
type ImmediateRegisterLoad16 (line 2443) | struct ImmediateRegisterLoad16
type TableBranch (line 2450) | struct TableBranch
type Shift (line 2459) | struct Shift
type Add32 (line 2465) | struct Add32
type LogicalShiftLeft32 (line 2478) | struct LogicalShiftLeft32
type StoreImmediate12 (line 2490) | struct StoreImmediate12
method ULONG (line 2536) | ULONG GetLongInstruction(BYTE* pSource)
method BYTE (line 2541) | BYTE EmitLongInstruction(PUSHORT& pDstInst, ULONG instruction)
method BYTE (line 2548) | BYTE EmitShortInstruction(PUSHORT& pDstInst, USHORT instruction)
method PBYTE (line 2554) | PBYTE Align4(PBYTE pValue)
method PBYTE (line 2559) | PBYTE CalculateTarget(PBYTE pSource, LONG delta)
method LONG (line 2564) | LONG CalculateNewDelta(PBYTE pTarget, BYTE* pDest)
method BYTE (line 2569) | BYTE EmitAdd32(PUSHORT& pDstInst, BYTE op1Reg, BYTE op2Reg, BYTE ds...
method BYTE (line 2578) | BYTE EmitLogicalShiftLeft32(PUSHORT& pDstInst, BYTE srcReg, BYTE ds...
method BYTE (line 2586) | BYTE EmitStoreImmediate12(PUSHORT& pDstInst, BYTE srcReg, BYTE base...
method DWORD (line 3653) | static DWORD Assemble(DWORD size, DWORD rd, DWORD rn, ULONG imm, DWORD...
method DWORD (line 3664) | static DWORD AssembleAdd32(DWORD rd, DWORD rn, ULONG imm, DWORD shift)...
method DWORD (line 3665) | static DWORD AssembleAdd64(DWORD rd, DWORD rn, ULONG imm, DWORD shift)...
method LONG (line 3679) | inline LONG Imm() const { DWORD Imm = (s.Imm19 << 2) | s.Imm2; return ...
method DWORD (line 3680) | static DWORD Assemble(DWORD type, DWORD rd, LONG delta)
method DWORD (line 3690) | static DWORD AssembleAdr(DWORD rd, LONG delta) { return Assemble(0, rd...
method DWORD (line 3691) | static DWORD AssembleAdrp(DWORD rd, LONG delta) { return Assemble(1, r...
method LONG (line 3704) | inline LONG Imm() const { return (LONG)(s.Imm19 << 13) >> 11; }
method DWORD (line 3705) | static DWORD AssembleBcc(DWORD condition, LONG delta)
method LONG (line 3725) | inline LONG Imm() const { return (LONG)(s.Imm26 << 6) >> 4; }
method DWORD (line 3726) | static DWORD Assemble(DWORD link, LONG delta)
method DWORD (line 3734) | static DWORD AssembleB(LONG delta) { return Assemble(0, delta); }
method DWORD (line 3735) | static DWORD AssembleBl(LONG delta) { return Assemble(1, delta); }
method DWORD (line 3748) | static DWORD Assemble(DWORD rn, bool link)
method DWORD (line 3758) | static DWORD AssembleBr(DWORD rn)
method DWORD (line 3762) | static DWORD AssembleBrl(DWORD rn)
method LONG (line 3779) | inline LONG Imm() const { return (LONG)(s.Imm19 << 13) >> 11; }
method DWORD (line 3780) | static DWORD Assemble(DWORD size, DWORD nz, DWORD rt, LONG delta)
method LONG (line 3804) | inline LONG Imm() const { return (LONG)(s.Imm19 << 13) >> 11; }
method DWORD (line 3805) | static DWORD Assemble(DWORD size, DWORD fpneon, DWORD rt, LONG delta)
method DWORD (line 3831) | static DWORD Assemble(DWORD size, DWORD rt, DWORD rn, ULONG imm)
method DWORD (line 3857) | static DWORD Assemble(DWORD size, DWORD type, DWORD rd, DWORD imm, DWO...
method DWORD (line 3868) | static DWORD AssembleMovn32(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3869) | static DWORD AssembleMovn64(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3870) | static DWORD AssembleMovz32(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3871) | static DWORD AssembleMovz64(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3872) | static DWORD AssembleMovk32(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3873) | static DWORD AssembleMovk64(DWORD rd, DWORD imm, DWORD shift) { return...
method LONG (line 3888) | inline LONG Imm() const { return (LONG)(s.Imm14 << 18) >> 16; }
method DWORD (line 3889) | static DWORD Assemble(DWORD size, DWORD nz, DWORD rt, DWORD bit, LONG ...
method ULONG (line 3916) | ULONG GetInstruction(BYTE* pSource)
method BYTE (line 3921) | BYTE EmitInstruction(PULONG& pDstInst, ULONG instruction)
function LONG (line 2602) | LONG CDetourDis::DecodeBranch5(ULONG opcode)
function USHORT (line 2615) | USHORT CDetourDis::EncodeBranch5(ULONG originalOpCode, LONG delta)
function LONG (line 2631) | LONG CDetourDis::DecodeBranch8(ULONG opcode)
function USHORT (line 2643) | USHORT CDetourDis::EncodeBranch8(ULONG originalOpCode, LONG delta)
function LONG (line 2658) | LONG CDetourDis::DecodeBranch11(ULONG opcode)
function USHORT (line 2670) | USHORT CDetourDis::EncodeBranch11(ULONG originalOpCode, LONG delta)
function BYTE (line 2685) | BYTE CDetourDis::EmitBranch11(PUSHORT& pDest, LONG relativeAddress)
function LONG (line 2694) | LONG CDetourDis::DecodeBranch20(ULONG opcode)
function ULONG (line 2714) | ULONG CDetourDis::EncodeBranch20(ULONG originalOpCode, LONG delta)
function LONG (line 2733) | LONG CDetourDis::DecodeBranch24(ULONG opcode, BOOL& fLink)
function ULONG (line 2754) | ULONG CDetourDis::EncodeBranch24(ULONG originalOpCode, LONG delta, BOOL ...
function LONG (line 2774) | LONG CDetourDis::DecodeLiteralLoad8(ULONG instruction)
function BYTE (line 2785) | BYTE CDetourDis::EmitLiteralLoad8(PUSHORT& pDest, BYTE targetRegister, P...
function LONG (line 2798) | LONG CDetourDis::DecodeLiteralLoad12(ULONG instruction)
function BYTE (line 2809) | BYTE CDetourDis::EmitLiteralLoad12(PUSHORT& pDest, BYTE targetRegister, ...
function BYTE (line 2823) | BYTE CDetourDis::EmitImmediateRegisterLoad32(PUSHORT& pDest, BYTE reg)
function BYTE (line 2829) | BYTE CDetourDis::EmitImmediateRegisterLoad16(PUSHORT& pDest, BYTE reg)
function BYTE (line 2835) | BYTE CDetourDis::EmitLongLiteralLoad(PUSHORT& pDest, BYTE targetRegister...
function BYTE (line 2857) | BYTE CDetourDis::EmitLongBranch(PUSHORT& pDest, PVOID pTarget)
function BYTE (line 2864) | BYTE CDetourDis::PureCopy16(BYTE* pSource, BYTE* pDest)
function BYTE (line 2870) | BYTE CDetourDis::PureCopy32(BYTE* pSource, BYTE* pDest)
function USHORT (line 2876) | USHORT CDetourDis::CalculateExtra(BYTE sourceLength, BYTE* pDestStart, B...
function BYTE (line 2882) | BYTE CDetourDis::CopyMiscellaneous16(BYTE* pSource, BYTE* pDest)
function BYTE (line 2943) | BYTE CDetourDis::CopyConditionalBranchOrOther16(BYTE* pSource, BYTE* pDest)
function BYTE (line 3001) | BYTE CDetourDis::CopyUnConditionalBranch16(BYTE* pSource, BYTE* pDest)
function BYTE (line 3045) | BYTE CDetourDis::CopyLiteralLoad16(BYTE* pSource, BYTE* pDest)
function BYTE (line 3065) | BYTE CDetourDis::CopyBranchExchangeOrDataProcessing16(BYTE* pSource, BYT...
function BYTE (line 3159) | BYTE CDetourDis::CopyBranch24(BYTE* pSource, BYTE* pDest)
function BYTE (line 3185) | BYTE CDetourDis::CopyBranchOrMiscellaneous32(BYTE* pSource, BYTE* pDest)
function BYTE (line 3285) | BYTE CDetourDis::CopyLiteralLoad32(BYTE* pSource, BYTE* pDest)
function BYTE (line 3302) | BYTE CDetourDis::CopyLoadAndStoreSingle(BYTE* pSource, BYTE* pDest)
function BYTE (line 3342) | BYTE CDetourDis::CopyLoadAndStoreMultipleAndSRS(BYTE* pSource, BYTE* pDest)
function BYTE (line 3348) | BYTE CDetourDis::CopyTableBranch(BYTE* pSource, BYTE* pDest)
function BYTE (line 3445) | BYTE CDetourDis::BeginCopy32(BYTE* pSource, BYTE* pDest)
function PBYTE (line 3542) | PBYTE CDetourDis::CopyInstruction(PBYTE pDst,
function PVOID (line 3578) | PVOID WINAPI DetourCopyInstruction(_In_opt_ PVOID pDst,
class CDetourDis (line 3628) | class CDetourDis
type COPYENTRY (line 167) | struct COPYENTRY
type COPYENTRY (line 187) | struct COPYENTRY
type COPYENTRY (line 2307) | struct COPYENTRY {
type Branch5 (line 2314) | struct Branch5
type Branch5Target (line 2323) | struct Branch5Target
type Branch8 (line 2331) | struct Branch8
type Branch8Target (line 2338) | struct Branch8Target
type Branch11 (line 2345) | struct Branch11
type Branch11Target (line 2351) | struct Branch11Target
type Branch20 (line 2358) | struct Branch20
type Branch20Target (line 2371) | struct Branch20Target
type Branch24 (line 2382) | struct Branch24
type Branch24Target (line 2395) | struct Branch24Target
type LiteralLoad8 (line 2406) | struct LiteralLoad8
type LiteralLoad8Target (line 2413) | struct LiteralLoad8Target
type LiteralLoad12 (line 2420) | struct LiteralLoad12
type LiteralLoad12Target (line 2429) | struct LiteralLoad12Target
type ImmediateRegisterLoad32 (line 2435) | struct ImmediateRegisterLoad32
type ImmediateRegisterLoad16 (line 2443) | struct ImmediateRegisterLoad16
type TableBranch (line 2450) | struct TableBranch
type Shift (line 2459) | struct Shift
type Add32 (line 2465) | struct Add32
type LogicalShiftLeft32 (line 2478) | struct LogicalShiftLeft32
type StoreImmediate12 (line 2490) | struct StoreImmediate12
method ULONG (line 2536) | ULONG GetLongInstruction(BYTE* pSource)
method BYTE (line 2541) | BYTE EmitLongInstruction(PUSHORT& pDstInst, ULONG instruction)
method BYTE (line 2548) | BYTE EmitShortInstruction(PUSHORT& pDstInst, USHORT instruction)
method PBYTE (line 2554) | PBYTE Align4(PBYTE pValue)
method PBYTE (line 2559) | PBYTE CalculateTarget(PBYTE pSource, LONG delta)
method LONG (line 2564) | LONG CalculateNewDelta(PBYTE pTarget, BYTE* pDest)
method BYTE (line 2569) | BYTE EmitAdd32(PUSHORT& pDstInst, BYTE op1Reg, BYTE op2Reg, BYTE ds...
method BYTE (line 2578) | BYTE EmitLogicalShiftLeft32(PUSHORT& pDstInst, BYTE srcReg, BYTE ds...
method BYTE (line 2586) | BYTE EmitStoreImmediate12(PUSHORT& pDstInst, BYTE srcReg, BYTE base...
method DWORD (line 3653) | static DWORD Assemble(DWORD size, DWORD rd, DWORD rn, ULONG imm, DWORD...
method DWORD (line 3664) | static DWORD AssembleAdd32(DWORD rd, DWORD rn, ULONG imm, DWORD shift)...
method DWORD (line 3665) | static DWORD AssembleAdd64(DWORD rd, DWORD rn, ULONG imm, DWORD shift)...
method LONG (line 3679) | inline LONG Imm() const { DWORD Imm = (s.Imm19 << 2) | s.Imm2; return ...
method DWORD (line 3680) | static DWORD Assemble(DWORD type, DWORD rd, LONG delta)
method DWORD (line 3690) | static DWORD AssembleAdr(DWORD rd, LONG delta) { return Assemble(0, rd...
method DWORD (line 3691) | static DWORD AssembleAdrp(DWORD rd, LONG delta) { return Assemble(1, r...
method LONG (line 3704) | inline LONG Imm() const { return (LONG)(s.Imm19 << 13) >> 11; }
method DWORD (line 3705) | static DWORD AssembleBcc(DWORD condition, LONG delta)
method LONG (line 3725) | inline LONG Imm() const { return (LONG)(s.Imm26 << 6) >> 4; }
method DWORD (line 3726) | static DWORD Assemble(DWORD link, LONG delta)
method DWORD (line 3734) | static DWORD AssembleB(LONG delta) { return Assemble(0, delta); }
method DWORD (line 3735) | static DWORD AssembleBl(LONG delta) { return Assemble(1, delta); }
method DWORD (line 3748) | static DWORD Assemble(DWORD rn, bool link)
method DWORD (line 3758) | static DWORD AssembleBr(DWORD rn)
method DWORD (line 3762) | static DWORD AssembleBrl(DWORD rn)
method LONG (line 3779) | inline LONG Imm() const { return (LONG)(s.Imm19 << 13) >> 11; }
method DWORD (line 3780) | static DWORD Assemble(DWORD size, DWORD nz, DWORD rt, LONG delta)
method LONG (line 3804) | inline LONG Imm() const { return (LONG)(s.Imm19 << 13) >> 11; }
method DWORD (line 3805) | static DWORD Assemble(DWORD size, DWORD fpneon, DWORD rt, LONG delta)
method DWORD (line 3831) | static DWORD Assemble(DWORD size, DWORD rt, DWORD rn, ULONG imm)
method DWORD (line 3857) | static DWORD Assemble(DWORD size, DWORD type, DWORD rd, DWORD imm, DWO...
method DWORD (line 3868) | static DWORD AssembleMovn32(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3869) | static DWORD AssembleMovn64(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3870) | static DWORD AssembleMovz32(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3871) | static DWORD AssembleMovz64(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3872) | static DWORD AssembleMovk32(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3873) | static DWORD AssembleMovk64(DWORD rd, DWORD imm, DWORD shift) { return...
method LONG (line 3888) | inline LONG Imm() const { return (LONG)(s.Imm14 << 18) >> 16; }
method DWORD (line 3889) | static DWORD Assemble(DWORD size, DWORD nz, DWORD rt, DWORD bit, LONG ...
method ULONG (line 3916) | ULONG GetInstruction(BYTE* pSource)
method BYTE (line 3921) | BYTE EmitInstruction(PULONG& pDstInst, ULONG instruction)
function BYTE (line 3932) | BYTE CDetourDis::PureCopy32(BYTE* pSource, BYTE* pDest)
function PBYTE (line 3945) | PBYTE CDetourDis::CopyInstruction(PBYTE pDst,
function BYTE (line 3984) | BYTE CDetourDis::EmitMovImmediate(PULONG& pDstInst, BYTE rd, UINT64 imme...
function BYTE (line 4035) | BYTE CDetourDis::CopyAdr(BYTE* pSource, BYTE* pDest, ULONG instruction)
function BYTE (line 4089) | BYTE CDetourDis::CopyBcc(BYTE* pSource, BYTE* pDest, ULONG instruction)
function BYTE (line 4123) | BYTE CDetourDis::CopyB_or_Bl(BYTE* pSource, BYTE* pDest, ULONG instructi...
function BYTE (line 4148) | BYTE CDetourDis::CopyB(BYTE* pSource, BYTE* pDest, ULONG instruction)
function BYTE (line 4153) | BYTE CDetourDis::CopyBl(BYTE* pSource, BYTE* pDest, ULONG instruction)
function BYTE (line 4158) | BYTE CDetourDis::CopyCbz(BYTE* pSource, BYTE* pDest, ULONG instruction)
function BYTE (line 4192) | BYTE CDetourDis::CopyTbz(BYTE* pSource, BYTE* pDest, ULONG instruction)
function BYTE (line 4226) | BYTE CDetourDis::CopyLdrLiteral(BYTE* pSource, BYTE* pDest, ULONG instru...
function PVOID (line 4264) | PVOID WINAPI DetourCopyInstruction(_In_opt_ PVOID pDst,
function BOOL (line 4281) | BOOL WINAPI DetourSetCodeModule(_In_ HMODULE hModule,
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Detours/image.cpp
type Detour (line 24) | namespace Detour
function _Out_ (line 37) | _Out_ size_t* pcch)
function _Must_inspect_result_ (line 63) | _Must_inspect_result_
function _Must_inspect_result_ (line 93) | _Must_inspect_result_
class CImageData (line 121) | class CImageData
method BOOL (line 136) | BOOL IsEmpty() { return m_cbData == 0; }
class CImageImportName (line 149) | class CImageImportName
class CImageImportFile (line 151) | class CImageImportFile
class CImageImportName (line 176) | class CImageImportName
class CImage (line 193) | class CImage
function DWORD (line 297) | static inline DWORD Max(DWORD a, DWORD b)
function DWORD (line 302) | static inline DWORD Align(DWORD a, DWORD size)
function DWORD (line 308) | static inline DWORD QuadAlign(DWORD a)
function LPCSTR (line 313) | static LPCSTR DuplicateString(_In_ LPCSTR pszIn)
function VOID (line 341) | static VOID ReleaseString(_In_opt_ LPCSTR psz)
function BOOL (line 432) | BOOL CImageData::SizeTo(DWORD cbData)
function BOOL (line 461) | BOOL CImageData::Purge()
function BOOL (line 470) | BOOL CImageData::IsValid()
function PBYTE (line 494) | PBYTE CImageData::Enumerate(GUID *pGuid, DWORD *pcbData, DWORD *pnIter...
function PBYTE (line 523) | PBYTE CImageData::Find(REFGUID rguid, DWORD *pcbData)
function BOOL (line 551) | BOOL CImageData::Delete(REFGUID rguid)
function PBYTE (line 579) | PBYTE CImageData::Set(REFGUID rguid, PBYTE pbData, DWORD cbData)
class CImageThunks (line 616) | class CImageThunks
method CImageThunks (line 626) | CImageThunks(CImage *pImage, DWORD nThunksMax, DWORD *pnAddr)
method PIMAGE_THUNK_DATA (line 637) | PIMAGE_THUNK_DATA Current(DWORD *pnVirtAddr)
method PIMAGE_THUNK_DATA (line 647) | PIMAGE_THUNK_DATA Allocate(ULONG_PTR nData, DWORD *pnVirtAddr)
method DWORD (line 661) | DWORD Size()
class CImageChars (line 669) | class CImageChars
method CImageChars (line 679) | CImageChars(CImage *pImage, _In_ DWORD nCharsMax, _Out_ DWORD *pnAddr)
method LPCSTR (line 688) | LPCSTR Allocate(_In_ LPCSTR pszString, _Out_ DWORD *pnVirtAddr)
method LPCSTR (line 714) | LPCSTR Allocate(_In_ LPCSTR pszString, _In_ DWORD nHint, _Out_ DWORD...
method DWORD (line 741) | DWORD Size()
function CImage (line 749) | CImage * CImage::IsValid(PDETOUR_BINARY pBinary)
function BOOL (line 789) | BOOL CImage::Close()
function PBYTE (line 822) | PBYTE CImage::DataEnum(GUID *pGuid, DWORD *pcbData, DWORD *pnIterator)
function PBYTE (line 830) | PBYTE CImage::DataFind(REFGUID rguid, DWORD *pcbData)
function PBYTE (line 838) | PBYTE CImage::DataSet(REFGUID rguid, PBYTE pbData, DWORD cbData)
function BOOL (line 846) | BOOL CImage::DataDelete(REFGUID rguid)
function BOOL (line 854) | BOOL CImage::DataPurge()
function BOOL (line 864) | BOOL CImage::SizeOutputBuffer(DWORD cbData)
function PBYTE (line 893) | PBYTE CImage::AllocateOutput(DWORD cbData, DWORD *pnVirtAddr)
function DWORD (line 914) | DWORD CImage::FileAlign(DWORD nAddr)
function DWORD (line 919) | DWORD CImage::SectionAlign(DWORD nAddr)
function PVOID (line 926) | PVOID CImage::RvaToVa(ULONG_PTR nRva)
function DWORD (line 945) | DWORD CImage::RvaToFileOffset(DWORD nRva)
function BOOL (line 962) | BOOL CImage::WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOf...
function BOOL (line 973) | BOOL CImage::CopyFileData(HANDLE hFile, DWORD nOldPos, DWORD cbData)
function BOOL (line 979) | BOOL CImage::ZeroFileData(HANDLE hFile, DWORD cbData)
function BOOL (line 1004) | BOOL CImage::AlignFileData(HANDLE hFile)
function BOOL (line 1022) | BOOL CImage::Read(HANDLE hFile)
function BOOL (line 1333) | static inline BOOL strneq(_In_ LPCSTR pszOne, _In_ LPCSTR pszTwo)
function BOOL (line 1344) | BOOL CImage::CheckImportsNeeded(DWORD *pnTables, DWORD *pnThunks, DWOR...
function CImageImportFile (line 1398) | CImageImportFile * CImage::NewByway(_In_ LPCSTR pszName)
function BOOL (line 1431) | BOOL CImage::EditImports(PVOID pContext,
function BOOL (line 1597) | BOOL CImage::Write(HANDLE hFile)
function PDETOUR_BINARY (line 2032) | PDETOUR_BINARY WINAPI DetourBinaryOpen(_In_ HANDLE hFile)
function BOOL (line 2049) | BOOL WINAPI DetourBinaryWrite(_In_ PDETOUR_BINARY pdi,
function WINAPI (line 2063) | WINAPI DetourBinaryEnumeratePayloads(_In_ PDETOUR_BINARY pBinary,
function WINAPI (line 2079) | WINAPI DetourBinaryFindPayload(_In_ PDETOUR_BINARY pBinary,
function PVOID (line 2091) | PVOID WINAPI DetourBinarySetPayload(_In_ PDETOUR_BINARY pBinary,
function BOOL (line 2104) | BOOL WINAPI DetourBinaryDeletePayload(_In_ PDETOUR_BINARY pBinary,
function BOOL (line 2115) | BOOL WINAPI DetourBinaryPurgePayloads(_In_ PDETOUR_BINARY pBinary)
function BOOL (line 2127) | static BOOL CALLBACK ResetBywayCallback(_In_opt_ PVOID pContext,
function BOOL (line 2138) | static BOOL CALLBACK ResetFileCallback(_In_opt_ PVOID pContext,
function BOOL (line 2150) | static BOOL CALLBACK ResetSymbolCallback(_In_opt_ PVOID pContext,
function BOOL (line 2167) | BOOL WINAPI DetourBinaryResetImports(_In_ PDETOUR_BINARY pBinary)
function BOOL (line 2183) | BOOL WINAPI DetourBinaryEditImports(_In_ PDETOUR_BINARY pBinary,
function BOOL (line 2202) | BOOL WINAPI DetourBinaryClose(_In_ PDETOUR_BINARY pBinary)
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Detours/modules.cpp
function PVOID (line 142) | PVOID WINAPI DetourFindFunction(_In_ LPCSTR pszModule,
function HMODULE (line 249) | HMODULE WINAPI DetourEnumerateModules(_In_opt_ HMODULE hModuleLast)
function PVOID (line 297) | PVOID WINAPI DetourGetEntryPoint(_In_opt_ HMODULE hModule)
function ULONG (line 370) | ULONG WINAPI DetourGetModuleSize(_In_opt_ HMODULE hModule)
function HMODULE (line 405) | HMODULE WINAPI DetourGetContainingModule(_In_ PVOID pvAddr)
function PBYTE (line 453) | static inline PBYTE RvaAdjust(_Pre_notnull_ PIMAGE_DOS_HEADER pDosHeader...
function BOOL (line 461) | BOOL WINAPI DetourEnumerateExports(_In_ HMODULE hModule,
function BOOL (line 543) | BOOL WINAPI DetourEnumerateImportsEx(_In_opt_ HMODULE hModule,
type _DETOUR_ENUMERATE_IMPORTS_THUNK_CONTEXT (line 645) | struct _DETOUR_ENUMERATE_IMPORTS_THUNK_CONTEXT
function BOOL (line 654) | static
function BOOL (line 667) | BOOL WINAPI DetourEnumerateImports(_In_opt_ HMODULE hModule,
function PDETOUR_LOADED_BINARY (line 685) | static PDETOUR_LOADED_BINARY WINAPI GetPayloadSectionFromModule(HMODULE ...
function DWORD (line 749) | DWORD WINAPI DetourGetSizeOfPayloads(_In_opt_ HMODULE hModule)
function WINAPI (line 778) | WINAPI DetourFindPayload(_In_opt_ HMODULE hModule,
function WINAPI (line 831) | WINAPI DetourFindPayloadEx(_In_ REFGUID rguid,
function BOOL (line 846) | BOOL WINAPI DetourFreePayload(_In_ PVOID pvData)
function BOOL (line 864) | BOOL WINAPI DetourRestoreAfterWithEx(_In_reads_bytes_(cbData) PVOID pvData,
function BOOL (line 918) | BOOL WINAPI DetourRestoreAfterWith()
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Detours/uimports.cpp
function BOOL (line 18) | static BOOL UPDATE_IMPORTS_XX(HANDLE hProcess,
FILE: 001.NVL/BKEngine/BKEFileNameDumper/Loader/Loader.cpp
function wmain (line 9) | int wmain(int argc, wchar_t* argv[])
FILE: 001.NVL/BKEngine/BKEngine/BKEngineStatic/BKEngine/BKARCFileBase.cs
type BKEngineVersion (line 12) | public enum BKEngineVersion : int
class BKARCFileBase (line 20) | public abstract class BKARCFileBase : IDisposable
method CheckHeader (line 38) | public abstract bool CheckHeader();
method ParseEntry (line 43) | public abstract void ParseEntry();
method Extract (line 49) | public abstract void Extract(string outputDirectory);
method Dispose (line 54) | public virtual void Dispose()
method CreateInstance (line 67) | public static BKARCFileBase CreateInstance(string packageName, Stream ...
FILE: 001.NVL/BKEngine/BKEngine/BKEngineStatic/BKEngine/BKARCFileV20.cs
class BKARCFileV20 (line 13) | public class BKARCFileV20 : BKARCFileBase
class FileEntryV20 (line 18) | public class FileEntryV20
method CheckHeader (line 47) | public override bool CheckHeader()
method ParseEntry (line 62) | public override void ParseEntry()
method Extract (line 97) | public override void Extract(string outputDirectory)
method DecryptEntry (line 175) | protected virtual uint DecryptEntry(byte[] rawData, uint length, uint ...
method DecryptFile (line 204) | protected virtual void DecryptFile(byte[] data, uint key, uint fileSiz...
method EntryDeserializer (line 226) | protected virtual List<FileEntryV20> EntryDeserializer(Stream entryStr...
method EntryReadFileName (line 261) | protected virtual string EntryReadFileName(Stream entryStream)
FILE: 001.NVL/BKEngine/BKEngine/BKEngineStatic/BKEngine/BKARCFileV21.cs
class BKARCFileV21 (line 12) | public class BKARCFileV21 : BKARCFileV20
method EntryReadFileName (line 14) | protected override string EntryReadFileName(Stream entryStream)
method StringHash (line 29) | public static uint StringHash(string s)
FILE: 001.NVL/BKEngine/BKEngine/BKEngineStatic/BKEngine/BKARCFileV40.cs
class BKARCFileV40 (line 12) | public class BKARCFileV40 : BKARCFileBase
class FileHeaderV40 (line 17) | public class FileHeaderV40
method FileEntryHeaderOffset (line 48) | public virtual uint FileEntryHeaderOffset()
method ReadFileEntry (line 58) | public virtual FileEntryHeaderV40 ReadFileEntry(Stream s)
method Transform (line 76) | protected virtual uint Transform(uint value)
class FileEntryHeaderV40 (line 95) | public class FileEntryHeaderV40
class EntryPrefixV40 (line 123) | public class EntryPrefixV40
type FileType (line 140) | public enum FileType : uint
class DirectoryEntryV40 (line 161) | public class DirectoryEntryV40
class FileEntryV40 (line 181) | public class FileEntryV40
method CheckHeader (line 215) | public override bool CheckHeader()
method Extract (line 230) | public override void Extract(string outputDirectory)
method ExtractInternal (line 244) | protected virtual void ExtractInternal(string outputDirectory, Directo...
method ParseEntry (line 309) | public override void ParseEntry()
method ReadFileHeader (line 347) | protected virtual FileHeaderV40 ReadFileHeader(Stream s)
method DecryptEntry (line 367) | protected virtual uint DecryptEntry(byte[] data, uint length, uint key)
method EntryDeserializer (line 385) | protected virtual DirectoryEntryV40 EntryDeserializer(Stream entryStream)
method EntryReadFileName (line 425) | protected virtual string EntryReadFileName(Stream entryStream)
method ReadDirectory (line 460) | protected virtual DirectoryEntryV40 ReadDirectory(Stream entryStream)
method ReadFileEntry (line 501) | protected virtual FileEntryV40 ReadFileEntry(Stream entryStream, FileT...
method EntryAlignment (line 542) | protected virtual void EntryAlignment(Stream entryStream)
method DecryptFile (line 555) | protected virtual void DecryptFile(byte[] data, uint key, uint archive...
FILE: 001.NVL/BKEngine/BKEngine/BKEngineStatic/BKEngine/BZip2Helper.cs
class BZip2Helper (line 13) | public class BZip2Helper
method CreateDecompressStream (line 20) | public static Stream CreateDecompressStream(Stream s)
FILE: 001.NVL/BKEngine/BKEngine/BKEngineStatic/BKEngine/ZstdHelper.cs
class ZstdHelper (line 13) | public class ZstdHelper
method CreateDecompressStream (line 20) | public static Stream CreateDecompressStream(Stream s)
FILE: 001.NVL/BKEngine/BKEngine/ExtractGUI/MainForm.Designer.cs
class MainForm (line 4) | partial class MainForm
method Dispose (line 15) | protected override void Dispose(bool disposing)
method InitializeComponent (line 30) | private void InitializeComponent()
FILE: 001.NVL/BKEngine/BKEngine/ExtractGUI/MainForm.cs
class MainForm (line 12) | public partial class MainForm : Form
method MainForm (line 14) | public MainForm()
method FileList_DragEnter (line 19) | private void FileList_DragEnter(object sender, DragEventArgs e)
method FileList_DragOver (line 24) | private void FileList_DragOver(object sender, DragEventArgs e)
method FileList_DragDrop (line 29) | private void FileList_DragDrop(object sender, DragEventArgs e)
method cmdExtract_Click (line 48) | private void cmdExtract_Click(object sender, EventArgs e)
FILE: 001.NVL/BKEngine/BKEngine/ExtractGUI/Program.cs
class Program (line 12) | internal static class Program
method Main (line 14) | [STAThread]
FILE: 001.NVL/NVLKrkr2/NVLKR2Extract/ExtractGUI/MainForm.Designer.cs
class MainForm (line 4) | partial class MainForm
method Dispose (line 15) | protected override void Dispose(bool disposing)
method InitializeComponent (line 30) | private void InitializeComponent()
FILE: 001.NVL/NVLKrkr2/NVLKR2Extract/ExtractGUI/MainForm.cs
class MainForm (line 13) | public partial class MainForm : Form
method MainForm (line 15) | public MainForm()
method File_DragEnter (line 27) | private void File_DragEnter(object sender, DragEventArgs e)
method listBoxFiles_DragDrop (line 39) | private void listBoxFiles_DragDrop(object sender, DragEventArgs e)
method btnExtract_Click (line 51) | private void btnExtract_Click(object sender, EventArgs e)
FILE: 001.NVL/NVLKrkr2/NVLKR2Extract/ExtractGUI/Program.cs
class Program (line 7) | static class Program
method Main (line 12) | [STAThread]
FILE: 001.NVL/NVLKrkr2/NVLKR2Extract/HashDecoder/BinaryDataConvert.cs
class BinaryDataConvert (line 13) | public class BinaryDataConvert
method HexToString (line 20) | public static string HexToString(Span<byte> data)
method StringToHexBytes (line 41) | public static byte[] StringToHexBytes(string hexString)
method GetStructureBytes (line 57) | public static byte[] GetStructureBytes<T>(T structure)
method GetStructureBytes (line 75) | unsafe public static void GetStructureBytes<T>(T structure, Span<byte>...
FILE: 001.NVL/NVLKrkr2/NVLKR2Extract/HashDecoder/MainForm.Designer.cs
class MainForm (line 3) | partial class MainForm
method Dispose (line 14) | protected override void Dispose(bool disposing)
method InitializeComponent (line 29) | private void InitializeComponent()
FILE: 001.NVL/NVLKrkr2/NVLKR2Extract/HashDecoder/MainForm.cs
class MainForm (line 17) | public partial class MainForm : Form
method MainForm (line 24) | public MainForm()
method HasherDecode (line 41) | private void HasherDecode(List<string> filePaths, List<string> strings)
method HasherProcess (line 80) | private void HasherProcess(object callback)
method CheckVaild (line 104) | private bool CheckVaild()
method SetProcessUIEnable (line 125) | private void SetProcessUIEnable(bool enable)
method SelectDirectory (line 139) | private static string SelectDirectory()
method SelectDumpFile (line 162) | private static string SelectDumpFile()
method btnSelectArchiveDirectory_Click (line 185) | private void btnSelectArchiveDirectory_Click(object sender, EventArgs e)
method btnEnumPath_Click (line 194) | private async void btnEnumPath_Click(object sender, EventArgs e)
method btnLoadAutoPath_Click (line 210) | private void btnLoadAutoPath_Click(object sender, EventArgs e)
method btnLoadDumpFile_Click (line 233) | private async void btnLoadDumpFile_Click(object sender, EventArgs e)
method btnEnumPathWithAutoPath_Click (line 262) | private async void btnEnumPathWithAutoPath_Click(object sender, EventA...
FILE: 001.NVL/NVLKrkr2/NVLKR2Extract/HashDecoder/PathUtil.cs
class PathUtil (line 12) | public class PathUtil
method EnumerateFullName (line 19) | public static List<string> EnumerateFullName(string directoryPath)
method EnumerateFullName (line 30) | public static List<string> EnumerateFullName(string directoryPath, str...
method EnumerateCurrentDirectoryFullPath (line 40) | public static List<string> EnumerateCurrentDirectoryFullPath(string di...
method EnumerateCurrentDirectoryFullPath (line 51) | public static List<string> EnumerateCurrentDirectoryFullPath(string di...
method EnumerateFileName (line 61) | public static List<string> EnumerateFileName(string directoryPath)
method EnumerateRelativeName (line 71) | public static List<string> EnumerateRelativeName(string directoryPath)
method EnumerateFullDirectory (line 81) | public static List<string> EnumerateFullDirectory(string directoryPath)
method EnumerateRelativeDirectory (line 91) | public static List<string> EnumerateRelativeDirectory(string directory...
method EnumerateKirikiriFileName (line 102) | public static List<string> EnumerateKirikiriFileName(string directoryP...
method EnumerateKirikiriRelativeName (line 113) | public static List<string> EnumerateKirikiriRelativeName(string direct...
method EnumerateKirikiriRelativeDirectory (line 129) | public static List<string> EnumerateKirikiriRelativeDirectory(string d...
method DeleteEmptyDirectory (line 144) | public static void DeleteEmptyDirectory(string path)
FILE: 001.NVL/NVLKrkr2/NVLKR2Extract/HashDecoder/Program.cs
class Program (line 6) | internal static class Program
method Main (line 8) | [STAThread]
FILE: 001.NVL/NVLKrkr2/NVLKR2Extract/HashDecoder/TextCreator.Designer.cs
class TextCreator (line 4) | partial class TextCreator
method Dispose (line 15) | protected override void Dispose(bool disposing)
method InitializeComponent (line 30) | private void InitializeComponent()
FILE: 001.NVL/NVLKrkr2/NVLKR2Extract/HashDecoder/TextCreator.cs
class TextCreator (line 15) | public partial class TextCreator : UserControl
type EditorMode (line 21) | protected enum EditorMode
method UpdateUI (line 70) | private void UpdateUI()
method UpdateStatus (line 92) | private void UpdateStatus()
method DataCommit (line 100) | private void DataCommit(TextStructure ts)
method Initialize (line 131) | private void Initialize()
method TextGenerator (line 154) | private IEnumerable<List<string>> TextGenerator()
method TextCreator (line 196) | public TextCreator()
method btnConfirmVar_Click (line 202) | private void btnConfirmVar_Click(object sender, EventArgs e)
method lbNameItems_MouseUp (line 267) | private void lbNameItems_MouseUp(object sender, MouseEventArgs e)
method listRightClickMenu_Click (line 299) | private void listRightClickMenu_Click(object sender, EventArgs e)
method btnExtract_Click (line 324) | private async void btnExtract_Click(object sender, EventArgs e)
method TypeInput_Enter (line 338) | private void TypeInput_Enter(object sender, EventArgs e)
type TextType (line 348) | public enum TextType
class TextStructure (line 367) | public class TextStructure
class StringGenerator (line 410) | public class StringGenerator
method GetCharCount (line 418) | public static int GetCharCount(List<TextStructure> texts)
method GetText (line 461) | public static IEnumerable<bool> GetText(char[] buffer, List<TextStru...
method FillCharByIndex (line 518) | public static void FillCharByIndex(Span<char> buffer, List<TextStruc...
method PowerN (line 559) | public static long PowerN(int baseN, int n)
FILE: 001.NVL/NVLKrkr2/NVLKR2Extract/NVLKR2Static/NvlKr2/GameKey.cs
class DataManager (line 8) | public class DataManager
type IKeyInformation (line 36) | public interface IKeyInformation
class TinySnowSteam (line 47) | public class TinySnowSteam : IKeyInformation
class LingeringFragranceSteam (line 58) | public class LingeringFragranceSteam : IKeyInformation
class SnowDreamsSteam_Demo (line 69) | public class SnowDreamsSteam_Demo : IKeyInformation
class SnowDreamsSteam (line 80) | public class SnowDreamsSteam : IKeyInformation
class ConspiracyFieldSnowTrapSteam (line 91) | public class ConspiracyFieldSnowTrapSteam : IKeyInformation
class ClassTangerineShortStoriesSteam (line 103) | public class ClassTangerineShortStoriesSteam : IKeyInformation
class GaoKaoLoveSteam (line 114) | public class GaoKaoLoveSteam : IKeyInformation
class GaoKaoLovePackage (line 125) | public class GaoKaoLovePackage : IKeyInformation
class MelodyofIrisSteam (line 136) | public class MelodyofIrisSteam : IKeyInformation
class InoriKazeSteam_Demo (line 147) | public class InoriKazeSteam_Demo : IKeyInformation
class InoriKazeSteam (line 158) | public class InoriKazeSteam : IKeyInformation
class ConspiracyFieldFogShadowSteam (line 169) | public class ConspiracyFieldFogShadowSteam : IKeyInformation
class TrueLoveSteam (line 180) | public class TrueLoveSteam : IKeyInformation
class MemoryOblivionBoxSteam (line 191) | public class MemoryOblivionBoxSteam : IKeyInformation
class MemoryOblivionBoxPackage (line 202) | public class MemoryOblivionBoxPackage : IKeyInformation
class ChouXiaoYaDeTianEHu (line 213) | public class ChouXiaoYaDeTianEHu : IKeyInformation
FILE: 001.NVL/NVLKrkr2/NVLKR2Extract/NVLKR2Static/NvlKr2/XP3Archive.cs
class XP3Archive (line 14) | public class XP3Archive
type XP3File (line 19) | public struct XP3File
type XP3FileSegment (line 94) | public struct XP3FileSegment
type XP3Info (line 122) | public struct XP3Info
method ParseFileEntry (line 160) | public void ParseFileEntry()
method Extract (line 281) | public void Extract(string outDirectoty, IKeyInformation keyInformation)
method Dispose (line 345) | public void Dispose()
method XP3Archive (line 356) | public XP3Archive(string packageName, Stream stream)
method CreateInstance (line 367) | public static XP3Archive CreateInstance(string filePath)
method StringHash (line 389) | public static uint StringHash(string name)
method CalculateHashMulit (line 405) | public static Dictionary<string, string> CalculateHashMulit(List<strin...
FILE: 001.NVL/NVLKrkr2/NVLKR2Extract/NVLKR2Static/NvlKr2/XP3Filter.cs
class XP3Filter (line 10) | public class XP3Filter
method XP3Filter (line 18) | public XP3Filter(XP3Archive.XP3File entry ,IKeyInformation keyInformat...
method Decrypt (line 30) | public void Decrypt(Span<byte> data, long offset = 0)
FILE: 001.NVL/NVLKrkr2/NVLKR2Extract/NVLKR2Static/NvlKr2/Zlib.cs
class Zlib (line 8) | public class Zlib
method CreateDecompressStream (line 15) | public static Stream CreateDecompressStream(Stream s)
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Common/encoding.cpp
type Encoding (line 8) | namespace Encoding
function AnsiToUnicode (line 10) | std::wstring AnsiToUnicode(const std::string& source, int codePage)
function UnicodeToAnsi (line 39) | std::string UnicodeToAnsi(const std::wstring& source, int codePage)
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Common/encoding.h
function namespace (line 7) | namespace Encoding
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Common/file.cpp
type File (line 9) | namespace File
function ReadAllText (line 11) | std::string ReadAllText(const std::string& path)
function ReadAllText (line 98) | std::string ReadAllText(const std::wstring& path)
function WriteAllBytes (line 190) | bool WriteAllBytes(const std::string& path, const void* buffer, size_t...
function WriteAllBytes (line 229) | bool WriteAllBytes(const std::wstring& path, const void* buffer, size_...
function Delete (line 273) | void Delete(const std::string& path)
function Delete (line 278) | void Delete(const std::wstring& path)
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Common/file.h
function namespace (line 7) | namespace File
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Common/log.cpp
type Log (line 10) | namespace Log
function GetTimeString (line 51) | static std::string GetTimeString()
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Common/log.h
function namespace (line 7) | namespace Log
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Common/path.cpp
type Path (line 6) | namespace Path
function GetFileName (line 8) | std::string GetFileName(const std::string& path)
function GetFileName (line 29) | std::wstring GetFileName(const std::wstring& path)
function GetFileNameWithoutExtension (line 50) | std::string GetFileNameWithoutExtension(const std::string& path)
function GetFileNameWithoutExtension (line 64) | std::wstring GetFileNameWithoutExtension(const std::wstring& path)
function GetDirectoryName (line 78) | std::string GetDirectoryName(const std::string& path)
function GetDirectoryName (line 99) | std::wstring GetDirectoryName(const std::wstring& path)
function GetExtension (line 120) | std::string GetExtension(const std::string& path)
function GetExtension (line 149) | std::wstring GetExtension(const std::wstring& path)
function ChangeExtension (line 178) | std::string ChangeExtension(const std::string& path, const std::string...
function ChangeExtension (line 222) | std::wstring ChangeExtension(const std::wstring& path, const std::wstr...
function GetFullPath (line 266) | std::string GetFullPath(const std::string& path)
function GetFullPath (line 296) | std::wstring GetFullPath(const std::wstring& path)
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Common/path.h
function namespace (line 7) | namespace Path
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Common/pe.cpp
type PE (line 5) | namespace PE
function PVOID (line 7) | PVOID GetModuleBase(HMODULE hModule)
function DWORD (line 17) | DWORD GetModuleSize(HMODULE hModule)
function PIMAGE_SECTION_HEADER (line 22) | PIMAGE_SECTION_HEADER GetSectionHeader(HMODULE hModule, PCSTR lpName)
function PBYTE (line 53) | static inline PBYTE RvaAdjust(PIMAGE_DOS_HEADER pDosHeader, DWORD raddr)
function PVOID (line 63) | PVOID GetImportAddress(HMODULE hModule, LPCSTR lpModuleName, LPCSTR lp...
function PVOID (line 118) | PVOID SearchPattern(PVOID lpStartSearch, DWORD dwSearchLen, const char...
function BOOL (line 147) | BOOL WriteMemory(PVOID lpAddress, PVOID lpBuffer, DWORD nSize)
function BOOL (line 161) | BOOL IATHook(HMODULE hModule, LPCSTR lpModuleName, LPCSTR lpProcName, ...
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Common/pe.h
function namespace (line 8) | namespace PE
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Common/stringhelper.cpp
type StringHelper (line 7) | namespace StringHelper
function StartsWith (line 9) | bool StartsWith(const char* source, const char* sub)
function StartsWith (line 22) | bool StartsWith(const wchar_t* source, const wchar_t* sub)
function StartsWith (line 35) | bool StartsWith(const std::string& source, const std::string& sub)
function StartsWith (line 45) | bool StartsWith(const std::wstring& source, const std::wstring& sub)
function EndsWith (line 55) | bool EndsWith(const char* source, const char* sub)
function EndsWith (line 68) | bool EndsWith(const wchar_t* source, const wchar_t* sub)
function EndsWith (line 81) | bool EndsWith(const std::string& source, const std::string& sub)
function EndsWith (line 91) | bool EndsWith(const std::wstring& source, const std::wstring& sub)
function ToLower (line 101) | std::string ToLower(const std::string& source)
function ToLower (line 110) | std::wstring ToLower(const std::wstring& source)
function ToUpper (line 119) | std::string ToUpper(const std::string& source)
function ToUpper (line 128) | std::wstring ToUpper(const std::wstring& source)
function Format (line 137) | std::string Format(const char* format, ...)
function VFormat (line 178) | std::string VFormat(const char* format, va_list ap)
function Format (line 214) | std::wstring Format(const wchar_t* format, ...)
function VFormat (line 255) | std::wstring VFormat(const wchar_t* format, va_list ap)
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Common/stringhelper.h
function namespace (line 7) | namespace StringHelper
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Common/util.cpp
type Util (line 7) | namespace Util
function GetModulePathA (line 9) | std::string GetModulePathA(HMODULE hModule)
function GetModulePathW (line 47) | std::wstring GetModulePathW(HMODULE hModule)
function GetAppPathA (line 85) | std::string GetAppPathA()
function GetAppPathW (line 90) | std::wstring GetAppPathW()
function GetAppDirectoryA (line 95) | std::string GetAppDirectoryA()
function GetAppDirectoryW (line 109) | std::wstring GetAppDirectoryW()
function GetLastErrorMessageA (line 123) | std::string GetLastErrorMessageA()
function GetLastErrorMessageW (line 142) | std::wstring GetLastErrorMessageW()
function ThrowError (line 161) | __declspec(noreturn) void ThrowError(const char* format, ...)
function ThrowError (line 173) | __declspec(noreturn) void ThrowError(const wchar_t* format, ...)
function WriteDebugMessage (line 185) | void WriteDebugMessage(const char* format, ...)
function WriteDebugMessage (line 196) | void WriteDebugMessage(const wchar_t* format, ...)
function OpenFolderDialog (line 207) | std::string OpenFolderDialog(const std::string& title)
function OpenFolderDialog (line 236) | std::wstring OpenFolderDialog(const std::wstring& title)
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Common/util.h
function namespace (line 8) | namespace Util
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Detours/creatwth.cpp
function PVOID (line 34) | static PVOID LoadNtHeaderFromProcess(_In_ HANDLE hProcess,
function HMODULE (line 86) | static HMODULE EnumerateModulesInProcess(_In_ HANDLE hProcess,
function PVOID (line 145) | static PVOID FindDetourSectionInRemoteModule(_In_ HANDLE hProcess,
function PVOID (line 188) | static PVOID FindPayloadInRemoteDetourSection(_In_ HANDLE hProcess,
function WINAPI (line 243) | WINAPI DetourFindRemotePayload(_In_ HANDLE hProcess,
function PBYTE (line 272) | static PBYTE FindAndAllocateNearBase(HANDLE hProcess, PBYTE pbModule, PB...
function DWORD (line 348) | static inline DWORD PadToDword(DWORD dw)
function DWORD (line 353) | static inline DWORD PadToDwordPtr(DWORD dw)
function HRESULT (line 358) | static inline HRESULT ReplaceOptionalSizeA(_Inout_z_count_(cchDest) LPST...
function BOOL (line 380) | static BOOL RecordExeRestore(HANDLE hProcess, HMODULE hModule, DETOUR_EX...
function BOOL (line 501) | static BOOL UpdateFrom32To64(HANDLE hProcess, HMODULE hModule, WORD mach...
function BOOL (line 646) | static BOOL IsWow64ProcessHelper(HANDLE hProcess,
function BOOL (line 677) | BOOL WINAPI DetourUpdateProcessWithDll(_In_ HANDLE hProcess,
function BOOL (line 750) | BOOL WINAPI DetourUpdateProcessWithDllEx(_In_ HANDLE hProcess,
function BOOL (line 899) | BOOL WINAPI DetourCreateProcessWithDllA(_In_opt_ LPCSTR lpApplicationName,
function BOOL (line 957) | BOOL WINAPI DetourCreateProcessWithDllW(_In_opt_ LPCWSTR lpApplicationName,
function BOOL (line 1013) | BOOL WINAPI DetourCopyPayloadToProcess(_In_ HANDLE hProcess,
function WINAPI (line 1022) | WINAPI DetourCopyPayloadToProcessEx(_In_ HANDLE hProcess,
function VOID (line 1131) | VOID CALLBACK DetourFinishHelperProcess(_In_ HWND,
function BOOL (line 1196) | BOOL WINAPI DetourIsHelperProcess(VOID)
function BOOL (line 1221) | static
function VOID (line 1325) | static
function BOOL (line 1334) | BOOL WINAPI DetourProcessViaHelperA(_In_ DWORD dwTargetPid,
function BOOL (line 1342) | BOOL WINAPI DetourProcessViaHelperDllsA(_In_ DWORD dwTargetPid,
function BOOL (line 1433) | BOOL WINAPI DetourProcessViaHelperW(_In_ DWORD dwTargetPid,
function BOOL (line 1440) | BOOL WINAPI DetourProcessViaHelperDllsW(_In_ DWORD dwTargetPid,
function BOOL (line 1538) | BOOL WINAPI DetourCreateProcessWithDllExA(_In_opt_ LPCSTR lpApplicationN...
function BOOL (line 1599) | BOOL WINAPI DetourCreateProcessWithDllExW(_In_opt_ LPCWSTR lpApplication...
function BOOL (line 1660) | BOOL WINAPI DetourCreateProcessWithDllsA(_In_opt_ LPCSTR lpApplicationName,
function BOOL (line 1721) | BOOL WINAPI DetourCreateProcessWithDllsW(_In_opt_ LPCWSTR lpApplicationN...
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Detours/detours.cpp
function Detour_AssertExprWithFunctionName (line 26) | int Detour_AssertExprWithFunctionName(int reportType, const char* filena...
type _DETOUR_ALIGN (line 44) | struct _DETOUR_ALIGN
function detour_is_imported (line 61) | static bool detour_is_imported(PBYTE pbCode, PBYTE pbAddress)
function ULONG_PTR (line 96) | inline ULONG_PTR detour_2gb_below(ULONG_PTR address)
function ULONG_PTR (line 101) | inline ULONG_PTR detour_2gb_above(ULONG_PTR address)
type _DETOUR_TRAMPOLINE (line 114) | struct _DETOUR_TRAMPOLINE
function PBYTE (line 133) | inline PBYTE detour_gen_jmp_immediate(PBYTE pbCode, PBYTE pbJmpVal)
function PBYTE (line 141) | inline PBYTE detour_gen_jmp_indirect(PBYTE pbCode, PBYTE *ppbJmpVal)
function PBYTE (line 149) | inline PBYTE detour_gen_brk(PBYTE pbCode, PBYTE pbLimit)
function PBYTE (line 157) | inline PBYTE detour_skip_jmp(PBYTE pbCode, PVOID *ppGlobals)
function detour_find_jmp_bounds (line 203) | inline void detour_find_jmp_bounds(PBYTE pbCode,
function BOOL (line 229) | inline BOOL detour_does_code_end_function(PBYTE pbCode)
function ULONG (line 258) | inline ULONG detour_is_code_filler(PBYTE pbCode)
type _DETOUR_TRAMPOLINE (line 323) | struct _DETOUR_TRAMPOLINE
function PBYTE (line 345) | inline PBYTE detour_gen_jmp_immediate(PBYTE pbCode, PBYTE pbJmpVal)
function PBYTE (line 353) | inline PBYTE detour_gen_jmp_indirect(PBYTE pbCode, PBYTE *ppbJmpVal)
function PBYTE (line 362) | inline PBYTE detour_gen_brk(PBYTE pbCode, PBYTE pbLimit)
function PBYTE (line 370) | inline PBYTE detour_skip_jmp(PBYTE pbCode, PVOID *ppGlobals)
function detour_find_jmp_bounds (line 416) | inline void detour_find_jmp_bounds(PBYTE pbCode,
function BOOL (line 454) | inline BOOL detour_does_code_end_function(PBYTE pbCode)
function ULONG (line 483) | inline ULONG detour_is_code_filler(PBYTE pbCode)
type _DETOUR_TRAMPOLINE (line 548) | struct _DETOUR_TRAMPOLINE
function PBYTE (line 630) | inline PBYTE detour_skip_jmp(PBYTE pPointer, PVOID *ppGlobals)
function detour_find_jmp_bounds (line 696) | inline void detour_find_jmp_bounds(PBYTE pbCode,
function BOOL (line 705) | inline BOOL detour_does_code_end_function(PBYTE pbCode)
function ULONG (line 712) | inline ULONG detour_is_code_filler(PBYTE pbCode)
type _DETOUR_TRAMPOLINE (line 723) | struct _DETOUR_TRAMPOLINE
function PBYTE (line 743) | inline PBYTE align4(PBYTE pValue)
function ULONG (line 748) | inline ULONG fetch_thumb_opcode(PBYTE pbCode)
function write_thumb_opcode (line 757) | inline void write_thumb_opcode(PBYTE &pbCode, ULONG Opcode)
function PBYTE (line 765) | PBYTE detour_gen_jmp_immediate(PBYTE pbCode, PBYTE *ppPool, PBYTE pbJmpVal)
function PBYTE (line 790) | inline PBYTE detour_gen_brk(PBYTE pbCode, PBYTE pbLimit)
function PBYTE (line 798) | inline PBYTE detour_skip_jmp(PBYTE pbCode, PVOID *ppGlobals)
function detour_find_jmp_bounds (line 835) | inline void detour_find_jmp_bounds(PBYTE pbCode,
function BOOL (line 849) | inline BOOL detour_does_code_end_function(PBYTE pbCode)
function ULONG (line 867) | inline ULONG detour_is_code_filler(PBYTE pbCode)
type _DETOUR_TRAMPOLINE (line 882) | struct _DETOUR_TRAMPOLINE
function ULONG (line 925) | inline ULONG fetch_opcode(PBYTE pbCode)
function write_opcode (line 930) | inline void write_opcode(PBYTE &pbCode, ULONG Opcode)
type ARM64_INDIRECT_JMP (line 936) | struct ARM64_INDIRECT_JMP {
function PBYTE (line 974) | PBYTE detour_gen_jmp_indirect(BYTE *pbCode, ULONG64 *pbJmpVal)
function PBYTE (line 1009) | PBYTE detour_gen_jmp_immediate(PBYTE pbCode, PBYTE *ppPool, PBYTE pbJmpVal)
function PBYTE (line 1032) | inline PBYTE detour_gen_brk(PBYTE pbCode, PBYTE pbLimit)
function INT64 (line 1040) | inline INT64 detour_sign_extend(UINT64 value, UINT bits)
function PBYTE (line 1049) | inline PBYTE detour_skip_jmp(PBYTE pbCode, PVOID *ppGlobals)
function detour_find_jmp_bounds (line 1138) | inline void detour_find_jmp_bounds(PBYTE pbCode,
function BOOL (line 1154) | inline BOOL detour_does_code_end_function(PBYTE pbCode)
function ULONG (line 1164) | inline ULONG detour_is_code_filler(PBYTE pbCode)
type DETOUR_REGION (line 1179) | struct DETOUR_REGION
function DWORD (line 1194) | static DWORD detour_writable_trampoline_regions()
function detour_runnable_trampoline_regions (line 1206) | static void detour_runnable_trampoline_regions()
function PBYTE (line 1218) | static PBYTE detour_alloc_round_down_to_region(PBYTE pbTry)
function PBYTE (line 1228) | static PBYTE detour_alloc_round_up_to_region(PBYTE pbTry)
function PVOID (line 1241) | static PVOID detour_alloc_region_from_lo(PBYTE pbLo, PBYTE pbHi)
function PVOID (line 1290) | static PVOID detour_alloc_region_from_hi(PBYTE pbLo, PBYTE pbHi)
function PVOID (line 1339) | static PVOID detour_alloc_trampoline_allocate_new(PBYTE pbTarget,
function PVOID (line 1379) | PVOID WINAPI DetourAllocateRegionWithinJumpBounds(_In_ LPCVOID pbTarget,
function PDETOUR_TRAMPOLINE (line 1398) | static PDETOUR_TRAMPOLINE detour_alloc_trampoline(PBYTE pbTarget)
function detour_free_trampoline (line 1468) | static void detour_free_trampoline(PDETOUR_TRAMPOLINE pTrampoline)
function BOOL (line 1478) | static BOOL detour_is_region_empty(PDETOUR_REGION pRegion)
function detour_free_unused_trampoline_regions (line 1502) | static void detour_free_unused_trampoline_regions()
type DetourThread (line 1523) | struct DetourThread
type DetourOperation (line 1529) | struct DetourOperation
function PVOID (line 1550) | PVOID WINAPI DetourCodeFromPointer(_In_ PVOID pPointer,
function BOOL (line 1558) | BOOL WINAPI DetourSetIgnoreTooSmall(_In_ BOOL fIgnore)
function BOOL (line 1565) | BOOL WINAPI DetourSetRetainRegions(_In_ BOOL fRetain)
function PVOID (line 1572) | PVOID WINAPI DetourSetSystemRegionLowerBound(_In_ PVOID pSystemRegionLow...
function PVOID (line 1579) | PVOID WINAPI DetourSetSystemRegionUpperBound(_In_ PVOID pSystemRegionUpp...
function LONG (line 1586) | LONG WINAPI DetourTransactionBegin()
function LONG (line 1610) | LONG WINAPI DetourTransactionAbort()
function LONG (line 1654) | LONG WINAPI DetourTransactionCommit()
function BYTE (line 1659) | static BYTE detour_align_from_trampoline(PDETOUR_TRAMPOLINE pTrampoline,...
function LONG (line 1669) | static LONG detour_align_from_target(PDETOUR_TRAMPOLINE pTrampoline, LON...
function LONG (line 1679) | LONG WINAPI DetourTransactionCommitEx(_Out_opt_ PVOID **pppFailedPointer)
function LONG (line 1948) | LONG WINAPI DetourUpdateThread(_In_ HANDLE hThread)
function LONG (line 1991) | LONG WINAPI DetourAttach(_Inout_ PVOID *ppPointer,
function LONG (line 1997) | LONG WINAPI DetourAttachEx(_Inout_ PVOID *ppPointer,
function LONG (line 2357) | LONG WINAPI DetourDetach(_Inout_ PVOID *ppPointer,
function DWORD (line 2528) | static DWORD DetourPageProtectAdjustExecute(_In_ DWORD dwOldProtect,
function WINAPI (line 2547) | WINAPI DetourVirtualProtectSameExecuteEx(_In_ HANDLE hProcess,
function WINAPI (line 2572) | WINAPI DetourVirtualProtectSameExecute(_In_ PVOID pAddress,
function BOOL (line 2581) | BOOL WINAPI DetourAreSameGuid(_In_ REFGUID left, _In_ REFGUID right)
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Detours/detours.h
type LONG (line 133) | typedef LONG LONG_PTR;
type ULONG (line 134) | typedef ULONG ULONG_PTR;
type GUID (line 333) | typedef struct _GUID
type DETOUR_TRAMPOLINE (line 384) | typedef struct _DETOUR_TRAMPOLINE DETOUR_TRAMPOLINE, *PDETOUR_TRAMPOLINE;
type DETOUR_SECTION_HEADER (line 389) | typedef struct _DETOUR_SECTION_HEADER
type DETOUR_SECTION_RECORD (line 414) | typedef struct _DETOUR_SECTION_RECORD
type DETOUR_CLR_HEADER (line 421) | typedef struct _DETOUR_CLR_HEADER
type DETOUR_EXE_RESTORE (line 435) | typedef struct _DETOUR_EXE_RESTORE
type DETOUR_EXE_HELPER (line 477) | typedef struct _DETOUR_EXE_HELPER
type VOID (line 550) | typedef VOID * PDETOUR_BINARY;
type VOID (line 551) | typedef VOID * PDETOUR_LOADED_BINARY;
type IMAGEHLP_MODULE (line 928) | typedef IMAGEHLP_MODULE IMAGEHLP_MODULE64;
type PIMAGEHLP_MODULE (line 929) | typedef PIMAGEHLP_MODULE PIMAGEHLP_MODULE64;
type IMAGEHLP_SYMBOL (line 930) | typedef IMAGEHLP_SYMBOL SYMBOL_INFO;
type PIMAGEHLP_SYMBOL (line 931) | typedef PIMAGEHLP_SYMBOL PSYMBOL_INFO;
function LONG (line 933) | static inline
type DETOUR_SYM_INFO (line 966) | typedef struct _DETOUR_SYM_INFO
type DETOUR_IA64_BUNDLE (line 1033) | struct DETOUR_IA64_BUNDLE
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Detours/disasm.cpp
class CDetourDis (line 156) | class CDetourDis
type COPYENTRY (line 167) | struct COPYENTRY
type COPYENTRY (line 187) | struct COPYENTRY
type COPYENTRY (line 2307) | struct COPYENTRY {
type Branch5 (line 2314) | struct Branch5
type Branch5Target (line 2323) | struct Branch5Target
type Branch8 (line 2331) | struct Branch8
type Branch8Target (line 2338) | struct Branch8Target
type Branch11 (line 2345) | struct Branch11
type Branch11Target (line 2351) | struct Branch11Target
type Branch20 (line 2358) | struct Branch20
type Branch20Target (line 2371) | struct Branch20Target
type Branch24 (line 2382) | struct Branch24
type Branch24Target (line 2395) | struct Branch24Target
type LiteralLoad8 (line 2406) | struct LiteralLoad8
type LiteralLoad8Target (line 2413) | struct LiteralLoad8Target
type LiteralLoad12 (line 2420) | struct LiteralLoad12
type LiteralLoad12Target (line 2429) | struct LiteralLoad12Target
type ImmediateRegisterLoad32 (line 2435) | struct ImmediateRegisterLoad32
type ImmediateRegisterLoad16 (line 2443) | struct ImmediateRegisterLoad16
type TableBranch (line 2450) | struct TableBranch
type Shift (line 2459) | struct Shift
type Add32 (line 2465) | struct Add32
type LogicalShiftLeft32 (line 2478) | struct LogicalShiftLeft32
type StoreImmediate12 (line 2490) | struct StoreImmediate12
method ULONG (line 2536) | ULONG GetLongInstruction(BYTE* pSource)
method BYTE (line 2541) | BYTE EmitLongInstruction(PUSHORT& pDstInst, ULONG instruction)
method BYTE (line 2548) | BYTE EmitShortInstruction(PUSHORT& pDstInst, USHORT instruction)
method PBYTE (line 2554) | PBYTE Align4(PBYTE pValue)
method PBYTE (line 2559) | PBYTE CalculateTarget(PBYTE pSource, LONG delta)
method LONG (line 2564) | LONG CalculateNewDelta(PBYTE pTarget, BYTE* pDest)
method BYTE (line 2569) | BYTE EmitAdd32(PUSHORT& pDstInst, BYTE op1Reg, BYTE op2Reg, BYTE ds...
method BYTE (line 2578) | BYTE EmitLogicalShiftLeft32(PUSHORT& pDstInst, BYTE srcReg, BYTE ds...
method BYTE (line 2586) | BYTE EmitStoreImmediate12(PUSHORT& pDstInst, BYTE srcReg, BYTE base...
method DWORD (line 3653) | static DWORD Assemble(DWORD size, DWORD rd, DWORD rn, ULONG imm, DWORD...
method DWORD (line 3664) | static DWORD AssembleAdd32(DWORD rd, DWORD rn, ULONG imm, DWORD shift)...
method DWORD (line 3665) | static DWORD AssembleAdd64(DWORD rd, DWORD rn, ULONG imm, DWORD shift)...
method LONG (line 3679) | inline LONG Imm() const { DWORD Imm = (s.Imm19 << 2) | s.Imm2; return ...
method DWORD (line 3680) | static DWORD Assemble(DWORD type, DWORD rd, LONG delta)
method DWORD (line 3690) | static DWORD AssembleAdr(DWORD rd, LONG delta) { return Assemble(0, rd...
method DWORD (line 3691) | static DWORD AssembleAdrp(DWORD rd, LONG delta) { return Assemble(1, r...
method LONG (line 3704) | inline LONG Imm() const { return (LONG)(s.Imm19 << 13) >> 11; }
method DWORD (line 3705) | static DWORD AssembleBcc(DWORD condition, LONG delta)
method LONG (line 3725) | inline LONG Imm() const { return (LONG)(s.Imm26 << 6) >> 4; }
method DWORD (line 3726) | static DWORD Assemble(DWORD link, LONG delta)
method DWORD (line 3734) | static DWORD AssembleB(LONG delta) { return Assemble(0, delta); }
method DWORD (line 3735) | static DWORD AssembleBl(LONG delta) { return Assemble(1, delta); }
method DWORD (line 3748) | static DWORD Assemble(DWORD rn, bool link)
method DWORD (line 3758) | static DWORD AssembleBr(DWORD rn)
method DWORD (line 3762) | static DWORD AssembleBrl(DWORD rn)
method LONG (line 3779) | inline LONG Imm() const { return (LONG)(s.Imm19 << 13) >> 11; }
method DWORD (line 3780) | static DWORD Assemble(DWORD size, DWORD nz, DWORD rt, LONG delta)
method LONG (line 3804) | inline LONG Imm() const { return (LONG)(s.Imm19 << 13) >> 11; }
method DWORD (line 3805) | static DWORD Assemble(DWORD size, DWORD fpneon, DWORD rt, LONG delta)
method DWORD (line 3831) | static DWORD Assemble(DWORD size, DWORD rt, DWORD rn, ULONG imm)
method DWORD (line 3857) | static DWORD Assemble(DWORD size, DWORD type, DWORD rd, DWORD imm, DWO...
method DWORD (line 3868) | static DWORD AssembleMovn32(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3869) | static DWORD AssembleMovn64(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3870) | static DWORD AssembleMovz32(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3871) | static DWORD AssembleMovz64(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3872) | static DWORD AssembleMovk32(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3873) | static DWORD AssembleMovk64(DWORD rd, DWORD imm, DWORD shift) { return...
method LONG (line 3888) | inline LONG Imm() const { return (LONG)(s.Imm14 << 18) >> 16; }
method DWORD (line 3889) | static DWORD Assemble(DWORD size, DWORD nz, DWORD rt, DWORD bit, LONG ...
method ULONG (line 3916) | ULONG GetInstruction(BYTE* pSource)
method BYTE (line 3921) | BYTE EmitInstruction(PULONG& pDstInst, ULONG instruction)
function PVOID (line 312) | PVOID WINAPI DetourCopyInstruction(_In_opt_ PVOID pDst,
function PBYTE (line 342) | PBYTE CDetourDis::CopyInstruction(PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 361) | PBYTE CDetourDis::CopyBytes(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function else (line 416) | else if (bFlags & RIP) {
function PBYTE (line 442) | PBYTE CDetourDis::CopyBytesPrefix(REFCOPYENTRY pEntry, PBYTE pbDst, PBYT...
function PBYTE (line 449) | PBYTE CDetourDis::CopyBytesSegment(REFCOPYENTRY, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 455) | PBYTE CDetourDis::CopyBytesRax(REFCOPYENTRY, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 463) | PBYTE CDetourDis::CopyBytesJump(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE ...
function PBYTE (line 496) | PBYTE CDetourDis::AdjustTarget(PBYTE pbDst, PBYTE pbSrc, UINT cbOp,
function PBYTE (line 576) | PBYTE CDetourDis::Invalid(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 586) | PBYTE CDetourDis::Copy0F(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 593) | PBYTE CDetourDis::Copy0F78(REFCOPYENTRY, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 611) | PBYTE CDetourDis::Copy0F00(REFCOPYENTRY, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 623) | PBYTE CDetourDis::Copy0FB8(REFCOPYENTRY, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 633) | PBYTE CDetourDis::Copy66(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 639) | PBYTE CDetourDis::Copy67(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 645) | PBYTE CDetourDis::CopyF2(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 651) | PBYTE CDetourDis::CopyF3(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 657) | PBYTE CDetourDis::CopyF6(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 677) | PBYTE CDetourDis::CopyF7(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 697) | PBYTE CDetourDis::CopyFF(REFCOPYENTRY pEntry, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 748) | PBYTE CDetourDis::CopyVexEvexCommon(BYTE m, PBYTE pbDst, PBYTE pbSrc, BY...
function PBYTE (line 777) | PBYTE CDetourDis::CopyVexCommon(BYTE m, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 787) | PBYTE CDetourDis::CopyVex3(REFCOPYENTRY, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 832) | PBYTE CDetourDis::CopyVex2(REFCOPYENTRY, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 847) | PBYTE CDetourDis::CopyEvex(REFCOPYENTRY, PBYTE pbDst, PBYTE pbSrc)
function PBYTE (line 887) | PBYTE CDetourDis::CopyXop(REFCOPYENTRY, PBYTE pbDst, PBYTE pbSrc)
function BOOL (line 927) | BOOL CDetourDis::SetCodeModule(PBYTE pbBeg, PBYTE pbEnd, BOOL fLimitRefe...
function BOOL (line 1602) | BOOL CDetourDis::SanityCheckSystem()
function BYTE (line 1665) | BYTE DETOUR_IA64_BUNDLE::GetTemplate() const
function BYTE (line 1670) | BYTE DETOUR_IA64_BUNDLE::GetInst0() const
function BYTE (line 1675) | BYTE DETOUR_IA64_BUNDLE::GetInst1() const
function BYTE (line 1680) | BYTE DETOUR_IA64_BUNDLE::GetInst2() const
function BYTE (line 1685) | BYTE DETOUR_IA64_BUNDLE::GetUnit(BYTE slot) const
function BYTE (line 1696) | BYTE DETOUR_IA64_BUNDLE::GetUnit0() const
function BYTE (line 1701) | BYTE DETOUR_IA64_BUNDLE::GetUnit1() const
function BYTE (line 1706) | BYTE DETOUR_IA64_BUNDLE::GetUnit2() const
function UINT64 (line 1711) | UINT64 DETOUR_IA64_BUNDLE::GetData0() const
function UINT64 (line 1716) | UINT64 DETOUR_IA64_BUNDLE::GetData1() const
function UINT64 (line 1722) | UINT64 DETOUR_IA64_BUNDLE::GetData2() const
function VOID (line 1727) | VOID DETOUR_IA64_BUNDLE::SetInst(BYTE slot, BYTE nInst)
function VOID (line 1738) | VOID DETOUR_IA64_BUNDLE::SetInst0(BYTE nInst)
function VOID (line 1743) | VOID DETOUR_IA64_BUNDLE::SetInst1(BYTE nInst)
function VOID (line 1748) | VOID DETOUR_IA64_BUNDLE::SetInst2(BYTE nInst)
function VOID (line 1753) | VOID DETOUR_IA64_BUNDLE::SetData(BYTE slot, UINT64 nData)
function VOID (line 1764) | VOID DETOUR_IA64_BUNDLE::SetData0(UINT64 nData)
function VOID (line 1769) | VOID DETOUR_IA64_BUNDLE::SetData1(UINT64 nData)
function VOID (line 1775) | VOID DETOUR_IA64_BUNDLE::SetData2(UINT64 nData)
function UINT64 (line 1780) | UINT64 DETOUR_IA64_BUNDLE::GetInstruction(BYTE slot) const
function UINT64 (line 1791) | UINT64 DETOUR_IA64_BUNDLE::GetInstruction0() const
function UINT64 (line 1797) | UINT64 DETOUR_IA64_BUNDLE::GetInstruction1() const
function UINT64 (line 1805) | UINT64 DETOUR_IA64_BUNDLE::GetInstruction2() const
function UINT64 (line 1842) | UINT64 DETOUR_IA64_BUNDLE::SignExtend(UINT64 Value, UINT64 Offset)
function UINT64 (line 1851) | UINT64 DETOUR_IA64_BUNDLE::GetBits(UINT64 Value, UINT64 Offset, UINT64 C...
function UINT64 (line 1857) | UINT64 DETOUR_IA64_BUNDLE::SetBits(UINT64 Value, UINT64 Offset, UINT64 C...
function UINT64 (line 1864) | UINT64 DETOUR_IA64_BUNDLE::GetOpcode(UINT64 instruction)
function UINT64 (line 1871) | UINT64 DETOUR_IA64_BUNDLE::GetX(UINT64 instruction)
function UINT64 (line 1878) | UINT64 DETOUR_IA64_BUNDLE::GetX3(UINT64 instruction)
function UINT64 (line 1885) | UINT64 DETOUR_IA64_BUNDLE::GetX6(UINT64 instruction)
function UINT64 (line 1892) | UINT64 DETOUR_IA64_BUNDLE::GetImm7a(UINT64 instruction)
function UINT64 (line 1898) | UINT64 DETOUR_IA64_BUNDLE::SetImm7a(UINT64 instruction, UINT64 imm7a)
function UINT64 (line 1904) | UINT64 DETOUR_IA64_BUNDLE::GetImm13c(UINT64 instruction)
function UINT64 (line 1910) | UINT64 DETOUR_IA64_BUNDLE::SetImm13c(UINT64 instruction, UINT64 imm13c)
function UINT64 (line 1916) | UINT64 DETOUR_IA64_BUNDLE::GetSignBit(UINT64 instruction)
function UINT64 (line 1922) | UINT64 DETOUR_IA64_BUNDLE::SetSignBit(UINT64 instruction, UINT64 signBit)
function UINT64 (line 1928) | UINT64 DETOUR_IA64_BUNDLE::GetImm20a(UINT64 instruction)
function UINT64 (line 1934) | UINT64 DETOUR_IA64_BUNDLE::SetImm20a(UINT64 instruction, UINT64 imm20a)
function UINT64 (line 1940) | UINT64 DETOUR_IA64_BUNDLE::GetImm20b(UINT64 instruction)
function UINT64 (line 1946) | UINT64 DETOUR_IA64_BUNDLE::SetImm20b(UINT64 instruction, UINT64 imm20b)
function UINT (line 2054) | UINT DETOUR_IA64_BUNDLE::RelocateBundle(_Inout_ DETOUR_IA64_BUNDLE* pDst,
function BOOL (line 2072) | BOOL DETOUR_IA64_BUNDLE::IsBrl() const
function VOID (line 2082) | VOID DETOUR_IA64_BUNDLE::SetBrl()
function UINT64 (line 2089) | UINT64 DETOUR_IA64_BUNDLE::GetBrlImm() const
function VOID (line 2103) | VOID DETOUR_IA64_BUNDLE::SetBrlImm(UINT64 imm)
function UINT64 (line 2119) | UINT64 DETOUR_IA64_BUNDLE::GetBrlTarget() const
function VOID (line 2124) | VOID DETOUR_IA64_BUNDLE::SetBrl(UINT64 target)
function VOID (line 2131) | VOID DETOUR_IA64_BUNDLE::SetBrlTarget(UINT64 target)
function BOOL (line 2137) | BOOL DETOUR_IA64_BUNDLE::IsMovlGp() const
function UINT64 (line 2146) | UINT64 DETOUR_IA64_BUNDLE::GetMovlGp() const
function VOID (line 2168) | VOID DETOUR_IA64_BUNDLE::SetMovlGp(UINT64 gp)
function UINT (line 2193) | UINT DETOUR_IA64_BUNDLE::Copy(_Out_ DETOUR_IA64_BUNDLE *pDst,
function BOOL (line 2213) | BOOL DETOUR_IA64_BUNDLE::SetNop(BYTE slot)
function BOOL (line 2231) | BOOL DETOUR_IA64_BUNDLE::SetNop0()
function BOOL (line 2236) | BOOL DETOUR_IA64_BUNDLE::SetNop1()
function BOOL (line 2241) | BOOL DETOUR_IA64_BUNDLE::SetNop2()
function VOID (line 2246) | VOID DETOUR_IA64_BUNDLE::SetStop()
function PVOID (line 2253) | PVOID WINAPI DetourCopyInstruction(_In_opt_ PVOID pDst,
class CDetourDis (line 2293) | class CDetourDis
type COPYENTRY (line 167) | struct COPYENTRY
type COPYENTRY (line 187) | struct COPYENTRY
type COPYENTRY (line 2307) | struct COPYENTRY {
type Branch5 (line 2314) | struct Branch5
type Branch5Target (line 2323) | struct Branch5Target
type Branch8 (line 2331) | struct Branch8
type Branch8Target (line 2338) | struct Branch8Target
type Branch11 (line 2345) | struct Branch11
type Branch11Target (line 2351) | struct Branch11Target
type Branch20 (line 2358) | struct Branch20
type Branch20Target (line 2371) | struct Branch20Target
type Branch24 (line 2382) | struct Branch24
type Branch24Target (line 2395) | struct Branch24Target
type LiteralLoad8 (line 2406) | struct LiteralLoad8
type LiteralLoad8Target (line 2413) | struct LiteralLoad8Target
type LiteralLoad12 (line 2420) | struct LiteralLoad12
type LiteralLoad12Target (line 2429) | struct LiteralLoad12Target
type ImmediateRegisterLoad32 (line 2435) | struct ImmediateRegisterLoad32
type ImmediateRegisterLoad16 (line 2443) | struct ImmediateRegisterLoad16
type TableBranch (line 2450) | struct TableBranch
type Shift (line 2459) | struct Shift
type Add32 (line 2465) | struct Add32
type LogicalShiftLeft32 (line 2478) | struct LogicalShiftLeft32
type StoreImmediate12 (line 2490) | struct StoreImmediate12
method ULONG (line 2536) | ULONG GetLongInstruction(BYTE* pSource)
method BYTE (line 2541) | BYTE EmitLongInstruction(PUSHORT& pDstInst, ULONG instruction)
method BYTE (line 2548) | BYTE EmitShortInstruction(PUSHORT& pDstInst, USHORT instruction)
method PBYTE (line 2554) | PBYTE Align4(PBYTE pValue)
method PBYTE (line 2559) | PBYTE CalculateTarget(PBYTE pSource, LONG delta)
method LONG (line 2564) | LONG CalculateNewDelta(PBYTE pTarget, BYTE* pDest)
method BYTE (line 2569) | BYTE EmitAdd32(PUSHORT& pDstInst, BYTE op1Reg, BYTE op2Reg, BYTE ds...
method BYTE (line 2578) | BYTE EmitLogicalShiftLeft32(PUSHORT& pDstInst, BYTE srcReg, BYTE ds...
method BYTE (line 2586) | BYTE EmitStoreImmediate12(PUSHORT& pDstInst, BYTE srcReg, BYTE base...
method DWORD (line 3653) | static DWORD Assemble(DWORD size, DWORD rd, DWORD rn, ULONG imm, DWORD...
method DWORD (line 3664) | static DWORD AssembleAdd32(DWORD rd, DWORD rn, ULONG imm, DWORD shift)...
method DWORD (line 3665) | static DWORD AssembleAdd64(DWORD rd, DWORD rn, ULONG imm, DWORD shift)...
method LONG (line 3679) | inline LONG Imm() const { DWORD Imm = (s.Imm19 << 2) | s.Imm2; return ...
method DWORD (line 3680) | static DWORD Assemble(DWORD type, DWORD rd, LONG delta)
method DWORD (line 3690) | static DWORD AssembleAdr(DWORD rd, LONG delta) { return Assemble(0, rd...
method DWORD (line 3691) | static DWORD AssembleAdrp(DWORD rd, LONG delta) { return Assemble(1, r...
method LONG (line 3704) | inline LONG Imm() const { return (LONG)(s.Imm19 << 13) >> 11; }
method DWORD (line 3705) | static DWORD AssembleBcc(DWORD condition, LONG delta)
method LONG (line 3725) | inline LONG Imm() const { return (LONG)(s.Imm26 << 6) >> 4; }
method DWORD (line 3726) | static DWORD Assemble(DWORD link, LONG delta)
method DWORD (line 3734) | static DWORD AssembleB(LONG delta) { return Assemble(0, delta); }
method DWORD (line 3735) | static DWORD AssembleBl(LONG delta) { return Assemble(1, delta); }
method DWORD (line 3748) | static DWORD Assemble(DWORD rn, bool link)
method DWORD (line 3758) | static DWORD AssembleBr(DWORD rn)
method DWORD (line 3762) | static DWORD AssembleBrl(DWORD rn)
method LONG (line 3779) | inline LONG Imm() const { return (LONG)(s.Imm19 << 13) >> 11; }
method DWORD (line 3780) | static DWORD Assemble(DWORD size, DWORD nz, DWORD rt, LONG delta)
method LONG (line 3804) | inline LONG Imm() const { return (LONG)(s.Imm19 << 13) >> 11; }
method DWORD (line 3805) | static DWORD Assemble(DWORD size, DWORD fpneon, DWORD rt, LONG delta)
method DWORD (line 3831) | static DWORD Assemble(DWORD size, DWORD rt, DWORD rn, ULONG imm)
method DWORD (line 3857) | static DWORD Assemble(DWORD size, DWORD type, DWORD rd, DWORD imm, DWO...
method DWORD (line 3868) | static DWORD AssembleMovn32(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3869) | static DWORD AssembleMovn64(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3870) | static DWORD AssembleMovz32(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3871) | static DWORD AssembleMovz64(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3872) | static DWORD AssembleMovk32(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3873) | static DWORD AssembleMovk64(DWORD rd, DWORD imm, DWORD shift) { return...
method LONG (line 3888) | inline LONG Imm() const { return (LONG)(s.Imm14 << 18) >> 16; }
method DWORD (line 3889) | static DWORD Assemble(DWORD size, DWORD nz, DWORD rt, DWORD bit, LONG ...
method ULONG (line 3916) | ULONG GetInstruction(BYTE* pSource)
method BYTE (line 3921) | BYTE EmitInstruction(PULONG& pDstInst, ULONG instruction)
function LONG (line 2602) | LONG CDetourDis::DecodeBranch5(ULONG opcode)
function USHORT (line 2615) | USHORT CDetourDis::EncodeBranch5(ULONG originalOpCode, LONG delta)
function LONG (line 2631) | LONG CDetourDis::DecodeBranch8(ULONG opcode)
function USHORT (line 2643) | USHORT CDetourDis::EncodeBranch8(ULONG originalOpCode, LONG delta)
function LONG (line 2658) | LONG CDetourDis::DecodeBranch11(ULONG opcode)
function USHORT (line 2670) | USHORT CDetourDis::EncodeBranch11(ULONG originalOpCode, LONG delta)
function BYTE (line 2685) | BYTE CDetourDis::EmitBranch11(PUSHORT& pDest, LONG relativeAddress)
function LONG (line 2694) | LONG CDetourDis::DecodeBranch20(ULONG opcode)
function ULONG (line 2714) | ULONG CDetourDis::EncodeBranch20(ULONG originalOpCode, LONG delta)
function LONG (line 2733) | LONG CDetourDis::DecodeBranch24(ULONG opcode, BOOL& fLink)
function ULONG (line 2754) | ULONG CDetourDis::EncodeBranch24(ULONG originalOpCode, LONG delta, BOOL ...
function LONG (line 2774) | LONG CDetourDis::DecodeLiteralLoad8(ULONG instruction)
function BYTE (line 2785) | BYTE CDetourDis::EmitLiteralLoad8(PUSHORT& pDest, BYTE targetRegister, P...
function LONG (line 2798) | LONG CDetourDis::DecodeLiteralLoad12(ULONG instruction)
function BYTE (line 2809) | BYTE CDetourDis::EmitLiteralLoad12(PUSHORT& pDest, BYTE targetRegister, ...
function BYTE (line 2823) | BYTE CDetourDis::EmitImmediateRegisterLoad32(PUSHORT& pDest, BYTE reg)
function BYTE (line 2829) | BYTE CDetourDis::EmitImmediateRegisterLoad16(PUSHORT& pDest, BYTE reg)
function BYTE (line 2835) | BYTE CDetourDis::EmitLongLiteralLoad(PUSHORT& pDest, BYTE targetRegister...
function BYTE (line 2857) | BYTE CDetourDis::EmitLongBranch(PUSHORT& pDest, PVOID pTarget)
function BYTE (line 2864) | BYTE CDetourDis::PureCopy16(BYTE* pSource, BYTE* pDest)
function BYTE (line 2870) | BYTE CDetourDis::PureCopy32(BYTE* pSource, BYTE* pDest)
function USHORT (line 2876) | USHORT CDetourDis::CalculateExtra(BYTE sourceLength, BYTE* pDestStart, B...
function BYTE (line 2882) | BYTE CDetourDis::CopyMiscellaneous16(BYTE* pSource, BYTE* pDest)
function BYTE (line 2943) | BYTE CDetourDis::CopyConditionalBranchOrOther16(BYTE* pSource, BYTE* pDest)
function BYTE (line 3001) | BYTE CDetourDis::CopyUnConditionalBranch16(BYTE* pSource, BYTE* pDest)
function BYTE (line 3045) | BYTE CDetourDis::CopyLiteralLoad16(BYTE* pSource, BYTE* pDest)
function BYTE (line 3065) | BYTE CDetourDis::CopyBranchExchangeOrDataProcessing16(BYTE* pSource, BYT...
function BYTE (line 3159) | BYTE CDetourDis::CopyBranch24(BYTE* pSource, BYTE* pDest)
function BYTE (line 3185) | BYTE CDetourDis::CopyBranchOrMiscellaneous32(BYTE* pSource, BYTE* pDest)
function BYTE (line 3285) | BYTE CDetourDis::CopyLiteralLoad32(BYTE* pSource, BYTE* pDest)
function BYTE (line 3302) | BYTE CDetourDis::CopyLoadAndStoreSingle(BYTE* pSource, BYTE* pDest)
function BYTE (line 3342) | BYTE CDetourDis::CopyLoadAndStoreMultipleAndSRS(BYTE* pSource, BYTE* pDest)
function BYTE (line 3348) | BYTE CDetourDis::CopyTableBranch(BYTE* pSource, BYTE* pDest)
function BYTE (line 3445) | BYTE CDetourDis::BeginCopy32(BYTE* pSource, BYTE* pDest)
function PBYTE (line 3542) | PBYTE CDetourDis::CopyInstruction(PBYTE pDst,
function PVOID (line 3578) | PVOID WINAPI DetourCopyInstruction(_In_opt_ PVOID pDst,
class CDetourDis (line 3628) | class CDetourDis
type COPYENTRY (line 167) | struct COPYENTRY
type COPYENTRY (line 187) | struct COPYENTRY
type COPYENTRY (line 2307) | struct COPYENTRY {
type Branch5 (line 2314) | struct Branch5
type Branch5Target (line 2323) | struct Branch5Target
type Branch8 (line 2331) | struct Branch8
type Branch8Target (line 2338) | struct Branch8Target
type Branch11 (line 2345) | struct Branch11
type Branch11Target (line 2351) | struct Branch11Target
type Branch20 (line 2358) | struct Branch20
type Branch20Target (line 2371) | struct Branch20Target
type Branch24 (line 2382) | struct Branch24
type Branch24Target (line 2395) | struct Branch24Target
type LiteralLoad8 (line 2406) | struct LiteralLoad8
type LiteralLoad8Target (line 2413) | struct LiteralLoad8Target
type LiteralLoad12 (line 2420) | struct LiteralLoad12
type LiteralLoad12Target (line 2429) | struct LiteralLoad12Target
type ImmediateRegisterLoad32 (line 2435) | struct ImmediateRegisterLoad32
type ImmediateRegisterLoad16 (line 2443) | struct ImmediateRegisterLoad16
type TableBranch (line 2450) | struct TableBranch
type Shift (line 2459) | struct Shift
type Add32 (line 2465) | struct Add32
type LogicalShiftLeft32 (line 2478) | struct LogicalShiftLeft32
type StoreImmediate12 (line 2490) | struct StoreImmediate12
method ULONG (line 2536) | ULONG GetLongInstruction(BYTE* pSource)
method BYTE (line 2541) | BYTE EmitLongInstruction(PUSHORT& pDstInst, ULONG instruction)
method BYTE (line 2548) | BYTE EmitShortInstruction(PUSHORT& pDstInst, USHORT instruction)
method PBYTE (line 2554) | PBYTE Align4(PBYTE pValue)
method PBYTE (line 2559) | PBYTE CalculateTarget(PBYTE pSource, LONG delta)
method LONG (line 2564) | LONG CalculateNewDelta(PBYTE pTarget, BYTE* pDest)
method BYTE (line 2569) | BYTE EmitAdd32(PUSHORT& pDstInst, BYTE op1Reg, BYTE op2Reg, BYTE ds...
method BYTE (line 2578) | BYTE EmitLogicalShiftLeft32(PUSHORT& pDstInst, BYTE srcReg, BYTE ds...
method BYTE (line 2586) | BYTE EmitStoreImmediate12(PUSHORT& pDstInst, BYTE srcReg, BYTE base...
method DWORD (line 3653) | static DWORD Assemble(DWORD size, DWORD rd, DWORD rn, ULONG imm, DWORD...
method DWORD (line 3664) | static DWORD AssembleAdd32(DWORD rd, DWORD rn, ULONG imm, DWORD shift)...
method DWORD (line 3665) | static DWORD AssembleAdd64(DWORD rd, DWORD rn, ULONG imm, DWORD shift)...
method LONG (line 3679) | inline LONG Imm() const { DWORD Imm = (s.Imm19 << 2) | s.Imm2; return ...
method DWORD (line 3680) | static DWORD Assemble(DWORD type, DWORD rd, LONG delta)
method DWORD (line 3690) | static DWORD AssembleAdr(DWORD rd, LONG delta) { return Assemble(0, rd...
method DWORD (line 3691) | static DWORD AssembleAdrp(DWORD rd, LONG delta) { return Assemble(1, r...
method LONG (line 3704) | inline LONG Imm() const { return (LONG)(s.Imm19 << 13) >> 11; }
method DWORD (line 3705) | static DWORD AssembleBcc(DWORD condition, LONG delta)
method LONG (line 3725) | inline LONG Imm() const { return (LONG)(s.Imm26 << 6) >> 4; }
method DWORD (line 3726) | static DWORD Assemble(DWORD link, LONG delta)
method DWORD (line 3734) | static DWORD AssembleB(LONG delta) { return Assemble(0, delta); }
method DWORD (line 3735) | static DWORD AssembleBl(LONG delta) { return Assemble(1, delta); }
method DWORD (line 3748) | static DWORD Assemble(DWORD rn, bool link)
method DWORD (line 3758) | static DWORD AssembleBr(DWORD rn)
method DWORD (line 3762) | static DWORD AssembleBrl(DWORD rn)
method LONG (line 3779) | inline LONG Imm() const { return (LONG)(s.Imm19 << 13) >> 11; }
method DWORD (line 3780) | static DWORD Assemble(DWORD size, DWORD nz, DWORD rt, LONG delta)
method LONG (line 3804) | inline LONG Imm() const { return (LONG)(s.Imm19 << 13) >> 11; }
method DWORD (line 3805) | static DWORD Assemble(DWORD size, DWORD fpneon, DWORD rt, LONG delta)
method DWORD (line 3831) | static DWORD Assemble(DWORD size, DWORD rt, DWORD rn, ULONG imm)
method DWORD (line 3857) | static DWORD Assemble(DWORD size, DWORD type, DWORD rd, DWORD imm, DWO...
method DWORD (line 3868) | static DWORD AssembleMovn32(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3869) | static DWORD AssembleMovn64(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3870) | static DWORD AssembleMovz32(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3871) | static DWORD AssembleMovz64(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3872) | static DWORD AssembleMovk32(DWORD rd, DWORD imm, DWORD shift) { return...
method DWORD (line 3873) | static DWORD AssembleMovk64(DWORD rd, DWORD imm, DWORD shift) { return...
method LONG (line 3888) | inline LONG Imm() const { return (LONG)(s.Imm14 << 18) >> 16; }
method DWORD (line 3889) | static DWORD Assemble(DWORD size, DWORD nz, DWORD rt, DWORD bit, LONG ...
method ULONG (line 3916) | ULONG GetInstruction(BYTE* pSource)
method BYTE (line 3921) | BYTE EmitInstruction(PULONG& pDstInst, ULONG instruction)
function BYTE (line 3932) | BYTE CDetourDis::PureCopy32(BYTE* pSource, BYTE* pDest)
function PBYTE (line 3945) | PBYTE CDetourDis::CopyInstruction(PBYTE pDst,
function BYTE (line 3984) | BYTE CDetourDis::EmitMovImmediate(PULONG& pDstInst, BYTE rd, UINT64 imme...
function BYTE (line 4035) | BYTE CDetourDis::CopyAdr(BYTE* pSource, BYTE* pDest, ULONG instruction)
function BYTE (line 4089) | BYTE CDetourDis::CopyBcc(BYTE* pSource, BYTE* pDest, ULONG instruction)
function BYTE (line 4123) | BYTE CDetourDis::CopyB_or_Bl(BYTE* pSource, BYTE* pDest, ULONG instructi...
function BYTE (line 4148) | BYTE CDetourDis::CopyB(BYTE* pSource, BYTE* pDest, ULONG instruction)
function BYTE (line 4153) | BYTE CDetourDis::CopyBl(BYTE* pSource, BYTE* pDest, ULONG instruction)
function BYTE (line 4158) | BYTE CDetourDis::CopyCbz(BYTE* pSource, BYTE* pDest, ULONG instruction)
function BYTE (line 4192) | BYTE CDetourDis::CopyTbz(BYTE* pSource, BYTE* pDest, ULONG instruction)
function BYTE (line 4226) | BYTE CDetourDis::CopyLdrLiteral(BYTE* pSource, BYTE* pDest, ULONG instru...
function PVOID (line 4264) | PVOID WINAPI DetourCopyInstruction(_In_opt_ PVOID pDst,
function BOOL (line 4281) | BOOL WINAPI DetourSetCodeModule(_In_ HMODULE hModule,
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Detours/image.cpp
type Detour (line 24) | namespace Detour
function _Out_ (line 37) | _Out_ size_t* pcch)
function _Must_inspect_result_ (line 63) | _Must_inspect_result_
function _Must_inspect_result_ (line 93) | _Must_inspect_result_
class CImageData (line 121) | class CImageData
method BOOL (line 136) | BOOL IsEmpty() { return m_cbData == 0; }
class CImageImportName (line 149) | class CImageImportName
class CImageImportFile (line 151) | class CImageImportFile
class CImageImportName (line 176) | class CImageImportName
class CImage (line 193) | class CImage
function DWORD (line 297) | static inline DWORD Max(DWORD a, DWORD b)
function DWORD (line 302) | static inline DWORD Align(DWORD a, DWORD size)
function DWORD (line 308) | static inline DWORD QuadAlign(DWORD a)
function LPCSTR (line 313) | static LPCSTR DuplicateString(_In_ LPCSTR pszIn)
function VOID (line 341) | static VOID ReleaseString(_In_opt_ LPCSTR psz)
function BOOL (line 432) | BOOL CImageData::SizeTo(DWORD cbData)
function BOOL (line 461) | BOOL CImageData::Purge()
function BOOL (line 470) | BOOL CImageData::IsValid()
function PBYTE (line 494) | PBYTE CImageData::Enumerate(GUID *pGuid, DWORD *pcbData, DWORD *pnIter...
function PBYTE (line 523) | PBYTE CImageData::Find(REFGUID rguid, DWORD *pcbData)
function BOOL (line 551) | BOOL CImageData::Delete(REFGUID rguid)
function PBYTE (line 579) | PBYTE CImageData::Set(REFGUID rguid, PBYTE pbData, DWORD cbData)
class CImageThunks (line 616) | class CImageThunks
method CImageThunks (line 626) | CImageThunks(CImage *pImage, DWORD nThunksMax, DWORD *pnAddr)
method PIMAGE_THUNK_DATA (line 637) | PIMAGE_THUNK_DATA Current(DWORD *pnVirtAddr)
method PIMAGE_THUNK_DATA (line 647) | PIMAGE_THUNK_DATA Allocate(ULONG_PTR nData, DWORD *pnVirtAddr)
method DWORD (line 661) | DWORD Size()
class CImageChars (line 669) | class CImageChars
method CImageChars (line 679) | CImageChars(CImage *pImage, _In_ DWORD nCharsMax, _Out_ DWORD *pnAddr)
method LPCSTR (line 688) | LPCSTR Allocate(_In_ LPCSTR pszString, _Out_ DWORD *pnVirtAddr)
method LPCSTR (line 714) | LPCSTR Allocate(_In_ LPCSTR pszString, _In_ DWORD nHint, _Out_ DWORD...
method DWORD (line 741) | DWORD Size()
function CImage (line 749) | CImage * CImage::IsValid(PDETOUR_BINARY pBinary)
function BOOL (line 789) | BOOL CImage::Close()
function PBYTE (line 822) | PBYTE CImage::DataEnum(GUID *pGuid, DWORD *pcbData, DWORD *pnIterator)
function PBYTE (line 830) | PBYTE CImage::DataFind(REFGUID rguid, DWORD *pcbData)
function PBYTE (line 838) | PBYTE CImage::DataSet(REFGUID rguid, PBYTE pbData, DWORD cbData)
function BOOL (line 846) | BOOL CImage::DataDelete(REFGUID rguid)
function BOOL (line 854) | BOOL CImage::DataPurge()
function BOOL (line 864) | BOOL CImage::SizeOutputBuffer(DWORD cbData)
function PBYTE (line 893) | PBYTE CImage::AllocateOutput(DWORD cbData, DWORD *pnVirtAddr)
function DWORD (line 914) | DWORD CImage::FileAlign(DWORD nAddr)
function DWORD (line 919) | DWORD CImage::SectionAlign(DWORD nAddr)
function PVOID (line 926) | PVOID CImage::RvaToVa(ULONG_PTR nRva)
function DWORD (line 945) | DWORD CImage::RvaToFileOffset(DWORD nRva)
function BOOL (line 962) | BOOL CImage::WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOf...
function BOOL (line 973) | BOOL CImage::CopyFileData(HANDLE hFile, DWORD nOldPos, DWORD cbData)
function BOOL (line 979) | BOOL CImage::ZeroFileData(HANDLE hFile, DWORD cbData)
function BOOL (line 1004) | BOOL CImage::AlignFileData(HANDLE hFile)
function BOOL (line 1022) | BOOL CImage::Read(HANDLE hFile)
function BOOL (line 1333) | static inline BOOL strneq(_In_ LPCSTR pszOne, _In_ LPCSTR pszTwo)
function BOOL (line 1344) | BOOL CImage::CheckImportsNeeded(DWORD *pnTables, DWORD *pnThunks, DWOR...
function CImageImportFile (line 1398) | CImageImportFile * CImage::NewByway(_In_ LPCSTR pszName)
function BOOL (line 1431) | BOOL CImage::EditImports(PVOID pContext,
function BOOL (line 1597) | BOOL CImage::Write(HANDLE hFile)
function PDETOUR_BINARY (line 2032) | PDETOUR_BINARY WINAPI DetourBinaryOpen(_In_ HANDLE hFile)
function BOOL (line 2049) | BOOL WINAPI DetourBinaryWrite(_In_ PDETOUR_BINARY pdi,
function WINAPI (line 2063) | WINAPI DetourBinaryEnumeratePayloads(_In_ PDETOUR_BINARY pBinary,
function WINAPI (line 2079) | WINAPI DetourBinaryFindPayload(_In_ PDETOUR_BINARY pBinary,
function PVOID (line 2091) | PVOID WINAPI DetourBinarySetPayload(_In_ PDETOUR_BINARY pBinary,
function BOOL (line 2104) | BOOL WINAPI DetourBinaryDeletePayload(_In_ PDETOUR_BINARY pBinary,
function BOOL (line 2115) | BOOL WINAPI DetourBinaryPurgePayloads(_In_ PDETOUR_BINARY pBinary)
function BOOL (line 2127) | static BOOL CALLBACK ResetBywayCallback(_In_opt_ PVOID pContext,
function BOOL (line 2138) | static BOOL CALLBACK ResetFileCallback(_In_opt_ PVOID pContext,
function BOOL (line 2150) | static BOOL CALLBACK ResetSymbolCallback(_In_opt_ PVOID pContext,
function BOOL (line 2167) | BOOL WINAPI DetourBinaryResetImports(_In_ PDETOUR_BINARY pBinary)
function BOOL (line 2183) | BOOL WINAPI DetourBinaryEditImports(_In_ PDETOUR_BINARY pBinary,
function BOOL (line 2202) | BOOL WINAPI DetourBinaryClose(_In_ PDETOUR_BINARY pBinary)
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Detours/modules.cpp
function PVOID (line 142) | PVOID WINAPI DetourFindFunction(_In_ LPCSTR pszModule,
function HMODULE (line 249) | HMODULE WINAPI DetourEnumerateModules(_In_opt_ HMODULE hModuleLast)
function PVOID (line 297) | PVOID WINAPI DetourGetEntryPoint(_In_opt_ HMODULE hModule)
function ULONG (line 370) | ULONG WINAPI DetourGetModuleSize(_In_opt_ HMODULE hModule)
function HMODULE (line 405) | HMODULE WINAPI DetourGetContainingModule(_In_ PVOID pvAddr)
function PBYTE (line 453) | static inline PBYTE RvaAdjust(_Pre_notnull_ PIMAGE_DOS_HEADER pDosHeader...
function BOOL (line 461) | BOOL WINAPI DetourEnumerateExports(_In_ HMODULE hModule,
function BOOL (line 543) | BOOL WINAPI DetourEnumerateImportsEx(_In_opt_ HMODULE hModule,
type _DETOUR_ENUMERATE_IMPORTS_THUNK_CONTEXT (line 645) | struct _DETOUR_ENUMERATE_IMPORTS_THUNK_CONTEXT
function BOOL (line 654) | static
function BOOL (line 667) | BOOL WINAPI DetourEnumerateImports(_In_opt_ HMODULE hModule,
function PDETOUR_LOADED_BINARY (line 685) | static PDETOUR_LOADED_BINARY WINAPI GetPayloadSectionFromModule(HMODULE ...
function DWORD (line 749) | DWORD WINAPI DetourGetSizeOfPayloads(_In_opt_ HMODULE hModule)
function WINAPI (line 778) | WINAPI DetourFindPayload(_In_opt_ HMODULE hModule,
function WINAPI (line 831) | WINAPI DetourFindPayloadEx(_In_ REFGUID rguid,
function BOOL (line 846) | BOOL WINAPI DetourFreePayload(_In_ PVOID pvData)
function BOOL (line 864) | BOOL WINAPI DetourRestoreAfterWithEx(_In_reads_bytes_(cbData) PVOID pvData,
function BOOL (line 918) | BOOL WINAPI DetourRestoreAfterWith()
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/Detours/uimports.cpp
function BOOL (line 18) | static BOOL UPDATE_IMPORTS_XX(HANDLE hProcess,
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/KrkrPlugin/tp_stub.cpp
function TVPInitImportStub (line 49) | bool TVPInitImportStub(iTVPFunctionExporter * exporter)
function TVPUninitImportStub (line 57) | void TVPUninitImportStub()
function tjs_uint (line 730) | tjs_uint TJS_INTF_METHOD tTJSDispatch::AddRef(void)
function tjs_uint (line 738) | tjs_uint TJS_INTF_METHOD tTJSDispatch::Release(void)
function tjs_error (line 761) | tjs_error TJS_INTF_METHOD
function tjs_error (line 776) | tjs_error TJS_INTF_METHOD
function tjs_error (line 789) | tjs_error TJS_INTF_METHOD
function tjs_error (line 802) | tjs_error TJS_INTF_METHOD
function tjs_error (line 814) | tjs_error TJS_INTF_METHOD
function tjs_error (line 826) | tjs_error TJS_INTF_METHOD
function tjs_error (line 838) | tjs_error TJS_INTF_METHOD
function tjs_error (line 850) | tjs_error TJS_INTF_METHOD
function tjs_error (line 865) | tjs_error TJS_INTF_METHOD
function tjs_error (line 878) | tjs_error TJS_INTF_METHOD
function tjs_error (line 892) | tjs_error TJS_INTF_METHOD
type t_iTJSDispatch2_AddRef (line 935) | struct t_iTJSDispatch2_AddRef
method t_iTJSDispatch2_AddRef (line 939) | t_iTJSDispatch2_AddRef(
function tjs_uint (line 953) | tjs_uint Try_iTJSDispatch2_AddRef(iTJSDispatch2 * _this)
type t_iTJSDispatch2_Release (line 961) | struct t_iTJSDispatch2_Release
method t_iTJSDispatch2_Release (line 965) | t_iTJSDispatch2_Release(
function tjs_uint (line 979) | tjs_uint Try_iTJSDispatch2_Release(iTJSDispatch2 * _this)
type t_iTJSDispatch2_FuncCall (line 987) | struct t_iTJSDispatch2_FuncCall
method t_iTJSDispatch2_FuncCall (line 998) | t_iTJSDispatch2_FuncCall(
function tjs_error (line 1032) | tjs_error Try_iTJSDispatch2_FuncCall(iTJSDispatch2 * _this, tjs_uint32 f...
type t_iTJSDispatch2_FuncCallByNum (line 1047) | struct t_iTJSDispatch2_FuncCallByNum
method t_iTJSDispatch2_FuncCallByNum (line 1057) | t_iTJSDispatch2_FuncCallByNum(
function tjs_error (line 1088) | tjs_error Try_iTJSDispatch2_FuncCallByNum(iTJSDispatch2 * _this, tjs_uin...
type t_iTJSDispatch2_PropGet (line 1102) | struct t_iTJSDispatch2_PropGet
method t_iTJSDispatch2_PropGet (line 1111) | t_iTJSDispatch2_PropGet(
function tjs_error (line 1139) | tjs_error Try_iTJSDispatch2_PropGet(iTJSDispatch2 * _this, tjs_uint32 fl...
type t_iTJSDispatch2_PropGetByNum (line 1152) | struct t_iTJSDispatch2_PropGetByNum
method t_iTJSDispatch2_PropGetByNum (line 1160) | t_iTJSDispatch2_PropGetByNum(
function tjs_error (line 1185) | tjs_error Try_iTJSDispatch2_PropGetByNum(iTJSDispatch2 * _this, tjs_uint...
type t_iTJSDispatch2_PropSet (line 1197) | struct t_iTJSDispatch2_PropSet
method t_iTJSDispatch2_PropSet (line 1206) | t_iTJSDispatch2_PropSet(
function tjs_error (line 1234) | tjs_error Try_iTJSDispatch2_PropSet(iTJSDispatch2 * _this, tjs_uint32 fl...
type t_iTJSDispatch2_PropSetByNum (line 1247) | struct t_iTJSDispatch2_PropSetByNum
method t_iTJSDispatch2_PropSetByNum (line 1255) | t_iTJSDispatch2_PropSetByNum(
function tjs_error (line 1280) | tjs_error Try_iTJSDispatch2_PropSetByNum(iTJSDispatch2 * _this, tjs_uint...
type t_iTJSDispatch2_GetCount (line 1292) | struct t_iTJSDispatch2_GetCount
method t_iTJSDispatch2_GetCount (line 1300) | t_iTJSDispatch2_GetCount(
function tjs_error (line 1325) | tjs_error Try_iTJSDispatch2_GetCount(iTJSDispatch2 * _this, tjs_int *res...
type t_iTJSDispatch2_GetCountByNum (line 1337) | struct t_iTJSDispatch2_GetCountByNum
method t_iTJSDispatch2_GetCountByNum (line 1344) | t_iTJSDispatch2_GetCountByNum(
function tjs_error (line 1366) | tjs_error Try_iTJSDispatch2_GetCountByNum(iTJSDispatch2 * _this, tjs_int...
type t_iTJSDispatch2_PropSetByVS (line 1377) | struct t_iTJSDispatch2_PropSetByVS
method t_iTJSDispatch2_PropSetByVS (line 1385) | t_iTJSDispatch2_PropSetByVS(
function tjs_error (line 1410) | tjs_error Try_iTJSDispatch2_PropSetByVS(iTJSDispatch2 * _this, tjs_uint3...
type t_iTJSDispatch2_EnumMembers (line 1422) | struct t_iTJSDispatch2_EnumMembers
method t_iTJSDispatch2_EnumMembers (line 1429) | t_iTJSDispatch2_EnumMembers(
function tjs_error (line 1451) | tjs_error Try_iTJSDispatch2_EnumMembers(iTJSDispatch2 * _this, tjs_uint3...
type t_iTJSDispatch2_DeleteMember (line 1462) | struct t_iTJSDispatch2_DeleteMember
method t_iTJSDispatch2_DeleteMember (line 1470) | t_iTJSDispatch2_DeleteMember(
function tjs_error (line 1495) | tjs_error Try_iTJSDispatch2_DeleteMember(iTJSDispatch2 * _this, tjs_uint...
type t_iTJSDispatch2_DeleteMemberByNum (line 1507) | struct t_iTJSDispatch2_DeleteMemberByNum
method t_iTJSDispatch2_DeleteMemberByNum (line 1514) | t_iTJSDispatch2_DeleteMemberByNum(
function tjs_error (line 1536) | tjs_error Try_iTJSDispatch2_DeleteMemberByNum(iTJSDispatch2 * _this, tjs...
type t_iTJSDispatch2_Invalidate (line 1547) | struct t_iTJSDispatch2_Invalidate
method t_iTJSDispatch2_Invalidate (line 1555) | t_iTJSDispatch2_Invalidate(
function tjs_error (line 1580) | tjs_error Try_iTJSDispatch2_Invalidate(iTJSDispatch2 * _this, tjs_uint32...
type t_iTJSDispatch2_InvalidateByNum (line 1592) | struct t_iTJSDispatch2_InvalidateByNum
method t_iTJSDispatch2_InvalidateByNum (line 1599) | t_iTJSDispatch2_InvalidateByNum(
function tjs_error (line 1621) | tjs_error Try_iTJSDispatch2_InvalidateByNum(iTJSDispatch2 * _this, tjs_u...
type t_iTJSDispatch2_IsValid (line 1632) | struct t_iTJSDispatch2_IsValid
method t_iTJSDispatch2_IsValid (line 1640) | t_iTJSDispatch2_IsValid(
function tjs_error (line 1665) | tjs_error Try_iTJSDispatch2_IsValid(iTJSDispatch2 * _this, tjs_uint32 fl...
type t_iTJSDispatch2_IsValidByNum (line 1677) | struct t_iTJSDispatch2_IsValidByNum
method t_iTJSDispatch2_IsValidByNum (line 1684) | t_iTJSDispatch2_IsValidByNum(
function tjs_error (line 1706) | tjs_error Try_iTJSDispatch2_IsValidByNum(iTJSDispatch2 * _this, tjs_uint...
type t_iTJSDispatch2_CreateNew (line 1717) | struct t_iTJSDispatch2_CreateNew
method t_iTJSDispatch2_CreateNew (line 1728) | t_iTJSDispatch2_CreateNew(
function tjs_error (line 1762) | tjs_error Try_iTJSDispatch2_CreateNew(iTJSDispatch2 * _this, tjs_uint32 ...
type t_iTJSDispatch2_CreateNewByNum (line 1777) | struct t_iTJSDispatch2_CreateNewByNum
method t_iTJSDispatch2_CreateNewByNum (line 1787) | t_iTJSDispatch2_CreateNewByNum(
function tjs_error (line 1818) | tjs_error Try_iTJSDispatch2_CreateNewByNum(iTJSDispatch2 * _this, tjs_ui...
type t_iTJSDispatch2_Reserved1 (line 1832) | struct t_iTJSDispatch2_Reserved1
method t_iTJSDispatch2_Reserved1 (line 1836) | t_iTJSDispatch2_Reserved1(
function tjs_error (line 1850) | tjs_error Try_iTJSDispatch2_Reserved1(iTJSDispatch2 * _this)
type t_iTJSDispatch2_IsInstanceOf (line 1858) | struct t_iTJSDispatch2_IsInstanceOf
method t_iTJSDispatch2_IsInstanceOf (line 1867) | t_iTJSDispatch2_IsInstanceOf(
function tjs_error (line 1895) | tjs_error Try_iTJSDispatch2_IsInstanceOf(iTJSDispatch2 * _this, tjs_uint...
type t_iTJSDispatch2_IsInstanceOfByNum (line 1908) | struct t_iTJSDispatch2_IsInstanceOfByNum
method t_iTJSDispatch2_IsInstanceOfByNum (line 1916) | t_iTJSDispatch2_IsInstanceOfByNum(
function tjs_error (line 1941) | tjs_error Try_iTJSDispatch2_IsInstanceOfByNum(iTJSDispatch2 * _this, tjs...
type t_iTJSDispatch2_Operation (line 1953) | struct t_iTJSDispatch2_Operation
method t_iTJSDispatch2_Operation (line 1963) | t_iTJSDispatch2_Operation(
function tjs_error (line 1994) | tjs_error Try_iTJSDispatch2_Operation(iTJSDispatch2 * _this, tjs_uint32 ...
type t_iTJSDispatch2_OperationByNum (line 2008) | struct t_iTJSDispatch2_OperationByNum
method t_iTJSDispatch2_OperationByNum (line 2017) | t_iTJSDispatch2_OperationByNum(
function tjs_error (line 2045) | tjs_error Try_iTJSDispatch2_OperationByNum(iTJSDispatch2 * _this, tjs_ui...
type t_iTJSDispatch2_NativeInstanceSupport (line 2058) | struct t_iTJSDispatch2_NativeInstanceSupport
method t_iTJSDispatch2_NativeInstanceSupport (line 2065) | t_iTJSDispatch2_NativeInstanceSupport(
function tjs_error (line 2087) | tjs_error Try_iTJSDispatch2_NativeInstanceSupport(iTJSDispatch2 * _this,...
type t_iTJSDispatch2_ClassInstanceInfo (line 2098) | struct t_iTJSDispatch2_ClassInstanceInfo
method t_iTJSDispatch2_ClassInstanceInfo (line 2105) | t_iTJSDispatch2_ClassInstanceInfo(
function tjs_error (line 2127) | tjs_error Try_iTJSDispatch2_ClassInstanceInfo(iTJSDispatch2 * _this, tjs...
type t_iTJSDispatch2_Reserved2 (line 2138) | struct t_iTJSDispatch2_Reserved2
method t_iTJSDispatch2_Reserved2 (line 2142) | t_iTJSDispatch2_Reserved2(
function tjs_error (line 2156) | tjs_error Try_iTJSDispatch2_Reserved2(iTJSDispatch2 * _this)
type t_iTJSDispatch2_Reserved3 (line 2164) | struct t_iTJSDispatch2_Reserved3
method t_iTJSDispatch2_Reserved3 (line 2168) | t_iTJSDispatch2_Reserved3(
function tjs_error (line 2182) | tjs_error Try_iTJSDispatch2_Reserved3(iTJSDispatch2 * _this)
function ttstr (line 2207) | ttstr TVPGetLocallyAccessibleName(const ttstr &name)
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/KrkrPlugin/tp_stub.h
type __int8 (line 24) | typedef __int8 tjs_int8;
type tjs_uint8 (line 25) | typedef unsigned __int8 tjs_uint8;
type __int16 (line 26) | typedef __int16 tjs_int16;
type tjs_uint16 (line 27) | typedef unsigned __int16 tjs_uint16;
type __int32 (line 28) | typedef __int32 tjs_int32;
type tjs_uint32 (line 29) | typedef unsigned __int32 tjs_uint32;
type __int64 (line 30) | typedef __int64 tjs_int64;
type tjs_uint64 (line 31) | typedef unsigned __int64 tjs_uint64;
type tjs_int (line 32) | typedef int tjs_int;
type tjs_uint (line 33) | typedef unsigned int tjs_uint;
type wchar_t (line 36) | typedef wchar_t tjs_char;
type tjs_char (line 38) | typedef unsigned short tjs_char;
type tjs_nchar (line 41) | typedef char tjs_nchar;
type tjs_real (line 42) | typedef double tjs_real;
type tjs_int32 (line 64) | typedef tjs_int32 tjs_error;
type tjs_int64 (line 66) | typedef tjs_int64 tTVInteger;
type tjs_real (line 67) | typedef tjs_real tTVReal;
type tTJSVariantString_S (line 137) | struct tTJSVariantString_S
function T (line 166) | T* GetObject() { Object->AddRef(); return Object; }
function T (line 167) | T* GetObjectNoAddRef() { return Object; }
function class (line 210) | class tTJSStringBufferLength
type tTJSString_S (line 224) | struct tTJSString_S
type tTJSString (line 232) | typedef tTJSString ttstr;
function class (line 314) | class iTJSDispatch2
function class (line 546) | class iTJSNativeInstance
function TJS_FAILED (line 583) | static inline bool TJS_FAILED(tjs_error hr)
function TJSIsObjectValid (line 594) | static inline bool TJSIsObjectValid(tjs_error hr)
type tTJSNativeInstanceType (line 609) | enum tTJSNativeInstanceType
function class (line 624) | class tTJSNativeInstance : public iTJSNativeInstance
function class (line 647) | class tTJSNativeClassMethod : public iTJSDispatch2 { }
function class (line 663) | class tTJSNativeClassProperty : public iTJSDispatch2 { }
type iTJSNativeInstance (line 672) | typedef iTJSNativeInstance * (TJS_INTF_METHOD *tTJSCreateNativeInstance)();
function class (line 675) | class tTJSNativeClass : public iTJSDispatch2 { }
function class (line 676) | class tTJSNativeClassForPlugin : public tTJSNativeClass { }
type tTJSVariantOctet_S (line 861) | struct tTJSVariantOctet_S
type tTJSVariantType (line 876) | enum tTJSVariantType
type tTJSVariantClosure_S (line 892) | struct tTJSVariantClosure_S
type tTJSVariant_S (line 901) | struct tTJSVariant_S
function class (line 932) | class tTJSVariantClosure : public tTJSVariantClosure_S
function iTJSDispatch2 (line 944) | iTJSDispatch2 * SelectObjectNoAddRef()
function operator (line 954) | bool operator != (const tTJSVariantClosure &rhs)
function AddRef (line 960) | void AddRef()
function Release (line 966) | void Release()
function tjs_error (line 973) | tjs_error
function tjs_error (line 983) | tjs_error
function tjs_error (line 992) | tjs_error
function tjs_error (line 1002) | tjs_error
function tjs_error (line 1011) | tjs_error
function tjs_error (line 1021) | tjs_error
function tjs_error (line 1030) | tjs_error
function tjs_error (line 1039) | tjs_error
function tjs_error (line 1047) | tjs_error
function tjs_error (line 1056) | tjs_error
function tjs_error (line 1065) | tjs_error
function tjs_error (line 1074) | tjs_error
function tjs_error (line 1082) | tjs_error
function tjs_error (line 1091) | tjs_error
function tjs_error (line 1099) | tjs_error
function tjs_error (line 1108) | tjs_error
function tjs_error (line 1116) | tjs_error
function tjs_error (line 1126) | tjs_error
function tjs_error (line 1140) | tjs_error
function tjs_error (line 1149) | tjs_error
function tjs_error (line 1158) | tjs_error
function tjs_error (line 1167) | tjs_error
function class (line 1197) | class iTJSTextReadStream
function class (line 1204) | class iTJSTextWriteStream
function class (line 1262) | class tTJSDispatch : public iTJSDispatch2
function class (line 2206) | class tTJSVariantString : protected tTJSVariantString_S
function SetString (line 2244) | void SetString(const tjs_nchar * ref)
function AllocBuffer (line 2255) | void AllocBuffer(tjs_uint len)
function ResetString (line 2266) | void ResetString(const tjs_char * ref)
function AppendBuffer (line 2277) | void AppendBuffer(tjs_uint applen)
function Append (line 2288) | void Append(const tjs_char * str)
function Append (line 2299) | void Append(const tjs_char * str , tjs_int applen)
function tTJSVariantString (line 2310) | tTJSVariantString * FixLength()
function tjs_uint32 (line 2321) | tjs_uint32 * GetHint()
function operator (line 2332) | operator const tjs_char *() const
type tjs_int (line 2350) | typedef tjs_int(__stdcall * __functype)(const tTJSVariantString *);
type tTVInteger (line 2361) | typedef tTVInteger(__stdcall * __functype)(const tTJSVariantString *);
type tTVReal (line 2372) | typedef tTVReal(__stdcall * __functype)(const tTJSVariantString *);
function ToNumber (line 2376) | void ToNumber(tTJSVariant & dest) const
type tjs_int (line 2394) | typedef tjs_int(__stdcall * __functype)(const tTJSVariantString *);
function class (line 2403) | class tTJSVariantOctet : protected tTJSVariantOctet_S
function AddRef (line 2452) | void AddRef()
function Release (line 2463) | void Release()
type tjs_uint (line 2481) | typedef tjs_uint(__stdcall * __functype)(const tTJSVariantOctet *);
function tjs_uint8 (line 2485) | const tjs_uint8 * GetData() const
function class (line 2501) | class tTJSVariant : protected tTJSVariant_S
function increment (line 2978) | void increment()
function decrement (line 2989) | void decrement()
function rbitshiftequal (line 3033) | void rbitshiftequal(const tTJSVariant & rhs)
function idivequal (line 3077) | void idivequal(const tTJSVariant & rhs)
function logicalnot (line 3099) | void logicalnot()
function bitnot (line 3110) | void bitnot()
function tonumber (line 3121) | void tonumber()
function changesign (line 3132) | void changesign()
type tTJSVariantType (line 3172) | typedef tTJSVariantType(__stdcall * __functype)(const tTJSVariant *);
function NormalCompare (line 3176) | bool NormalCompare(const tTJSVariant & val2) const
function DiscernCompare (line 3187) | bool DiscernCompare(const tTJSVariant & val2) const
function DiscernCompareStrictReal (line 3198) | bool DiscernCompareStrictReal(const tTJSVariant & val2) const
function GreaterThan (line 3209) | bool GreaterThan(const tTJSVariant & val2) const
function LittlerThan (line 3220) | bool LittlerThan(const tTJSVariant & val2) const
function IsInstanceOf (line 3231) | bool IsInstanceOf(const tjs_char * classname) const
function iTJSDispatch2 (line 3242) | iTJSDispatch2 * AsObject() const
function iTJSDispatch2 (line 3253) | iTJSDispatch2 * AsObjectNoAddRef() const
function iTJSDispatch2 (line 3264) | iTJSDispatch2 * AsObjectThis() const
function iTJSDispatch2 (line 3275) | iTJSDispatch2 * AsObjectThisNoAddRef() const
function tTJSVariantString (line 3297) | tTJSVariantString * AsString() const
function tTJSVariantString (line 3308) | tTJSVariantString * AsStringNoAddRef() const
function tjs_char (line 3319) | const tjs_char * GetString() const
function tTJSVariantOctet (line 3330) | tTJSVariantOctet * AsOctet() const
function tTJSVariantOctet (line 3341) | tTJSVariantOctet * AsOctetNoAddRef() const
type tTVInteger (line 3359) | typedef tTVInteger(__stdcall * __functype)(const tTJSVariant *);
function AsNumber (line 3363) | void AsNumber(tTJSVariant & targ) const
type tTVInteger (line 3381) | typedef tTVInteger(__stdcall * __functype)(const tTJSVariant *);
type tjs_int (line 3403) | typedef tjs_int(__stdcall * __functype)(const tTJSVariant *);
type tTVReal (line 3414) | typedef tTVReal(__stdcall * __functype)(const tTJSVariant *);
type tTVReal (line 3425) | typedef tTVReal(__stdcall * __functype)(const tTJSVariant *);
function tTJSVariant (line 3429) | tTJSVariant operator ||(const tTJSVariant & rhs) const
function tTJSVariant (line 3440) | tTJSVariant operator &&(const tTJSVariant & rhs) const
function tTJSVariant (line 3451) | tTJSVariant operator |(const tTJSVariant & rhs) const
function tTJSVariant (line 3462) | tTJSVariant operator ^(const tTJSVariant & rhs) const
type tTJSVariant (line 3480) | typedef tTJSVariant(__stdcall * __functype)(const tTJSVariant *, const t...
function tTJSVariant (line 3484) | tTJSVariant operator !=(const tTJSVariant & rhs) const
function tTJSVariant (line 3495) | tTJSVariant operator ==(const tTJSVariant & rhs) const
function tTJSVariant (line 3506) | tTJSVariant operator <(const tTJSVariant & rhs) const
function tTJSVariant (line 3517) | tTJSVariant operator >(const tTJSVariant & rhs) const
function tTJSVariant (line 3528) | tTJSVariant operator <=(const tTJSVariant & rhs) const
function tTJSVariant (line 3539) | tTJSVariant operator >=(const tTJSVariant & rhs) const
function tTJSVariant (line 3550) | tTJSVariant operator >>(const tTJSVariant & rhs) const
function tTJSVariant (line 3561) | tTJSVariant rbitshift(tjs_int count) const
function tTJSVariant (line 3572) | tTJSVariant operator <<(const tTJSVariant & rhs) const
function tTJSVariant (line 3583) | tTJSVariant operator %(const tTJSVariant & rhs) const
function tTJSVariant (line 3594) | tTJSVariant operator /(const tTJSVariant & rhs) const
function tTJSVariant (line 3605) | tTJSVariant idiv(const tTJSVariant & rhs) const
type tTJSVariant (line 3623) | typedef tTJSVariant(__stdcall * __functype)(const tTJSVariant *, const t...
type tTJSVariant (line 3634) | typedef tTJSVariant(__stdcall * __functype)(const tTJSVariant *);
type tTJSVariant (line 3645) | typedef tTJSVariant(__stdcall * __functype)(const tTJSVariant *);
type tTJSVariant (line 3656) | typedef tTJSVariant(__stdcall * __functype)(const tTJSVariant *, const t...
type tTJSVariant (line 3667) | typedef tTJSVariant(__stdcall * __functype)(const tTJSVariant *);
type tTJSVariant (line 3678) | typedef tTJSVariant(__stdcall * __functype)(const tTJSVariant *);
type tTJSVariant (line 3689) | typedef tTJSVariant(__stdcall * __functype)(const tTJSVariant *, const t...
function delete (line 3704) | static void operator delete(void * p)
function class (line 3753) | class tTJSString : protected tTJSString_S
function Clear (line 3966) | void Clear()
function tjs_char (line 3977) | tjs_char * AllocBuffer(tjs_uint len)
function tjs_char (line 3988) | tjs_char * AppendBuffer(tjs_uint len)
function FixLen (line 3999) | void FixLen()
function ToLowerCase (line 4021) | void ToLowerCase()
function ToUppserCase (line 4032) | void ToUppserCase()
function tjs_uint32 (line 4043) | tjs_uint32 * GetHint()
function tjs_char (line 4054) | tjs_char * Independ()
function tjs_char (line 4065) | const tjs_char * c_str() const
function tTJSVariantString (line 4076) | tTJSVariantString * AsVariantStringNoAddRef() const
type tjs_int64 (line 4094) | typedef tjs_int64(__stdcall * __functype)(const tTJSString *);
function tjs_int (line 4120) | tjs_int CompareIC(const tTJSString & ref) const
function tjs_int (line 4153) | tjs_int CompareIC(const tjs_char * ref) const
type tTJSString (line 4193) | typedef tTJSString(__stdcall * __functype)(const tTJSString *, const tTJ...
type tTJSString (line 4204) | typedef tTJSString(__stdcall * __functype)(const tTJSString *, const tjs...
type tTJSString (line 4215) | typedef tTJSString(__stdcall * __functype)(const tTJSString *, tjs_char);
function tjs_char (line 4219) | tjs_char operator [](tjs_uint i) const
function AsLowerCase (line 4230) | void AsLowerCase(tTJSString & dest) const
function AsUpperCase (line 4241) | void AsUpperCase(tTJSString & dest) const
function EscapeC (line 4252) | void EscapeC(tTJSString & dest) const
function UnescapeC (line 4263) | void UnescapeC(tTJSString & dest) const
function StartsWith (line 4274) | bool StartsWith(const tjs_char * string) const
function StartsWith (line 4285) | bool StartsWith(const tTJSString & string) const
type tjs_int (line 4303) | typedef tjs_int(__stdcall * __functype)(const tTJSString *);
function ToNarrowStr (line 4307) | void ToNarrowStr(tjs_nchar * dest , tjs_int destmaxlen) const
type tjs_int (line 4336) | typedef tjs_int(__stdcall * __functype)(const tTJSString *);
type tjs_int (line 4347) | typedef tjs_int(__stdcall * __functype)(const tTJSString *);
type tjs_char (line 4358) | typedef tjs_char(__stdcall * __functype)(const tTJSString *);
function delete (line 4373) | static void operator delete(void * p)
function class (line 4441) | class iTVPStorageLister // callback class for GetListAt
function class (line 4447) | class iTVPStorageMedia
type tTVPXP3ExtractionFilterInfo (line 4491) | struct tTVPXP3ExtractionFilterInfo
function class (line 4556) | class tTVPContinuousEventCallbackIntf // callback class for continuous e...
function class (line 4571) | class tTVPCompactEventCallbackIntf // callback class for compact event d...
type tTVPAsyncTriggerMode (line 4581) | enum tTVPAsyncTriggerMode
type iTVPFunctionExporter (line 4590) | struct iTVPFunctionExporter
type TVP_md5_state_t (line 4608) | typedef struct TVP_md5_state_s { tjs_uint8 buffer[4*2+8+4*4+8+64]; } TVP...
type tTVPExceptionDesc (line 4626) | struct tTVPExceptionDesc
type tTVPKAGDebugLevel (line 4650) | enum tTVPKAGDebugLevel
type tTVPClipboardFormat (line 4661) | enum tTVPClipboardFormat
type tTVPSoundGlobalFocusMode (line 4670) | enum tTVPSoundGlobalFocusMode
type tTVPWaveFormat (line 4685) | struct tTVPWaveFormat
type IDirectSound (line 4707) | struct IDirectSound
type tTVPMouseButton (line 4735) | enum tTVPMouseButton
type tTVPImeMode (line 4747) | enum tTVPImeMode
function TVPIsAnyMouseButtonPressedInShiftStateFlags (line 4777) | inline bool TVPIsAnyMouseButtonPressedInShiftStateFlags(tjs_uint32 state)
type tTVPBBBltMethod (line 4811) | enum tTVPBBBltMethod
type tTVPBBStretchType (line 4847) | enum tTVPBBStretchType
type tTVPLayerType (line 4865) | enum tTVPLayerType
function TVPIsTypeUsingAlpha (line 4900) | static bool inline TVPIsTypeUsingAlpha(tTVPLayerType type)
function TVPIsTypeUsingAddAlpha (line 4922) | static bool inline TVPIsTypeUsingAddAlpha(tTVPLayerType type)
function TVPIsTypeUsingAlphaChannel (line 4927) | static bool inline TVPIsTypeUsingAlphaChannel(tTVPLayerType type)
type tTVPPoint (line 4944) | struct tTVPPoint
type tTVPPointD (line 4951) | struct tTVPPointD
function tTVPRect (line 4957) | struct tTVPRect
function set_width (line 4993) | void set_width(tjs_int w) { right = left + w; }
function set_height (line 4994) | void set_height(tjs_int h) { bottom = top + h; }
function add_offsets (line 4996) | void add_offsets(tjs_int x, tjs_int y)
function set_offsets (line 5002) | void set_offsets(tjs_int x, tjs_int y)
function set_size (line 5012) | void set_size(tjs_int w, tjs_int h)
function clear (line 5018) | void clear()
function do_union (line 5028) | bool do_union(const tTVPRect & ref)
function clip (line 5038) | bool clip(const tTVPRect &ref)
function intersects_with_no_empty_check (line 5045) | bool intersects_with_no_empty_check(const tTVPRect & ref) const
function intersects_with (line 5055) | bool intersects_with(const tTVPRect & ref) const
function included_in_no_empty_check (line 5062) | bool included_in_no_empty_check(const tTVPRect & ref) const
function included_in (line 5072) | bool included_in(const tTVPRect & ref) const
function operator (line 5082) | bool operator > (const tTVPRect & rhs) const
function operator (line 5086) | bool operator == (const tTVPRect & rhs) const
function operator (line 5088) | bool operator != (const tTVPRect & rhs) const { return !this->operator =...
type tTVPDrawFace (line 5097) | enum tTVPDrawFace
type tTVPBlendOperationMode (line 5114) | enum tTVPBlendOperationMode
type tTVPHitType (line 5151) | enum tTVPHitType {htMask, htProvince}
function class (line 5173) | class iTVPLayerManager
type tTVPUpdateType (line 5316) | enum tTVPUpdateType
type tTVPBorderStyle (line 5322) | enum tTVPBorderStyle
type tTVPMouseCursorState (line 5328) | enum tTVPMouseCursorState
function class (line 5340) | class iTVPWindow
type tTVPWMRRegMode (line 5416) | enum tTVPWMRRegMode { wrmRegister=0, wrmUnregister=1 }
type tTVPWindowMessage (line 5418) | struct tTVPWindowMessage
type IDirectDraw2 (line 5439) | struct IDirectDraw2
type IDirectDraw7 (line 5440) | struct IDirectDraw7
type IDirectDrawSurface (line 5441) | struct IDirectDrawSurface
type IDirectDrawClipper (line 5442) | struct IDirectDrawClipper
function class (line 5450) | class iTVPDrawDevice
type tTVPVideoOverlayMode (line 5760) | enum tTVPVideoOverlayMode {
type tTVPPeriodEventReason (line 5774) | enum tTVPPeriodEventReason
type tTVPScrollTransFrom (line 5789) | enum tTVPScrollTransFrom
type tTVPScrollTransStay (line 5793) | enum tTVPScrollTransStay
type tTVPTransType (line 5806) | enum tTVPTransType
type tTVPTransUpdateType (line 5825) | enum tTVPTransUpdateType
function class (line 5865) | class iTVPScanLineProvider
function class (line 5895) | class iTVPSimpleOptionProvider
function class (line 5928) | class iTVPSimpleImageProvider
function class (line 5955) | class iTVPLayerUpdater
type tTVPDivisibleData (line 5974) | struct tTVPDivisibleData
function class (line 6003) | class iTVPBaseTransHandler
function class (line 6021) | class iTVPDivisibleTransHandler : public iTVPBaseTransHandler
function class (line 6063) | class iTVPGiveUpdateTransHandler : public iTVPBaseTransHandler
function class (line 6085) | class iTVPTransHandlerProvider
type tTVPGLGammaAdjustData (line 6121) | typedef struct
type tTVPGLGammaAdjustTempData (line 6139) | typedef struct
function tjs_int (line 6240) | inline tjs_int TJS_atoi(const tjs_char * s)
function tjs_char (line 6250) | inline tjs_char * TJS_int_to_str(tjs_int value , tjs_char * string)
function tjs_char (line 6260) | inline tjs_char * TJS_tTVInt_to_str(tjs_int64 value , tjs_char * string)
function tjs_int (line 6270) | inline tjs_int TJS_strnicmp(const tjs_char * s1 , const tjs_char * s2 , ...
function tjs_int (line 6280) | inline tjs_int TJS_stricmp(const tjs_char * s1 , const tjs_char * s2)
function TJS_strcpy_maxlen (line 6290) | inline void TJS_strcpy_maxlen(tjs_char * d , const tjs_char * s , size_t...
function TJS_strcpy (line 6300) | inline void TJS_strcpy(tjs_char * d , const tjs_char * s)
function TJS_strlen (line 6310) | inline size_t TJS_strlen(const tjs_char * d)
function tjs_char (line 6320) | inline tjs_char * TJSVS_malloc(tjs_uint len)
function tjs_char (line 6330) | inline tjs_char * TJSVS_realloc(tjs_char * buf , tjs_uint len)
function TJSVS_free (line 6340) | inline void TJSVS_free(tjs_char * buf)
function tTJSVariantString (line 6350) | inline tTJSVariantString * TJSAllocVariantString(const tjs_char * ref1 ,...
function tTJSVariantString (line 6360) | inline tTJSVariantString * TJSAllocVariantString(const tjs_char * ref , ...
function tTJSVariantString (line 6370) | inline tTJSVariantString * TJSAllocVariantString(const tjs_char * ref)
function tTJSVariantString (line 6380) | inline tTJSVariantString * TJSAllocVariantString(const tjs_nchar * ref)
function tTJSVariantString (line 6390) | inline tTJSVariantString * TJSAllocVariantString(const tjs_uint8 * * src)
function tTJSVariantString (line 6400) | inline tTJSVariantString * TJSAllocVariantStringBuffer(tjs_uint len)
function tTJSVariantString (line 6410) | inline tTJSVariantString * TJSAppendVariantString(tTJSVariantString * st...
function tTJSVariantString (line 6420) | inline tTJSVariantString * TJSAppendVariantString(tTJSVariantString * st...
function tTJSVariantString (line 6430) | inline tTJSVariantString * TJSFormatString(const tjs_char * format , tjs...
function tjs_char (line 6440) | inline const tjs_char * TJSVariantTypeToTypeString(tTJSVariantType type)
function tTJSString (line 6460) | inline tTJSString TJSVariantToExpressionString(const tTJSVariant & val)
function TJSAlignedDealloc (line 6480) | inline void TJSAlignedDealloc(void * ptr)
function tjs_uint32 (line 6490) | inline tjs_uint32 TJSGetFPClass(tjs_real r)
type tTJSString (line 6507) | typedef tTJSString (__stdcall * __functype)(const tjs_char *, const tTJS...
function tjs_int32 (line 6520) | inline tjs_int32 TJSRegisterNativeClass(const tjs_char * name)
function tjs_int32 (line 6530) | inline tjs_int32 TJSFindNativeClassID(const tjs_char * name)
function tjs_char (line 6540) | inline const tjs_char * TJSFindNativeClassName(tjs_int32 id)
function tTJSNativeClassMethod (line 6550) | inline tTJSNativeClassMethod * TJSCreateNativeClassMethod(tTJSNativeClas...
function tTJSNativeClassMethod (line 6560) | inline tTJSNativeClassMethod * TJSCreateNativeClassConstructor(tTJSNativ...
function tTJSNativeClassProperty (line 6570) | inline tTJSNativeClassProperty * TJSCreateNativeClassProperty(tTJSNative...
function TJSNativeClassSetClassID (line 6590) | inline void TJSNativeClassSetClassID(tTJSNativeClass * cls , tjs_int32 c...
function tTJSNativeClassForPlugin (line 6600) | inline tTJSNativeClassForPlugin * TJSCreateNativeClassForPlugin(const tt...
function TJSThrowNullAccess (line 6610) | inline void TJSThrowNullAccess()
function TJSThrowDivideByZero (line 6620) | inline void TJSThrowDivideByZero()
function tTJSVariantOctet (line 6630) | inline tTJSVariantOctet * TJSAllocVariantOctet(const tjs_uint8 * data , ...
function tTJSVariantOctet (line 6640) | inline tTJSVariantOctet * TJSAllocVariantOctet(const tjs_uint8 * data1 ,...
function tTJSVariantOctet (line 6650) | inline tTJSVariantOctet * TJSAllocVariantOctet(const tTJSVariantOctet * ...
function tTJSVariantOctet (line 6660) | inline tTJSVariantOctet * TJSAllocVariantOctet(const tjs_uint8 * * src)
function TJSDeallocVariantOctet (line 6670) | inline void TJSDeallocVariantOctet(tTJSVariantOctet * o)
function tTJSVariantString (line 6680) | inline tTJSVariantString * TJSOctetToListString(const tTJSVariantOctet *...
function tTJSVariantString (line 6690) | inline tTJSVariantString * TJSObjectToString(const tTJSVariantClosure & ...
function tTJSVariantString (line 6700) | inline tTJSVariantString * TJSIntegerToString(tjs_int64 i)
function tTJSVariantString (line 6710) | inline tTJSVariantString * TJSRealToString(tjs_real r)
function tTJSVariantString (line 6720) | inline tTJSVariantString * TJSRealToHexString(tjs_real r)
function tTVInteger (line 6730) | inline tTVInteger TJSStringToInteger(const tjs_char * str)
function tTVReal (line 6740) | inline tTVReal TJSStringToReal(const tjs_char * str)
function iTJSDispatch2 (line 6750) | inline iTJSDispatch2 * TJSCreateArrayObject(iTJSDispatch2 * * classout =...
function tjs_int (line 6760) | inline tjs_int TJSGetArrayElementCount(iTJSDispatch2 * dsp)
function tjs_int (line 6770) | inline tjs_int TJSCopyArrayElementTo(iTJSDispatch2 * dsp , tTJSVariant *...
function iTJSDispatch2 (line 6780) | inline iTJSDispatch2 * TJSCreateDictionaryObject(iTJSDispatch2 * * class...
function ttstr (line 6790) | inline ttstr TJSGetMessageMapMessage(const tjs_char * name)
function ttstr (line 6800) | inline ttstr TJSMapGlobalStringMap(const ttstr & string)
function TJSDoVariantOperation (line 6810) | inline void TJSDoVariantOperation(tjs_int op , tTJSVariant & target , co...
function TJSDoRehash (line 6820) | inline void TJSDoRehash()
function iTJSDispatch2 (line 6830) | inline iTJSDispatch2 * TJSCreateCustomObject()
function ttstr (line 6840) | inline ttstr TVPGetTemporaryName()
function ttstr (line 6850) | inline ttstr TVPGetAppPath()
function TVPRegisterStorageMedia (line 6860) | inline void TVPRegisterStorageMedia(iTVPStorageMedia * media)
function TVPUnregisterStorageMedia (line 6870) | inline void TVPUnregisterStorageMedia(iTVPStorageMedia * media)
function TVPIsExistentStorageNoSearch (line 6880) | inline bool TVPIsExistentStorageNoSearch(const ttstr & name)
function TVPIsExistentStorageNoSearchNoNormalize (line 6890) | inline bool TVPIsExistentStorageNoSearchNoNormalize(const ttstr & name)
function ttstr (line 6900) | inline ttstr TVPNormalizeStorageName(const ttstr & name)
function TVPSetCurrentDirectory (line 6910) | inline void TVPSetCurrentDirectory(const ttstr & name)
function TVPGetLocalName (line 6920) | inline void TVPGetLocalName(ttstr & name)
function ttstr (line 6930) | inline ttstr TVPExtractStorageExt(const ttstr & name)
function ttstr (line 6940) | inline ttstr TVPExtractStorageName(const ttstr & name)
function ttstr (line 6950) | inline ttstr TVPExtractStoragePath(const ttstr & name)
function ttstr (line 6960) | inline ttstr TVPChopStorageExt(const ttstr & name)
function TVPAddAutoPath (line 6970) | inline void TVPAddAutoPath(const ttstr & name)
function TVPRemoveAutoPath (line 6980) | inline void TVPRemoveAutoPath(const ttstr & name)
function ttstr (line 6990) | inline ttstr TVPGetPlacedPath(const ttstr & name)
function TVPIsExistentStorage (line 7000) | inline bool TVPIsExistentStorage(const ttstr & name)
function TVPClearStorageCaches (line 7010) | inline void TVPClearStorageCaches()
function iTJSTextReadStream (line 7020) | inline iTJSTextReadStream * TVPCreateTextStreamForRead(const ttstr & nam...
function iTJSTextWriteStream (line 7030) | inline iTJSTextWriteStream * TVPCreateTextStreamForWrite(const ttstr & n...
function tjs_int (line 7040) | inline tjs_int TVPWideCharToUtf8String(const tjs_char * in , char * out)
function tjs_int (line 7050) | inline tjs_int TVPUtf8ToWideCharString(const char * in , tjs_char * out)
function TVPSetXP3ArchiveExtractionFilter (line 7060) | inline void TVPSetXP3ArchiveExtractionFilter(tTVPXP3ArchiveExtractionFil...
function TVPBreathe (line 7070) | inline void TVPBreathe()
function TVPGetBreathing (line 7080) | inline bool TVPGetBreathing()
function TVPSetSystemEventDisabledState (line 7090) | inline void TVPSetSystemEventDisabledState(bool en)
function TVPGetSystemEventDisabledState (line 7100) | inline bool TVPGetSystemEventDisabledState()
function TVPPostEvent (line 7110) | inline void TVPPostEvent(iTJSDispatch2 * source , iTJSDispatch2 * target...
function TVPAreEventsInQueue (line 7130) | inline bool TVPAreEventsInQueue(iTJSDispatch2 * source , iTJSDispatch2 *...
function tjs_int (line 7140) | inline tjs_int TVPCountEventsInQueue(iTJSDispatch2 * source , iTJSDispat...
function TVPCancelSourceEvents (line 7160) | inline void TVPCancelSourceEvents(iTJSDispatch2 * source)
function iTJSDispatch2 (line 7170) | inline iTJSDispatch2 * TVPCreateEventObject(const tjs_char * type , iTJS...
function TVPAddContinuousEventHook (line 7180) | inline void TVPAddContinuousEventHook(tTVPContinuousEventCallbackIntf * cb)
function TVPRemoveContinuousEventHook (line 7190) | inline void TVPRemoveContinuousEventHook(tTVPContinuousEventCallbackIntf...
function TVPAddCompactEventHook (line 7200) | inline void TVPAddCompactEventHook(tTVPCompactEventCallbackIntf * cb)
function TVPRemoveCompactEventHook (line 7210) | inline void TVPRemoveCompactEventHook(tTVPCompactEventCallbackIntf * cb)
function ttstr (line 7220) | inline ttstr TVPGetPlatformName()
function ttstr (line 7230) | inline ttstr TVPGetOSName()
function iTJSDispatch2 (line 7250) | inline iTJSDispatch2 * TVPGetScriptDispatch()
function TVPCreateMessageMapFile (line 7380) | inline void TVPCreateMessageMapFile(const ttstr & filename)
function TVPCheckExistentLocalFolder (line 7390) | inline bool TVPCheckExistentLocalFolder(const ttstr & name)
function TVPCheckExistentLocalFile (line 7400) | inline bool TVPCheckExistentLocalFile(const ttstr & name)
function TVPCreateFolders (line 7410) | inline bool TVPCreateFolders(const ttstr & folder)
function IStream (line 7420) | inline IStream * TVPCreateIStream(const ttstr & name , tjs_uint32 flags)
function tTJSBinaryStream (line 7430) | inline tTJSBinaryStream * TVPCreateBinaryStreamAdapter(IStream * refstream)
function TVPThrowPluginUnboundFunctionError (line 7440) | inline void TVPThrowPluginUnboundFunctionError(const char * funcname)
function TVPThrowPluginUnboundFunctionError (line 7450) | inline void TVPThrowPluginUnboundFunctionError(const tjs_char * funcname)
function TVP_free (line 7480) | inline void TVP_free(void * pp)
function tjs_int (line 7490) | inline tjs_int TVPGetAutoLoadPluginCount()
function ZLIB_uncompress (line 7500) | inline int ZLIB_uncompress(unsigned char * dest , unsigned long * destle...
function ZLIB_compress (line 7510) | inline int ZLIB_compress(unsigned char * dest , unsigned long * destlen ...
function ZLIB_compress2 (line 7520) | inline int ZLIB_compress2(unsigned char * dest , unsigned long * destlen...
function TVP_md5_init (line 7530) | inline void TVP_md5_init(TVP_md5_state_t * pms)
function TVP_md5_append (line 7540) | inline void TVP_md5_append(TVP_md5_state_t * pms , const tjs_uint8 * dat...
function TVP_md5_finish (line 7550) | inline void TVP_md5_finish(TVP_md5_state_t * pms , tjs_uint8 * digest)
function HWND (line 7560) | inline HWND TVPGetApplicationWindowHandle()
function TVPProcessApplicationMessages (line 7570) | inline void TVPProcessApplicationMessages()
function TVPHandleApplicationMessage (line 7580) | inline void TVPHandleApplicationMessage()
function TVPRegisterGlobalObject (line 7590) | inline bool TVPRegisterGlobalObject(const tjs_char * name , iTJSDispatch...
function TVPRemoveGlobalObject (line 7600) | inline bool TVPRemoveGlobalObject(const tjs_char * name)
function TVPDoTryBlock (line 7610) | inline void TVPDoTryBlock(tTVPTryBlockFunction tryblock , tTVPCatchBlock...
function TVPGetFileVersionOf (line 7620) | inline bool TVPGetFileVersionOf(const char * module_filename , tjs_int &...
type tjs_int (line 7647) | typedef tjs_int (__stdcall * __functype)();
type tjs_uint32 (line 7667) | typedef tjs_uint32 (__stdcall * __functype)();
function tjs_int (line 7670) | inline tjs_int TVPGetProcessorNum()
function tjs_int (line 7680) | inline tjs_int TVPGetThreadNum()
function TVPBeginThreadTask (line 7690) | inline void TVPBeginThreadTask(tjs_int num)
function TVPExecThreadTask (line 7700) | inline void TVPExecThreadTask(TVP_THREAD_TASK_FUNC func , TVP_THREAD_PAR...
function TVPEndThreadTask (line 7710) | inline void TVPEndThreadTask()
function TVPAddLog (line 7720) | inline void TVPAddLog(const ttstr & line)
function TVPAddImportantLog (line 7730) | inline void TVPAddImportantLog(const ttstr & line)
function TVPPushEnvironNoise (line 7740) | inline void TVPPushEnvironNoise(const void * buf , tjs_int bufsize)
function TVPGetRandomBits128 (line 7750) | inline void TVPGetRandomBits128(void * dest)
function TVPClipboardHasFormat (line 7760) | inline bool TVPClipboardHasFormat(tTVPClipboardFormat format)
function TVPClipboardSetText (line 7770) | inline void TVPClipboardSetText(const ttstr & text)
function TVPClipboardGetText (line 7780) | inline bool TVPClipboardGetText(ttstr & text)
function tjs_uint64 (line 7790) | inline tjs_uint64 TVPGetTickCount()
function ttstr (line 7800) | inline ttstr TVPFormatMessage(const tjs_char * msg , const ttstr & p1)
function ttstr (line 7810) | inline ttstr TVPFormatMessage(const tjs_char * msg , const ttstr & p1 , ...
function TVPThrowExceptionMessage (line 7820) | inline void TVPThrowExceptionMessage(const tjs_char * msg)
function TVPThrowExceptionMessage (line 7830) | inline void TVPThrowExceptionMessage(const tjs_char * msg , const ttstr ...
function TVPThrowExceptionMessage (line 7840) | inline void TVPThrowExceptionMessage(const tjs_char * msg , const ttstr ...
function TVPThrowExceptionMessage (line 7850) | inline void TVPThrowExceptionMessage(const tjs_char * msg , const ttstr ...
function ttstr (line 7860) | inline ttstr TVPGetAboutString()
function ttstr (line 7870) | inline ttstr TVPGetVersionInformation()
function ttstr (line 7880) | inline ttstr TVPGetVersionString()
function TVPGetSystemVersion (line 7890) | inline void TVPGetSystemVersion(tjs_int & major , tjs_int & minor , tjs_...
function TVPGetTJSVersion (line 7900) | inline void TVPGetTJSVersion(tjs_int & major , tjs_int & minor , tjs_int...
function TVPConvertPCMTo16bits (line 7910) | inline void TVPConvertPCMTo16bits(tjs_int16 * output , const void * inpu...
function TVPConvertPCMTo16bits (line 7920) | inline void TVPConvertPCMTo16bits(tjs_int16 * output , const void * inpu...
function TVPConvertPCMToFloat (line 7930) | inline void TVPConvertPCMToFloat(float * output , const void * input , t...
function TVPConvertPCMToFloat (line 7940) | inline void TVPConvertPCMToFloat(float * output , const void * input , c...
function TVPReleaseDirectSound (line 7950) | inline void TVPReleaseDirectSound()
function IDirectSound (line 7960) | inline IDirectSound * TVPGetDirectSound()
function TVPMIDIOutData (line 7970) | inline void TVPMIDIOutData(const tjs_uint8 * data , int len)
function TVPClearGraphicCache (line 7980) | inline void TVPClearGraphicCache()
function tjs_uint32 (line 7990) | inline tjs_uint32 TVPToActualColor(tjs_uint32 col)
function tjs_uint32 (line 8000) | inline tjs_uint32 TVPFromActualColor(tjs_uint32 col)
function iTJSDispatch2 (line 8010) | inline iTJSDispatch2 * TVPGetObjectFrom_NI_BaseLayer(tTJSNI_BaseLayer * ...
function tjs_uint32 (line 8020) | inline tjs_uint32 TVPGetCurrentShiftKeyState()
function TVPEnsureDirectDrawObject (line 8030) | inline void TVPEnsureDirectDrawObject()
function IDirectDraw2 (line 8040) | inline IDirectDraw2 * TVPGetDirectDrawObjectNoAddRef()
function IDirectDraw7 (line 8050) | inline IDirectDraw7 * TVPGetDirectDraw7ObjectNoAddRef()
function IDirectDrawSurface (line 8060) | inline IDirectDrawSurface * TVPGetDDPrimarySurfaceNoAddRef()
function TVPSetDDPrimaryClipper (line 8070) | inline void TVPSetDDPrimaryClipper(IDirectDrawClipper * clipper)
function TVPReleaseDDPrimarySurface (line 8080) | inline void TVPReleaseDDPrimarySurface()
function iTVPScanLineProvider (line 8090) | inline iTVPScanLineProvider * TVPSLPLoadImage(const ttstr & name , tjs_i...
function TVPAddTransHandlerProvider (line 8100) | inline void TVPAddTransHandlerProvider(iTVPTransHandlerProvider * pro)
function TVPRemoveTransHandlerProvider (line 8110) | inline void TVPRemoveTransHandlerProvider(iTVPTransHandlerProvider * pro)
function TVPAlphaBlend (line 8120) | inline void TVPAlphaBlend(tjs_uint32 * dest , const tjs_uint32 * src , t...
function TVPAlphaBlend_HDA (line 8130) | inline void TVPAlphaBlend_HDA(tjs_uint32 * dest , const tjs_uint32 * src...
function TVPAlphaBlend_o (line 8140) | inline void TVPAlphaBlend_o(tjs_uint32 * dest , const tjs_uint32 * src ,...
function TVPAlphaBlend_HDA_o (line 8150) | inline void TVPAlphaBlend_HDA_o(tjs_uint32 * dest , const tjs_uint32 * s...
function TVPAlphaBlend_d (line 8160) | inline void TVPAlphaBlend_d(tjs_uint32 * dest , const tjs_uint32 * src ,...
function TVPAlphaBlend_a (line 8170) | inline void TVPAlphaBlend_a(tjs_uint32 * dest , const tjs_uint32 * src ,...
function TVPAlphaBlend_do (line 8180) | inline void TVPAlphaBlend_do(tjs_uint32 * dest , const tjs_uint32 * src ...
function TVPAlphaBlend_ao (line 8190) | inline void TVPAlphaBlend_ao(tjs_uint32 * dest , const tjs_uint32 * src ...
function TVPAlphaColorMat (line 8200) | inline void TVPAlphaColorMat(tjs_uint32 * dest , const tjs_uint32 color ...
function TVPAdditiveAlphaBlend (line 8210) | inline void TVPAdditiveAlphaBlend(tjs_uint32 * dest , const tjs_uint32 *...
function TVPAdditiveAlphaBlend_HDA (line 8220) | inline void TVPAdditiveAlphaBlend_HDA(tjs_uint32 * dest , const tjs_uint...
function TVPAdditiveAlphaBlend_o (line 8230) | inline void TVPAdditiveAlphaBlend_o(tjs_uint32 * dest , const tjs_uint32...
function TVPAdditiveAlphaBlend_HDA_o (line 8240) | inline void TVPAdditiveAlphaBlend_HDA_o(tjs_uint32 * dest , const tjs_ui...
function TVPAdditiveAlphaBlend_a (line 8250) | inline void TVPAdditiveAlphaBlend_a(tjs_uint32 * dest , const tjs_uint32...
function TVPAdditiveAlphaBlend_ao (line 8260) | inline void TVPAdditiveAlphaBlend_ao(tjs_uint32 * dest , const tjs_uint3...
function TVPConvertAdditiveAlphaToAlpha (line 8270) | inline void TVPConvertAdditiveAlphaToAlpha(tjs_uint32 * buf , tjs_int len)
function TVPConvertAlphaToAdditiveAlpha (line 8280) | inline void TVPConvertAlphaToAdditiveAlpha(tjs_uint32 * buf , tjs_int len)
function TVPStretchAlphaBlend (line 8290) | inline void TVPStretchAlphaBlend(tjs_uint32 * dest , tjs_int len , const...
function TVPStretchAlphaBlend_HDA (line 8300) | inline void TVPStretchAlphaBlend_HDA(tjs_uint32 * dest , tjs_int len , c...
function TVPStretchAlphaBlend_o (line 8310) | inline void TVPStretchAlphaBlend_o(tjs_uint32 * dest , tjs_int len , con...
function TVPStretchAlphaBlend_HDA_o (line 8320) | inline void TVPStretchAlphaBlend_HDA_o(tjs_uint32 * dest , tjs_int len ,...
function TVPStretchAlphaBlend_d (line 8330) | inline void TVPStretchAlphaBlend_d(tjs_uint32 * dest , tjs_int len , con...
function TVPStretchAlphaBlend_a (line 8340) | inline void TVPStretchAlphaBlend_a(tjs_uint32 * dest , tjs_int len , con...
function TVPStretchAlphaBlend_do (line 8350) | inline void TVPStretchAlphaBlend_do(tjs_uint32 * dest , tjs_int len , co...
function TVPStretchAlphaBlend_ao (line 8360) | inline void TVPStretchAlphaBlend_ao(tjs_uint32 * dest , tjs_int len , co...
function TVPStretchAdditiveAlphaBlend (line 8370) | inline void TVPStretchAdditiveAlphaBlend(tjs_uint32 * dest , tjs_int len...
function TVPInterpStretchAdditiveAlphaBlend (line 8380) | inline void TVPInterpStretchAdditiveAlphaBlend(tjs_uint32 * dest , tjs_i...
function TVPStretchAdditiveAlphaBlend_HDA (line 8390) | inline void TVPStretchAdditiveAlphaBlend_HDA(tjs_uint32 * dest , tjs_int...
function TVPStretchAdditiveAlphaBlend_o (line 8400) | inline void TVPStretchAdditiveAlphaBlend_o(tjs_uint32 * dest , tjs_int l...
function TVPInterpStretchAdditiveAlphaBlend_o (line 8410) | inline void TVPInterpStretchAdditiveAlphaBlend_o(tjs_uint32 * dest , tjs...
function TVPStretchAdditiveAlphaBlend_HDA_o (line 8420) | inline void TVPStretchAdditiveAlphaBlend_HDA_o(tjs_uint32 * dest , tjs_i...
function TVPStretchAdditiveAlphaBlend_a (line 8430) | inline void TVPStretchAdditiveAlphaBlend_a(tjs_uint32 * dest , tjs_int l...
function TVPStretchAdditiveAlphaBlend_ao (line 8440) | inline void TVPStretchAdditiveAlphaBlend_ao(tjs_uint32 * dest , tjs_int ...
function TVPLinTransAlphaBlend (line 8450) | inline void TVPLinTransAlphaBlend(tjs_uint32 * dest , tjs_int len , cons...
function TVPLinTransAlphaBlend_HDA (line 8460) | inline void TVPLinTransAlphaBlend_HDA(tjs_uint32 * dest , tjs_int len , ...
function TVPLinTransAlphaBlend_o (line 8470) | inline void TVPLinTransAlphaBlend_o(tjs_uint32 * dest , tjs_int len , co...
function TVPLinTransAlphaBlend_HDA_o (line 8480) | inline void TVPLinTransAlphaBlend_HDA_o(tjs_uint32 * dest , tjs_int len ...
function TVPLinTransAlphaBlend_d (line 8490) | inline void TVPLinTransAlphaBlend_d(tjs_uint32 * dest , tjs_int len , co...
function TVPLinTransAlphaBlend_a (line 8500) | inline void TVPLinTransAlphaBlend_a(tjs_uint32 * dest , tjs_int len , co...
function TVPLinTransAlphaBlend_do (line 8510) | inline void TVPLinTransAlphaBlend_do(tjs_uint32 * dest , tjs_int len , c...
function TVPLinTransAlphaBlend_ao (line 8520) | inline void TVPLinTransAlphaBlend_ao(tjs_uint32 * dest , tjs_int len , c...
function TVPLinTransAdditiveAlphaBlend (line 8530) | inline void TVPLinTransAdditiveAlphaBlend(tjs_uint32 * dest , tjs_int le...
function TVPInterpLinTransAdditiveAlphaBlend (line 8540) | inline void TVPInterpLinTransAdditiveAlphaBlend(tjs_uint32 * dest , tjs_...
function TVPLinTransAdditiveAlphaBlend_HDA (line 8550) | inline void TVPLinTransAdditiveAlphaBlend_HDA(tjs_uint32 * dest , tjs_in...
function TVPLinTransAdditiveAlphaBlend_o (line 8560) | inline void TVPLinTransAdditiveAlphaBlend_o(tjs_uint32 * dest , tjs_int ...
function TVPInterpLinTransAdditiveAlphaBlend_o (line 8570) | inline void TVPInterpLinTransAdditiveAlphaBlend_o(tjs_uint32 * dest , tj...
function TVPLinTransAdditiveAlphaBlend_HDA_o (line 8580) | inline void TVPLinTransAdditiveAlphaBlend_HDA_o(tjs_uint32 * dest , tjs_...
function TVPLinTransAdditiveAlphaBlend_a (line 8590) | inline void TVPLinTransAdditiveAlphaBlend_a(tjs_uint32 * dest , tjs_int ...
function TVPLinTransAdditiveAlphaBlend_ao (line 8600) | inline void TVPLinTransAdditiveAlphaBlend_ao(tjs_uint32 * dest , tjs_int...
function TVPCopyOpaqueImage (line 8610) | inline void TVPCopyOpaqueImage(tjs_uint32 * dest , const tjs_uint32 * sr...
function TVPConstAlphaBlend (line 8620) | inline void TVPConstAlphaBlend(tjs_uint32 * dest , const tjs_uint32 * sr...
function TVPConstAlphaBlend_HDA (line 8630) | inline void TVPConstAlphaBlend_HDA(tjs_uint32 * dest , const tjs_uint32 ...
function TVPConstAlphaBlend_d (line 8640) | inline void TVPConstAlphaBlend_d(tjs_uint32 * dest , const tjs_uint32 * ...
function TVPConstAlphaBlend_a (line 8650) | inline void TVPConstAlphaBlend_a(tjs_uint32 * dest , const tjs_uint32 * ...
function TVPStretchCopyOpaqueImage (line 8660) | inline void TVPStretchCopyOpaqueImage(tjs_uint32 * dest , tjs_int destle...
function TVPStretchConstAlphaBlend (line 8670) | inline void TVPStretchConstAlphaBlend(tjs_uint32 * dest , tjs_int len , ...
function TVPInterpStretchConstAlphaBlend (line 8680) | inline void TVPInterpStretchConstAlphaBlend(tjs_uint32 * dest , tjs_int ...
function TVPStretchConstAlphaBlend_HDA (line 8690) | inline void TVPStretchConstAlphaBlend_HDA(tjs_uint32 * dest , tjs_int le...
function TVPStretchConstAlphaBlend_d (line 8700) | inline void TVPStretchConstAlphaBlend_d(tjs_uint32 * dest , tjs_int len ...
function TVPStretchConstAlphaBlend_a (line 8710) | inline void TVPStretchConstAlphaBlend_a(tjs_uint32 * dest , tjs_int len ...
function TVPLinTransCopyOpaqueImage (line 8720) | inline void TVPLinTransCopyOpaqueImage(tjs_uint32 * dest , tjs_int destl...
function TVPLinTransConstAlphaBlend (line 8730) | inline void TVPLinTransConstAlphaBlend(tjs_uint32 * dest , tjs_int len ,...
function TVPInterpLinTransConstAlphaBlend (line 8740) | inline void TVPInterpLinTransConstAlphaBlend(tjs_uint32 * dest , tjs_int...
function TVPLinTransConstAlphaBlend_HDA (line 8750) | inline void TVPLinTransConstAlphaBlend_HDA(tjs_uint32 * dest , tjs_int l...
function TVPLinTransConstAlphaBlend_d (line 8760) | inline void TVPLinTransConstAlphaBlend_d(tjs_uint32 * dest , tjs_int len...
function TVPLinTransConstAlphaBlend_a (line 8770) | inline void TVPLinTransConstAlphaBlend_a(tjs_uint32 * dest , tjs_int len...
function TVPConstAlphaBlend_SD (line 8780) | inline void TVPConstAlphaBlend_SD(tjs_uint32 * dest , const tjs_uint32 *...
function TVPConstAlphaBlend_SD_a (line 8790) | inline void TVPConstAlphaBlend_SD_a(tjs_uint32 * dest , const tjs_uint32...
function TVPConstAlphaBlend_SD_d (line 8800) | inline void TVPConstAlphaBlend_SD_d(tjs_uint32 * dest , const tjs_uint32...
function TVPInitUnivTransBlendTable (line 8810) | inline void TVPInitUnivTransBlendTable(tjs_uint32 * table , tjs_int phas...
function TVPInitUnivTransBlendTable_d (line 8820) | inline void TVPInitUnivTransBlendTable_d(tjs_uint32 * table , tjs_int ph...
function TVPInitUnivTransBlendTable_a (line 8830) | inline void TVPInitUnivTransBlendTable_a(tjs_uint32 * table , tjs_int ph...
function TVPUnivTransBlend (line 8840) | inline void TVPUnivTransBlend(tjs_uint32 * dest , const tjs_uint32 * src...
function TVPUnivTransBlend_switch (line 8850) | inline void TVPUnivTransBlend_switch(tjs_uint32 * dest , const tjs_uint3...
function TVPUnivTransBlend_d (line 8860) | inline void TVPUnivTransBlend_d(tjs_uint32 * dest , const tjs_uint32 * s...
function TVPUnivTransBlend_switch_d (line 8870) | inline void TVPUnivTransBlend_switch_d(tjs_uint32 * dest , const tjs_uin...
function TVPUnivTransBlend_a (line 8880) | inline void TVPUnivTransBlend_a(tjs_uint32 * dest , const tjs_uint32 * s...
function TVPUnivTransBlend_switch_a (line 8890) | inline void TVPUnivTransBlend_switch_a(tjs_uint32 * dest , const tjs_uin...
function TVPApplyColorMap (line 8900) | inline void TVPApplyColorMap(tjs_uint32 * dest , const tjs_uint8 * src ,...
function TVPApplyColorMap_o (line 8910) | inline void TVPApplyColorMap_o(tjs_uint32 * dest , const tjs_uint8 * src...
function TVPApplyColorMap65 (line 8920) | inline void TVPApplyColorMap65(tjs_uint32 * dest , const tjs_uint8 * src...
function TVPApplyColorMap65_o (line 8930) | inline void TVPApplyColorMap65_o(tjs_uint32 * dest , const tjs_uint8 * s...
function TVPApplyColorMap_HDA (line 8940) | inline void TVPApplyColorMap_HDA(tjs_uint32 * dest , const tjs_uint8 * s...
function TVPApplyColorMap_HDA_o (line 8950) | inline void TVPApplyColorMap_HDA_o(tjs_uint32 * dest , const tjs_uint8 *...
function TVPApplyColorMap65_HDA (line 8960) | inline void TVPApplyColorMap65_HDA(tjs_uint32 * dest , const tjs_uint8 *...
function TVPApplyColorMap65_HDA_o (line 8970) | inline void TVPApplyColorMap65_HDA_o(tjs_uint32 * dest , const tjs_uint8...
function TVPApplyColorMap_d (line 8980) | inline void TVPApplyColorMap_d(tjs_uint32 * dest , const tjs_uint8 * src...
function TVPApplyColorMap65_d (line 8990) | inline void TVPApplyColorMap65_d(tjs_uint32 * dest , const tjs_uint8 * s...
function TVPApplyColorMap_a (line 9000) | inline void TVPApplyColorMap_a(tjs_uint32 * dest , const tjs_uint8 * src...
function TVPApplyColorMap65_a (line 9010) | inline void TVPApplyColorMap65_a(tjs_uint32 * dest , const tjs_uint8 * s...
function TVPApplyColorMap_do (line 9020) | inline void TVPApplyColorMap_do(tjs_uint32 * dest , const tjs_uint8 * sr...
function TVPApplyColorMap65_do (line 9030) | inline void TVPApplyColorMap65_do(tjs_uint32 * dest , const tjs_uint8 * ...
function TVPApplyColorMap_ao (line 9040) | inline void TVPApplyColorMap_ao(tjs_uint32 * dest , const tjs_uint8 * sr...
function TVPApplyColorMap65_ao (line 9050) | inline void TVPApplyColorMap65_ao(tjs_uint32 * dest , const tjs_uint8 * ...
function TVPConstColorAlphaBlend (line 9060) | inline void TVPConstColorAlphaBlend(tjs_uint32 * dest , tjs_int len , tj...
function TVPConstColorAlphaBlend_d (line 9070) | inline void TVPConstColorAlphaBlend_d(tjs_uint32 * dest , tjs_int len , ...
function TVPConstColorAlphaBlend_a (line 9080) | inline void TVPConstColorAlphaBlend_a(tjs_uint32 * dest , tjs_int len , ...
function TVPRemoveConstOpacity (line 9090) | inline void TVPRemoveConstOpacity(tjs_uint32 * dest , tjs_int len , tjs_...
function TVPRemoveOpacity (line 9100) | inline void TVPRemoveOpacity(tjs_uint32 * dest , const tjs_uint8 * src ,...
function TVPRemoveOpacity_o (line 9110) | inline void TVPRemoveOpacity_o(tjs_uint32 * dest , const tjs_uint8 * src...
function TVPRemoveOpacity65 (line 9120) | inline void TVPRemoveOpacity65(tjs_uint32 * dest , const tjs_uint8 * src...
function TVPRemoveOpacity65_o (line 9130) | inline void TVPRemoveOpacity65_o(tjs_uint32 * dest , const tjs_uint8 * s...
function TVPAddBlend (line 9140) | inline void TVPAddBlend(tjs_uint32 * dest , const tjs_uint32 * src , tjs...
function TVPAddBlend_HDA (line 9150) | inline void TVPAddBlend_HDA(tjs_uint32 * dest , const tjs_uint32 * src ,...
function TVPAddBlend_o (line 9160) | inline void TVPAddBlend_o(tjs_uint32 * dest , const tjs_uint32 * src , t...
function TVPAddBlend_HDA_o (line 9170) | inline void TVPAddBlend_HDA_o(tjs_uint32 * dest , const tjs_uint32 * src...
function TVPSubBlend (line 9180) | inline void TVPSubBlend(tjs_uint32 * dest , const tjs_uint32 * src , tjs...
function TVPSubBlend_HDA (line 9190) | inline void TVPSubBlend_HDA(tjs_uint32 * dest , const tjs_uint32 * src ,...
function TVPSubBlend_o (line 9200) | inline void TVPSubBlend_o(tjs_uint32 * dest , const tjs_uint32 * src , t...
function TVPSubBlend_HDA_o (line 9210) | inline void TVPSubBlend_HDA_o(tjs_uint32 * dest , const tjs_uint32 * src...
function TVPMulBlend (line 9220) | inline void TVPMulBlend(tjs_uint32 * dest , const tjs_uint32 * src , tjs...
function TVPMulBlend_HDA (line 9230) | inline void TVPMulBlend_HDA(tjs_uint32 * dest , const tjs_uint32 * src ,...
function TVPMulBlend_o (line 9240) | inline void TVPMulBlend_o(tjs_uint32 * dest , const tjs_uint32 * src , t...
function TVPMulBlend_HDA_o (line 9250) | inline void TVPMulBlend_HDA_o(tjs_uint32 * dest , const tjs_uint32 * src...
function TVPColorDodgeBlend (line 9260) | inline void TVPColorDodgeBlend(tjs_uint32 * dest , const tjs_uint32 * sr...
function TVPColorDodgeBlend_HDA (line 9270) | inline void TVPColorDodgeBlend_HDA(tjs_uint32 * dest , const tjs_uint32 ...
function TVPColorDodgeBlend_o (line 9280) | inline void TVPColorDodgeBlend_o(tjs_uint32 * dest , const tjs_uint32 * ...
function TVPColorDodgeBlend_HDA_o (line 9290) | inline void TVPColorDodgeBlend_HDA_o(tjs_uint32 * dest , const tjs_uint3...
function TVPDarkenBlend (line 9300) | inline void TVPDarkenBlend(tjs_uint32 * dest , const tjs_uint32 * src , ...
function TVPDarkenBlend_HDA (line 9310) | inline void TVPDarkenBlend_HDA(tjs_uint32 * dest , const tjs_uint32 * sr...
function TVPDarkenBlend_o (line 9320) | inline void TVPDarkenBlend_o(tjs_uint32 * dest , const tjs_uint32 * src ...
function TVPDarkenBlend_HDA_o (line 9330) | inline void TVPDarkenBlend_HDA_o(tjs_uint32 * dest , const tjs_uint32 * ...
function TVPLightenBlend (line 9340) | inline void TVPLightenBlend(tjs_uint32 * dest , const tjs_uint32 * src ,...
function TVPLightenBlend_HDA (line 9350) | inline void TVPLightenBlend_HDA(tjs_uint32 * dest , const tjs_uint32 * s...
function TVPLightenBlend_o (line 9360) | inline void TVPLightenBlend_o(tjs_uint32 * dest , const tjs_uint32 * src...
function TVPLightenBlend_HDA_o (line 9370) | inline void TVPLightenBlend_HDA_o(tjs_uint32 * dest , const tjs_uint32 *...
function TVPScreenBlend (line 9380) | inline void TVPScreenBlend(tjs_uint32 * dest , const tjs_uint32 * src , ...
function TVPScreenBlend_HDA (line 9390) | inline void TVPScreenBlend_HDA(tjs_uint32 * dest , const tjs_uint32 * sr...
function TVPScreenBlend_o (line 9400) | inline void TVPScreenBlend_o(tjs_uint32 * dest , const tjs_uint32 * src ...
function TVPScreenBlend_HDA_o (line 9410) | inline void TVPScreenBlend_HDA_o(tjs_uint32 * dest , const tjs_uint32 * ...
function TVPStretchCopy (line 9420) | inline void TVPStretchCopy(tjs_uint32 * dest , tjs_int destlen , const t...
function TVPInterpStretchCopy (line 9430) | inline void TVPInterpStretchCopy(tjs_uint32 * dest , tjs_int destlen , c...
function TVPFastLinearInterpH2F (line 9440) | inline void TVPFastLinearInterpH2F(tjs_uint32 * dest , tjs_int destlen ,...
function TVPFastLinearInterpH2B (line 9450) | inline void TVPFastLinearInterpH2B(tjs_uint32 * dest , tjs_int destlen ,...
function TVPFastLinearInterpV2 (line 9460) | inline void TVPFastLinearInterpV2(tjs_uint32 * dest , tjs_int destlen , ...
function TVPStretchColorCopy (line 9470) | inline void TVPStretchColorCopy(tjs_uint32 * dest , tjs_int destlen , co...
function TVPLinTransCopy (line 9480) | inline void TVPLinTransCopy(tjs_uint32 * dest , tjs_int destlen , const ...
function TVPInterpLinTransCopy (line 9490) | inline void TVPInterpLinTransCopy(tjs_uint32 * dest , tjs_int destlen , ...
function TVPLinTransColorCopy (line 9500) | inline void TVPLinTransColorCopy(tjs_uint32 * dest , tjs_int destlen , c...
function TVPMakeAlphaFromKey (line 9510) | inline void TVPMakeAlphaFromKey(tjs_uint32 * dest , tjs_int len , tjs_ui...
function TVPCopyMask (line 9520) | inline void TVPCopyMask(tjs_uint32 * dest , const tjs_uint32 * src , tjs...
function TVPCopyColor (line 9530) | inline void TVPCopyColor(tjs_uint32 * dest , const tjs_uint32 * src , tj...
function TVPBindMaskToMain (line 9540) | inline void TVPBindMaskToMain(tjs_uint32 * main , const tjs_uint8 * mask...
function TVPFillARGB (line 9550) | inline void TVPFillARGB(tjs_uint32 * dest , tjs_int len , tjs_uint32 value)
function TVPFillARGB_NC (line 9560) | inline void TVPFillARGB_NC(tjs_uint32 * dest , tjs_int len , tjs_uint32 ...
function TVPFillColor (line 9570) | inline void TVPFillColor(tjs_uint32 * dest , tjs_int len , tjs_uint32 co...
function TVPFillMask (line 9580) | inline void TVPFillMask(tjs_uint32 * dest , tjs_int len , tjs_uint32 mask)
function TVPAddSubVertSum16 (line 9590) | inline void TVPAddSubVertSum16(tjs_uint16 * dest , const tjs_uint32 * ad...
function TVPAddSubVertSum16_d (line 9600) | inline void TVPAddSubVertSum16_d(tjs_uint16 * dest , const tjs_uint32 * ...
function TVPAddSubVertSum32 (line 9610) | inline void TVPAddSubVertSum32(tjs_uint32 * dest , const tjs_uint32 * ad...
function TVPAddSubVertSum32_d (line 9620) | inline void TVPAddSubVertSum32_d(tjs_uint32 * dest , const tjs_uint32 * ...
function TVPDoBoxBlurAvg16 (line 9630) | inline void TVPDoBoxBlurAvg16(tjs_uint32 * dest , tjs_uint16 * sum , con...
function TVPDoBoxBlurAvg16_d (line 9640) | inline void TVPDoBoxBlurAvg16_d(tjs_uint32 * dest , tjs_uint16 * sum , c...
function TVPDoBoxBlurAvg32 (line 9650) | inline void TVPDoBoxBlurAvg32(tjs_uint32 * dest , tjs_uint32 * sum , con...
function TVPDoBoxBlurAvg32_d (line 9660) | inline void TVPDoBoxBlurAvg32_d(tjs_uint32 * dest , tjs_uint32 * sum , c...
function TVPSwapLine8 (line 9670) | inline void TVPSwapLine8(tjs_uint8 * line1 , tjs_uint8 * line2 , tjs_int...
function TVPSwapLine32 (line 9680) | inline void TVPSwapLine32(tjs_uint32 * line1 , tjs_uint32 * line2 , tjs_...
function TVPReverse8 (line 9690) | inline void TVPReverse8(tjs_uint8 * pixels , tjs_int len)
function TVPReverse32 (line 9700) | inline void TVPReverse32(tjs_uint32 * pixels , tjs_int len)
function TVPDoGrayScale (line 9710) | inline void TVPDoGrayScale(tjs_uint32 * dest , tjs_int len)
function TVPInitGammaAdjustTempData (line 9720) | inline void TVPInitGammaAdjustTempData(tTVPGLGammaAdjustTempData * temp ...
function TVPUninitGammaAdjustTempData (line 9730) | inline void TVPUninitGammaAdjustTempData(tTVPGLGammaAdjustTempData * temp)
function TVPAdjustGamma (line 9740) | inline void TVPAdjustGamma(tjs_uint32 * dest , tjs_int len , tTVPGLGamma...
function TVPAdjustGamma_a (line 9750) | inline void TVPAdjustGamma_a(tjs_uint32 * dest , tjs_int len , tTVPGLGam...
function TVPChBlurMulCopy65 (line 9760) | inline void TVPChBlurMulCopy65(tjs_uint8 * dest , const tjs_uint8 * src ...
function TVPChBlurAddMulCopy65 (line 9770) | inline void TVPChBlurAddMulCopy65(tjs_uint8 * dest , const tjs_uint8 * s...
function TVPChBlurCopy65 (line 9780) | inline void TVPChBlurCopy65(tjs_uint8 * dest , tjs_int destpitch , tjs_i...
function TVPBLExpand1BitTo8BitPal (line 9790) | inline void TVPBLExpand1BitTo8BitPal(tjs_uint8 * dest , const tjs_uint8 ...
function TVPBLExpand1BitTo8Bit (line 9800) | inline void TVPBLExpand1BitTo8Bit(tjs_uint8 * dest , const tjs_uint8 * b...
function TVPBLExpand1BitTo32BitPal (line 9810) | inline void TVPBLExpand1BitTo32BitPal(tjs_uint32 * dest , const tjs_uint...
function TVPBLExpand4BitTo8BitPal (line 9820) | inline void TVPBLExpand4BitTo8BitPal(tjs_uint8 * dest , const tjs_uint8 ...
function TVPBLExpand4BitTo8Bit (line 9830) | inline void TVPBLExpand4BitTo8Bit(tjs_uint8 * dest , const tjs_uint8 * b...
function TVPBLExpand4BitTo32BitPal (line 9840) | inline void TVPBLExpand4BitTo32BitPal(tjs_uint32 * dest , const tjs_uint...
function TVPBLExpand8BitTo8BitPal (line 9850) | inline void TVPBLExpand8BitTo8BitPal(tjs_uint8 * dest , const tjs_uint8 ...
function TVPBLExpand8BitTo32BitPal (line 9860) | inline void TVPBLExpand8BitTo32BitPal(tjs_uint32 * dest , const tjs_uint...
function TVPExpand8BitTo32BitGray (line 9870) | inline void TVPExpand8BitTo32BitGray(tjs_uint32 * dest , const tjs_uint8...
function TVPBLConvert15BitTo8Bit (line 9880) | inline void TVPBLConvert15BitTo8Bit(tjs_uint8 * dest , const tjs_uint16 ...
function TVPBLConvert15BitTo32Bit (line 9890) | inline void TVPBLConvert15BitTo32Bit(tjs_uint32 * dest , const tjs_uint1...
function TVPBLConvert24BitTo8Bit (line 9900) | inline void TVPBLConvert24BitTo8Bit(tjs_uint8 * dest , const tjs_uint8 *...
function TVPBLConvert24BitTo32Bit (line 9910) | inline void TVPBLConvert24BitTo32Bit(tjs_uint32 * dest , const tjs_uint8...
function TVPConvert24BitTo32Bit (line 9920) | inline void TVPConvert24BitTo32Bit(tjs_uint32 * dest , const tjs_uint8 *...
function TVPBLConvert32BitTo8Bit (line 9930) | inline void TVPBLConvert32BitTo8Bit(tjs_uint8 * dest , const tjs_uint32 ...
function TVPBLConvert32BitTo32Bit_NoneAlpha (line 9940) | inline void TVPBLConvert32BitTo32Bit_NoneAlpha(tjs_uint32 * dest , const...
function TVPBLConvert32BitTo32Bit_MulAddAlpha (line 9950) | inline void TVPBLConvert32BitTo32Bit_MulAddAlpha(tjs_uint32 * dest , con...
function TVPBLConvert32BitTo32Bit_AddAlpha (line 9960) | inline void TVPBLConvert32BitTo32Bit_AddAlpha(tjs_uint32 * dest , const ...
function TVPDither32BitTo16Bit565 (line 9970) | inline void TVPDither32BitTo16Bit565(tjs_uint16 * dest , const tjs_uint3...
function TVPDither32BitTo16Bit555 (line 9980) | inline void TVPDither32BitTo16Bit555(tjs_uint16 * dest , const tjs_uint3...
function TVPDither32BitTo8Bit (line 9990) | inline void TVPDither32BitTo8Bit(tjs_uint8 * dest , const tjs_uint32 * s...
function TVPTLG5ComposeColors3To4 (line 10000) | inline void TVPTLG5ComposeColors3To4(tjs_uint8 * outp , const tjs_uint8 ...
function TVPTLG5ComposeColors4To4 (line 10010) | inline void TVPTLG5ComposeColors4To4(tjs_uint8 * outp , const tjs_uint8 ...
function tjs_int (line 10020) | inline tjs_int TVPTLG5DecompressSlide(tjs_uint8 * out , const tjs_uint8 ...
function TVPTLG6DecodeGolombValuesForFirst (line 10030) | inline void TVPTLG6DecodeGolombValuesForFirst(tjs_int8 * pixelbuf , tjs_...
function TVPTLG6DecodeGolombValues (line 10040) | inline void TVPTLG6DecodeGolombValues(tjs_int8 * pixelbuf , tjs_int pixe...
function TVPTLG6DecodeLineGeneric (line 10050) | inline void TVPTLG6DecodeLineGeneric(tjs_uint32 * prevline , tjs_uint32 ...
function TVPTLG6DecodeLine (line 10060) | inline void TVPTLG6DecodeLine(tjs_uint32 * prevline , tjs_uint32 * curli...
function TVPPsAlphaBlend (line 10070) | inline void TVPPsAlphaBlend(tjs_uint32 * dest , const tjs_uint32 * src ,...
function TVPPsAlphaBlend_o (line 10080) | inline void TVPPsAlphaBlend_o(tjs_uint32 * dest , const tjs_uint32 * src...
function TVPPsAlphaBlend_HDA (line 10090) | inline void TVPPsAlphaBlend_HDA(tjs_uint32 * dest , const tjs_uint32 * s...
function TVPPsAlphaBlend_HDA_o (line 10100) | inline void TVPPsAlphaBlend_HDA_o(tjs_uint32 * dest , const tjs_uint32 *...
function TVPPsAddBlend (line 10110) | inline void TVPPsAddBlend(tjs_uint32 * dest , const tjs_uint32 * src , t...
function TVPPsAddBlend_o (line 10120) | inline void TVPPsAddBlend_o(tjs_uint32 * dest , const tjs_uint32 * src ,...
function TVPPsAddBlend_HDA (line 10130) | inline void TVPPsAddBlend_HDA(tjs_uint32 * dest , const tjs_uint32 * src...
function TVPPsAddBlend_HDA_o (line 10140) | inline void TVPPsAddBlend_HDA_o(tjs_uint32 * dest , const tjs_uint32 * s...
function TVPPsSubBlend (line 10150) | inline void TVPPsSubBlend(tjs_uint32 * dest , const tjs_uint32 * src , t...
function TVPPsSubBlend_o (line 10160) | inline void TVPPsSubBlend_o(tjs_uint32 * dest , const tjs_uint32 * src ,...
function TVPPsSubBlend_HDA (line 10170) | inline void TVPPsSubBlend_HDA(tjs_uint32 * dest , const tjs_uint32 * src...
function TVPPsSubBlend_HDA_o (line 10180) | inline void TVPPsSubBlend_HDA_o(tjs_uint32 * dest , const tjs_uint32 * s...
function TVPPsMulBlend (line 10190) | inline void TVPPsMulBlend(tjs_uint32 * dest , const tjs_uint32 * src , t...
function TVPPsMulBlend_o (line 10200) | inline void TVPPsMulBlend_o(tjs_uint32 * dest , const tjs_uint32 * src ,...
function TVPPsMulBlend_HDA (line 10210) | inline void TVPPsMulBlend_HDA(tjs_uint32 * dest , const tjs_uint32 * src...
function TVPPsMulBlend_HDA_o (line 10220) | inline void TVPPsMulBlend_HDA_o(tjs_uint32 * dest , const tjs_uint32 * s...
function TVPPsScreenBlend (line 10230) | inline void TVPPsScreenBlend(tjs_uint32 * dest , const tjs_uint32 * src ...
function TVPPsScreenBlend_o (line 10240) | inline void TVPPsScreenBlend_o(tjs_uint32 * dest , const tjs_uint32 * sr...
function TVPPsScreenBlend_HDA (line 10250) | inline void TVPPsScreenBlend_HDA(tjs_uint32 * dest , const tjs_uint32 * ...
function TVPPsScreenBlend_HDA_o (line 10260) | inline void TVPPsScreenBlend_HDA_o(tjs_uint32 * dest , const tjs_uint32 ...
function TVPPsOverlayBlend (line 10270) | inline void TVPPsOverlayBlend(tjs_uint32 * dest , const tjs_uint32 * src...
function TVPPsOverlayBlend_o (line 10280) | inline void TVPPsOverlayBlend_o(tjs_uint32 * dest , const tjs_uint32 * s...
function TVPPsOverlayBlend_HDA (line 10290) | inline void TVPPsOverlayBlend_HDA(tjs_uint32 * dest , const tjs_uint32 *...
function TVPPsOverlayBlend_HDA_o (line 10300) | inline void TVPPsOverlayBlend_HDA_o(tjs_uint32 * dest , const tjs_uint32...
function TVPPsHardLightBlend (line 10310) | inline void TVPPsHardLightBlend(tjs_uint32 * dest , const tjs_uint32 * s...
function TVPPsHardLightBlend_o (line 10320) | inline void TVPPsHardLightBlend_o(tjs_uint32 * dest , const tjs_uint32 *...
function TVPPsHardLightBlend_HDA (line 10330) | inline void TVPPsHardLightBlend_HDA(tjs_uint32 * dest , const tjs_uint32...
function TVPPsHardLightBlend_HDA_o (line 10340) | inline void TVPPsHardLightBlend_HDA_o(tjs_uint32 * dest , const tjs_uint...
function TVPPsSoftLightBlend (line 10350) | inline void TVPPsSoftLightBlend(tjs_uint32 * dest , const tjs_uint32 * s...
function TVPPsSoftLightBlend_o (line 10360) | inline void TVPPsSoftLightBlend_o(tjs_uint32 * dest , const tjs_uint32 *...
function TVPPsSoftLightBlend_HDA (line 10370) | inline void TVPPsSoftLightBlend_HDA(tjs_uint32 * dest , const tjs_uint32...
function TVPPsSoftLightBlend_HDA_o (line 10380) | inline void TVPPsSoftLightBlend_HDA_o(tjs_uint32 * dest , const tjs_uint...
function TVPPsColorDodgeBlend (line 10390) | inline void TVPPsColorDodgeBlend(tjs_uint32 * dest , const tjs_uint32 * ...
function TVPPsColorDodgeBlend_o (line 10400) | inline void TVPPsColorDodgeBlend_o(tjs_uint32 * dest , const tjs_uint32 ...
function TVPPsColorDodgeBlend_HDA (line 10410) | inline void TVPPsColorDodgeBlend_HDA(tjs_uint32 * dest , const tjs_uint3...
function TVPPsColorDodgeBlend_HDA_o (line 10420) | inline void TVPPsColorDodgeBlend_HDA_o(tjs_uint32 * dest , const tjs_uin...
function TVPPsColorDodge5Blend (line 10430) | inline void TVPPsColorDodge5Blend(tjs_uint32 * dest , const tjs_uint32 *...
function TVPPsColorDodge5Blend_o (line 10440) | inline void TVPPsColorDodge5Blend_o(tjs_uint32 * dest , const tjs_uint32...
function TVPPsColorDodge5Blend_HDA (line 10450) | inline void TVPPsColorDodge5Blend_HDA(tjs_uint32 * dest , const tjs_uint...
function TVPPsColorDodge5Blend_HDA_o (line 10460) | inline void TVPPsColorDodge5Blend_HDA_o(tjs_uint32 * dest , const tjs_ui...
function TVPPsColorBurnBlend (line 10470) | inline void TVPPsColorBurnBlend(tjs_uint32 * dest , const tjs_uint32 * s...
function TVPPsColorBurnBlend_o (line 10480) | inline void TVPPsColorBurnBlend_o(tjs_uint32 * dest , const tjs_uint32 *...
function TVPPsColorBurnBlend_HDA (line 10490) | inline void TVPPsColorBurnBlend_HDA(tjs_uint32 * dest , const tjs_uint32...
function TVPPsColorBurnBlend_HDA_o (line 10500) | inline void TVPPsColorBurnBlend_HDA_o(tjs_uint32 * dest , const tjs_uint...
function TVPPsLightenBlend (line 10510) | inline void TVPPsLightenBlend(tjs_uint32 * dest , const tjs_uint32 * src...
function TVPPsLightenBlend_o (line 10520) | inline void TVPPsLightenBlend_o(tjs_uint32 * dest , const tjs_uint32 * s...
function TVPPsLightenBlend_HDA (line 10530) | inline void TVPPsLightenBlend_HDA(tjs_uint32 * dest , const tjs_uint32 *...
function TVPPsLightenBlend_HDA_o (line 10540) | inline void TVPPsLightenBlend_HDA_o(tjs_uint32 * dest , const tjs_uint32...
function TVPPsDarkenBlend (line 10550) | inline void TVPPsDarkenBlend(tjs_uint32 * dest , const tjs_uint32 * src ...
function TVPPsDarkenBlend_o (line 10560) | inline void TVPPsDarkenBlend_o(tjs_uint32 * dest , const tjs_uint32 * sr...
function TVPPsDarkenBlend_HDA (line 10570) | inline void TVPPsDarkenBlend_HDA(tjs_uint32 * dest , const tjs_uint32 * ...
function TVPPsDarkenBlend_HDA_o (line 10580) | inline void TVPPsDarkenBlend_HDA_o(tjs_uint32 * dest , const tjs_uint32 ...
function TVPPsDiffBlend (line 10590) | inline void TVPPsDiffBlend(tjs_uint32 * dest , const tjs_uint32 * src , ...
function TVPPsDiffBlend_o (line 10600) | inline void TVPPsDiffBlend_o(tjs_uint32 * dest , const tjs_uint32 * src ...
function TVPPsDiffBlend_HDA (line 10610) | inline void TVPPsDiffBlend_HDA(tjs_uint32 * dest , const tjs_uint32 * sr...
function TVPPsDiffBlend_HDA_o (line 10620) | inline void TVPPsDiffBlend_HDA_o(tjs_uint32 * dest , const tjs_uint32 * ...
function TVPPsDiff5Blend (line 10630) | inline void TVPPsDiff5Blend(tjs_uint32 * dest , const tjs_uint32 * src ,...
function TVPPsDiff5Blend_o (line 10640) | inline void TVPPsDiff5Blend_o(tjs_uint32 * dest , const tjs_uint32 * src...
function TVPPsDiff5Blend_HDA (line 10650) | inline void TVPPsDiff5Blend_HDA(tjs_uint32 * dest , const tjs_uint32 * s...
function TVPPsDiff5Blend_HDA_o (line 10660) | inline void TVPPsDiff5Blend_HDA_o(tjs_uint32 * dest , const tjs_uint32 *...
function TVPPsExclusionBlend (line 10670) | inline void TVPPsExclusionBlend(tjs_uint32 * dest , const tjs_uint32 * s...
function TVPPsExclusionBlend_o (line 10680) | inline void TVPPsExclusionBlend_o(tjs_uint32 * dest , const tjs_uint32 *...
function TVPPsExclusionBlend_HDA (line 10690) | inline void TVPPsExclusionBlend_HDA(tjs_uint32 * dest , const tjs_uint32...
function TVPPsExclusionBlend_HDA_o (line 10700) | inline void TVPPsExclusionBlend_HDA_o(tjs_uint32 * dest , const tjs_uint...
FILE: 001.NVL/NVLKrkr2/NVLKrkrDump/NVLKrkrDump/dllmain.cpp
function tjs_char (line 39) | const tjs_char* TJSStringGetPtr(tTJSString* s)
class tTJSBinaryStream (line 56) | class tTJSBinaryStream
method Seek (line 59) | Seek(tjs_int64 offset, tjs_int whence) = 0;
method Read (line 60) | Read(void* buffer, tjs_uint read_size) = 0;
function tjs_uint64 (line 67) | tjs_uint64 TJSBinaryStream_GetLength(tTJSBinaryStream* stream)
function MatchPath (line 84) | std::wstring MatchPath(const std::wstring& path)
function BOOL (line 112) | BOOL MatchPathNVL(const wchar_t* path, std::vector<std::wstring>& regex)
function FixPath (line 131) | void FixPath(std::wstring& path)
function GetXP3VFSCurrentDirectoryPath (line 148) | std::wstring GetXP3VFSCurrentDirectoryPath(const std::wstring& currentDi...
function wchar_t (line 163) | const wchar_t* GetRelativePath(const wchar_t* path)
function FullCreateDirectoryW (line 226) | void FullCreateDirectoryW(const std::wstring& dirPath)
function ExtractFile (line 242) | void ExtractFile(tTJSBinaryStream* stream, std::wstring& extractPath)
function ProcessStream (line 300) | void ProcessStream(tTJSBinaryStream* stream, ttstr* name, tjs_uint32 flags)
function tTJSBinaryStream (line 355) | tTJSBinaryStream* Krkr2BcbFastCallTVPCreateStream(ttstr* name, tjs_uint3...
method Seek (line 59) | Seek(tjs_int64 offset, tjs_int whence) = 0;
method Read (line 60) | Read(void* buffer, tjs_uint read_size) =
Copy disabled (too large)
Download .json
Condensed preview — 773 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (17,843K chars).
[
{
"path": ".gitattributes",
"chars": 66,
"preview": "# Auto detect text files and perform LF normalization\n* text=auto\n"
},
{
"path": ".gitignore",
"chars": 5606,
"preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## G"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/BKEFileNameDumper/BKEFileNameDumper.vcxproj",
"chars": 7141,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msb"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/BKEFileNameDumper/BKEFileNameDumper.vcxproj.filters",
"chars": 2367,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/BKEFileNameDumper/dllmain.cpp",
"chars": 2422,
"preview": "#include <Windows.h>\n#include <string>\n#include \"log.h\"\n#include \"stringhelper.h\"\n#include \"util.h\"\n#include \"path.h\"\n#"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/BKEFileNameDumper.sln",
"chars": 1534,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.4.3340"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Common/encoding.cpp",
"chars": 1340,
"preview": "// encoding.cpp\n\n#include <windows.h>\n#include \"encoding.h\"\n\n#undef max\n\nnamespace Encoding\n{\n\tstd::wstring AnsiToUnico"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Common/encoding.h",
"chars": 295,
"preview": "// encoding.h\n\n#pragma once\n\n#include <string>\n\nnamespace Encoding\n{\n\tenum CodePage\n\t{\n\t\tACP = 0,\n\t\tUTF_8 = 65001,\n\t\tSH"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Common/file.cpp",
"chars": 3390,
"preview": "// file.cpp\n\n#include <string>\n#include <fstream>\n#include <limits>\n#include <cstdio>\n\n\nnamespace File\n{\n\tstd::string R"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Common/file.h",
"chars": 405,
"preview": "// file.h\n\n#pragma once\n\n#include <string>\n\nnamespace File\n{\n\tstd::string ReadAllText(const std::string& path);\n\tstd::s"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Common/log.cpp",
"chars": 2570,
"preview": "// log.cpp\n\n#include <cstdarg>\n#include <ctime>\n#include \"log.h\"\n#include \"stringhelper.h\"\n#include \"encoding.h\"\n\n\nname"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Common/log.h",
"chars": 554,
"preview": "// log.h\n\n#pragma once\n\n#include <cstdio>\n\nnamespace Log\n{\n\tclass Logger\n\t{\n\tpublic:\n\t\tLogger();\n\t\tLogger(const wchar_t"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Common/path.cpp",
"chars": 4988,
"preview": "// path.cpp\n\n#include <windows.h>\n#include <string>\n\nnamespace Path\n{\n\tstd::string GetFileName(const std::string& path)"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Common/path.h",
"chars": 789,
"preview": "// path.h\n\n#pragma once\n\n#include <string>\n\nnamespace Path\n{\n\tstd::string GetFileName(const std::string& path);\n\tstd::w"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Common/pe.cpp",
"chars": 4164,
"preview": "// pe.cpp\n\n#include \"pe.h\"\n\nnamespace PE\n{\n\tPVOID GetModuleBase(HMODULE hModule)\n\t{\n\t\tMEMORY_BASIC_INFORMATION mem;\n\n\t\t"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Common/pe.h",
"chars": 1252,
"preview": "// pe.h\n\n#pragma once\n\n#include <windows.h>\n#include <type_traits>\n\nnamespace PE\n{\n\t// Get the base address of the spec"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Common/stringhelper.cpp",
"chars": 7009,
"preview": "// stringhelper.cpp\n\n#include <algorithm>\n#include <string>\n#include <cstdarg>\n\nnamespace StringHelper\n{\n\tbool StartsWi"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Common/stringhelper.h",
"chars": 994,
"preview": "// stringhelper.h\n\n#pragma once\n\n#include <string>\n\nnamespace StringHelper\n{\n\tbool StartsWith(const char* source, const"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Common/util.cpp",
"chars": 6659,
"preview": "// util.cpp\n\n#include <windows.h>\n#include <shlobj.h>\n#include \"stringhelper.h\"\n\nnamespace Util\n{\n std::string GetMo"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Common/util.h",
"chars": 1378,
"preview": "// util.h\n\n#pragma once\n\n#include <windows.h>\n#include <string>\n\nnamespace Util\n{\n\t// Get the full path of the specifie"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Detours/creatwth.cpp",
"chars": 64561,
"preview": "//////////////////////////////////////////////////////////////////////////////\n//\n// Create a process with a DLL (crea"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Detours/detours.cpp",
"chars": 88385,
"preview": "//////////////////////////////////////////////////////////////////////////////\n//\n// Core Detours Functionality (detou"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Detours/detours.h",
"chars": 42779,
"preview": "/////////////////////////////////////////////////////////////////////////////\n//\n// Core Detours Functionality (detour"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Detours/disasm.cpp",
"chars": 165319,
"preview": "//////////////////////////////////////////////////////////////////////////////\n//\n// Detours Disassembler (disasm.cpp "
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Detours/image.cpp",
"chars": 65529,
"preview": "//////////////////////////////////////////////////////////////////////////////\n//\n// Image manipulation functions (ima"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Detours/modules.cpp",
"chars": 32353,
"preview": "//////////////////////////////////////////////////////////////////////////////\n//\n// Module Enumeration Functions (mod"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Detours/uimports.cpp",
"chars": 12666,
"preview": "//////////////////////////////////////////////////////////////////////////////\n//\n// Add DLLs to a module import table"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Loader/Loader.cpp",
"chars": 1362,
"preview": "#include <windows.h>\n#include \"detours.h\"\n#include \"path.h\"\n#include \"util.h\"\n#include \"file.h\"\n#include \"stringhelper."
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Loader/Loader.vcxproj",
"chars": 7503,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msb"
},
{
"path": "001.NVL/BKEngine/BKEFileNameDumper/Loader/Loader.vcxproj.filters",
"chars": 3071,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
},
{
"path": "001.NVL/BKEngine/BKEngine/BKEngine.sln",
"chars": 1519,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.4.3311"
},
{
"path": "001.NVL/BKEngine/BKEngine/BKEngineStatic/BKEngine/BKARCFileBase.cs",
"chars": 2306,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\n\nnamespace BKEng"
},
{
"path": "001.NVL/BKEngine/BKEngine/BKEngineStatic/BKEngine/BKARCFileV20.cs",
"chars": 9186,
"preview": "using System;\nusing System.Buffers;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System."
},
{
"path": "001.NVL/BKEngine/BKEngine/BKEngineStatic/BKEngine/BKARCFileV21.cs",
"chars": 958,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\n\nnamespace BKEng"
},
{
"path": "001.NVL/BKEngine/BKEngine/BKEngineStatic/BKEngine/BKARCFileV40.cs",
"chars": 17021,
"preview": "using System;\nusing System.Buffers;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusin"
},
{
"path": "001.NVL/BKEngine/BKEngine/BKEngineStatic/BKEngine/BZip2Helper.cs",
"chars": 823,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing ICSharpCod"
},
{
"path": "001.NVL/BKEngine/BKEngine/BKEngineStatic/BKEngine/ZstdHelper.cs",
"chars": 797,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.IO;\nusing ZstdNet;\n\n"
},
{
"path": "001.NVL/BKEngine/BKEngine/BKEngineStatic/BKEngineStatic.csproj",
"chars": 824,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>net6.0-windows</TargetFramework>\n <Implicit"
},
{
"path": "001.NVL/BKEngine/BKEngine/ExtractGUI/ExtractGUI.csproj",
"chars": 809,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <OutputType>WinExe</OutputType>\n <TargetFramework>net6.0-wi"
},
{
"path": "001.NVL/BKEngine/BKEngine/ExtractGUI/MainForm.Designer.cs",
"chars": 3893,
"preview": "\nnamespace ExtractGUI\n{\n partial class MainForm\n {\n /// <summary>\n /// 必需的设计器变量。\n /// </summ"
},
{
"path": "001.NVL/BKEngine/BKEngine/ExtractGUI/MainForm.cs",
"chars": 2463,
"preview": "using BKEngine;\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.IO;\nusing Sys"
},
{
"path": "001.NVL/BKEngine/BKEngine/ExtractGUI/MainForm.resx",
"chars": 5633,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!--\n Microsoft ResX Schema \n\n Version 2.0\n\n The primary goals"
},
{
"path": "001.NVL/BKEngine/BKEngine/ExtractGUI/Program.cs",
"chars": 445,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.IO;\nusing System.Linq;\nusing System."
},
{
"path": "001.NVL/BKEngine/BKEngine/ExtractGUI/Properties/PublishProfiles/FolderProfile64.pubxml",
"chars": 629,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121.\n-->\n<Project>\n <PropertyGr"
},
{
"path": "001.NVL/BKEngine/Manual.md",
"chars": 1139,
"preview": "# BKEngine\n\nBKEngine 工具套件\n\n## 功能\n---\n* BKEngine 解包\n* BKEngine 封包Hash文件名Dump\n\n## 保护\n---\n* Themida 2.x 加壳\n\n## 使用\n---\n\n## B"
},
{
"path": "001.NVL/NVLKrkr2/DataBase/FileNameList/Conspiracy Field Fog Shadow.lst",
"chars": 1956902,
"preview": "000.jpg\n001.jpg\n002.jpg\n003.jpg\n004.jpg\n005.jpg\n006.jpg\n007.jpg\n008.jpg\n009.jpg\n010.jpg\n011.jpg\n012.jpg\n013.jpg\n014.jpg\n"
},
{
"path": "001.NVL/NVLKrkr2/DataBase/FileNameList/Conspiracy Field Snow Trap.lst",
"chars": 4331333,
"preview": "00bgm.ogg\n01bgm.ogg\n02bgm.ogg\n03bgm.ogg\n04bgm.ogg\n05bgm.ogg\n06bgm.ogg\n07bgm.ogg\n08bgm.ogg\n09bgm.ogg\n10bgm.ogg\n11bgm.ogg\n"
},
{
"path": "001.NVL/NVLKrkr2/DataBase/FileNameList/the Melody of Iris.lst",
"chars": 1715739,
"preview": "startup.tjs\nstartup.tjs\nstartup.tjs\nstartup.tjs\ni18n.tjs\ni18n.tjs\ni18n.tjs\ni18n.tjs\nmacro/strings.tjs\nstrings.tjs\nmacro/"
},
{
"path": "001.NVL/NVLKrkr2/Manual.md",
"chars": 1513,
"preview": "# NVLKRKR\n\nNVLKRKR 工具套件\n\n## 功能\n---\n* NVLKRKR2 静态解包\n* NVLKRKR2 动态Dump资源\n* NVLKRKR2 封包Hash文件名Dump\n* NVLKRKR2 封包Hash文件名解码器\n"
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/ExtractGUI/ExtractGUI.csproj",
"chars": 764,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <OutputType>WinExe</OutputType>\n <TargetFramework>net6.0-wi"
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/ExtractGUI/MainForm.Designer.cs",
"chars": 4741,
"preview": "\nnamespace ExtractorGUI\n{\n partial class MainForm\n {\n /// <summary>\n /// 必需的设计器变量。\n /// </su"
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/ExtractGUI/MainForm.cs",
"chars": 2222,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Text;\nusin"
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/ExtractGUI/MainForm.resx",
"chars": 5633,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!--\n Microsoft ResX Schema \n\n Version 2.0\n\n The primary goals"
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/ExtractGUI/Program.cs",
"chars": 434,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Windows.Forms;\n\nnamespace ExtractorGUI\n{\n static class "
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/ExtractGUI/Properties/PublishProfiles/FolderProfile64.pubxml",
"chars": 629,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121.\n-->\n<Project>\n <PropertyGr"
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/HashDecoder/BinaryDataConvert.cs",
"chars": 2882,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Buffers;\nusing System.Linq;\nusing System.Text;\nusing Syste"
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/HashDecoder/HashDecoder.csproj",
"chars": 767,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <OutputType>WinExe</OutputType>\n <TargetFramework>net6.0-wi"
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/HashDecoder/MainForm.Designer.cs",
"chars": 6492,
"preview": "namespace HashDecoder\n{\n partial class MainForm\n {\n /// <summary>\n /// Required designer variable."
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/HashDecoder/MainForm.cs",
"chars": 9175,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Text;\nusin"
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/HashDecoder/MainForm.resx",
"chars": 5633,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!--\n Microsoft ResX Schema \n\n Version 2.0\n\n The primary goals"
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/HashDecoder/PathUtil.cs",
"chars": 5359,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.IO;\n\nnamespace Utils"
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/HashDecoder/Program.cs",
"chars": 311,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Windows.Forms;\nnamespace HashDecoder\n{\n internal static"
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/HashDecoder/Properties/PublishProfiles/FolderProfile64.pubxml",
"chars": 629,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121.\n-->\n<Project>\n <PropertyGr"
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/HashDecoder/TextCreator.Designer.cs",
"chars": 16203,
"preview": "\nnamespace HashDecoder\n{\n partial class TextCreator\n {\n /// <summary> \n /// 必需的设计器变量。\n /// <"
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/HashDecoder/TextCreator.cs",
"chars": 17702,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\nusing System.IO;\nusing System.Com"
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/HashDecoder/TextCreator.resx",
"chars": 5843,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!--\n Microsoft ResX Schema \n\n Version 2.0\n\n The primary goals"
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/NVLKR2.sln",
"chars": 1962,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.4.3311"
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/NVLKR2Static/NVLKR2Static.csproj",
"chars": 583,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>net6.0-windows</TargetFramework>\n <Implicit"
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/NVLKR2Static/NvlKr2/GameKey.cs",
"chars": 5496,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace NVLKR2Static\n{\n pub"
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/NVLKR2Static/NvlKr2/XP3Archive.cs",
"chars": 12610,
"preview": "using System;\nusing System.Buffers;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System."
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/NVLKR2Static/NvlKr2/XP3Filter.cs",
"chars": 1266,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace NVLKR2Static\n{\n /// <summary>\n /// "
},
{
"path": "001.NVL/NVLKrkr2/NVLKR2Extract/NVLKR2Static/NvlKr2/Zlib.cs",
"chars": 574,
"preview": "using System;\nusing System.IO;\nusing System.IO.Compression;\n\nnamespace NVLKR2Static\n{\n\n public class Zlib\n {\n "
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Common/encoding.cpp",
"chars": 1340,
"preview": "// encoding.cpp\n\n#include <windows.h>\n#include \"encoding.h\"\n\n#undef max\n\nnamespace Encoding\n{\n\tstd::wstring AnsiToUnico"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Common/encoding.h",
"chars": 295,
"preview": "// encoding.h\n\n#pragma once\n\n#include <string>\n\nnamespace Encoding\n{\n\tenum CodePage\n\t{\n\t\tACP = 0,\n\t\tUTF_8 = 65001,\n\t\tSH"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Common/file.cpp",
"chars": 3390,
"preview": "// file.cpp\n\n#include <string>\n#include <fstream>\n#include <limits>\n#include <cstdio>\n\n\nnamespace File\n{\n\tstd::string R"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Common/file.h",
"chars": 405,
"preview": "// file.h\n\n#pragma once\n\n#include <string>\n\nnamespace File\n{\n\tstd::string ReadAllText(const std::string& path);\n\tstd::s"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Common/log.cpp",
"chars": 2570,
"preview": "// log.cpp\n\n#include <cstdarg>\n#include <ctime>\n#include \"log.h\"\n#include \"stringhelper.h\"\n#include \"encoding.h\"\n\n\nname"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Common/log.h",
"chars": 554,
"preview": "// log.h\n\n#pragma once\n\n#include <cstdio>\n\nnamespace Log\n{\n\tclass Logger\n\t{\n\tpublic:\n\t\tLogger();\n\t\tLogger(const wchar_t"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Common/path.cpp",
"chars": 4988,
"preview": "// path.cpp\n\n#include <windows.h>\n#include <string>\n\nnamespace Path\n{\n\tstd::string GetFileName(const std::string& path)"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Common/path.h",
"chars": 789,
"preview": "// path.h\n\n#pragma once\n\n#include <string>\n\nnamespace Path\n{\n\tstd::string GetFileName(const std::string& path);\n\tstd::w"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Common/pe.cpp",
"chars": 4164,
"preview": "// pe.cpp\n\n#include \"pe.h\"\n\nnamespace PE\n{\n\tPVOID GetModuleBase(HMODULE hModule)\n\t{\n\t\tMEMORY_BASIC_INFORMATION mem;\n\n\t\t"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Common/pe.h",
"chars": 1252,
"preview": "// pe.h\n\n#pragma once\n\n#include <windows.h>\n#include <type_traits>\n\nnamespace PE\n{\n\t// Get the base address of the spec"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Common/stringhelper.cpp",
"chars": 7009,
"preview": "// stringhelper.cpp\n\n#include <algorithm>\n#include <string>\n#include <cstdarg>\n\nnamespace StringHelper\n{\n\tbool StartsWi"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Common/stringhelper.h",
"chars": 994,
"preview": "// stringhelper.h\n\n#pragma once\n\n#include <string>\n\nnamespace StringHelper\n{\n\tbool StartsWith(const char* source, const"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Common/util.cpp",
"chars": 6659,
"preview": "// util.cpp\n\n#include <windows.h>\n#include <shlobj.h>\n#include \"stringhelper.h\"\n\nnamespace Util\n{\n std::string GetMo"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Common/util.h",
"chars": 1378,
"preview": "// util.h\n\n#pragma once\n\n#include <windows.h>\n#include <string>\n\nnamespace Util\n{\n\t// Get the full path of the specifie"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Detours/creatwth.cpp",
"chars": 64561,
"preview": "//////////////////////////////////////////////////////////////////////////////\n//\n// Create a process with a DLL (crea"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Detours/detours.cpp",
"chars": 88385,
"preview": "//////////////////////////////////////////////////////////////////////////////\n//\n// Core Detours Functionality (detou"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Detours/detours.h",
"chars": 42779,
"preview": "/////////////////////////////////////////////////////////////////////////////\n//\n// Core Detours Functionality (detour"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Detours/disasm.cpp",
"chars": 165319,
"preview": "//////////////////////////////////////////////////////////////////////////////\n//\n// Detours Disassembler (disasm.cpp "
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Detours/image.cpp",
"chars": 65529,
"preview": "//////////////////////////////////////////////////////////////////////////////\n//\n// Image manipulation functions (ima"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Detours/modules.cpp",
"chars": 32353,
"preview": "//////////////////////////////////////////////////////////////////////////////\n//\n// Module Enumeration Functions (mod"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/Detours/uimports.cpp",
"chars": 12666,
"preview": "//////////////////////////////////////////////////////////////////////////////\n//\n// Add DLLs to a module import table"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/KrkrPlugin/tp_stub.cpp",
"chars": 77346,
"preview": "/*\n\n\tTVP2 ( T Visual Presenter 2 ) A script authoring tool\n\tCopyright (C) 2000-2009 W.Dee <dee@kikyou.info> and contri"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/KrkrPlugin/tp_stub.h",
"chars": 469796,
"preview": "/*\n\n\tTVP2 ( T Visual Presenter 2 ) A script authoring tool\n\tCopyright (C) 2000-2009 W.Dee <dee@kikyou.info> and contri"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/NVLKrkrDump/NVLKrkrDump.vcxproj",
"chars": 7105,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msb"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/NVLKrkrDump/NVLKrkrDump.vcxproj.filters",
"chars": 3406,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/NVLKrkrDump/dllmain.cpp",
"chars": 14808,
"preview": "//参考:https://github.com/crskycode/KrkrDump\n// \n//人员支持:\n//https://github.com/crskycode\n//https://github.com/Dir-A\n\n#incl"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/NVLKrkrDump.sln",
"chars": 1546,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.4.3311"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/NVLKrkrDumpLoader/KrkrDumpLoader.cpp",
"chars": 1344,
"preview": "// KrkrDumpLoader.cpp\n\n#include <windows.h>\n#include \"detours.h\"\n#include \"path.h\"\n#include \"util.h\"\n#include \"file.h\"\n"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/NVLKrkrDumpLoader/KrkrDumpLoader.vcxproj",
"chars": 6941,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msb"
},
{
"path": "001.NVL/NVLKrkr2/NVLKrkrDump/NVLKrkrDumpLoader/KrkrDumpLoader.vcxproj.filters",
"chars": 3116,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
},
{
"path": "001.NVL/NVLUnity/Manual.md",
"chars": 1062,
"preview": "# NVLUnity\n\nNVLUnity 工具套件\n\n## 功能\n---\n* NVLUnity 封包解密\n* NVLUnity 动态脚本Dump\n\n## 使用\n---\n\n## NVLUnityDecryptor\n### 描述\n* 解密.nv"
},
{
"path": "001.NVL/NVLUnity/NVLUnityDecryptor/DecryptorGui/DecryptorGui.csproj",
"chars": 770,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <OutputType>WinExe</OutputType>\n <TargetFramework>net6.0-wi"
},
{
"path": "001.NVL/NVLUnity/NVLUnityDecryptor/DecryptorGui/MainForm.Designer.cs",
"chars": 6491,
"preview": "\nnamespace DecryptorGui\n{\n partial class MainForm\n {\n /// <summary>\n /// Required designer variabl"
},
{
"path": "001.NVL/NVLUnity/NVLUnityDecryptor/DecryptorGui/MainForm.cs",
"chars": 3427,
"preview": "using System;\nusing System.Linq;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Windows.Forms;\nusing S"
},
{
"path": "001.NVL/NVLUnity/NVLUnityDecryptor/DecryptorGui/MainForm.resx",
"chars": 5633,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!--\n Microsoft ResX Schema \n\n Version 2.0\n\n The primary goals"
},
{
"path": "001.NVL/NVLUnity/NVLUnityDecryptor/DecryptorGui/Program.cs",
"chars": 480,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows.F"
},
{
"path": "001.NVL/NVLUnity/NVLUnityDecryptor/DecryptorGui/Properties/PublishProfiles/FolderProfile64.pubxml",
"chars": 629,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121.\n-->\n<Project>\n <PropertyGr"
},
{
"path": "001.NVL/NVLUnity/NVLUnityDecryptor/NvlUnity.sln",
"chars": 1532,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.3191"
},
{
"path": "001.NVL/NVLUnity/NVLUnityDecryptor/NvlUnityDecrypt/NvlUnity/ArchiveCrypto.cs",
"chars": 3999,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing NvlUnity.V1;\n\nnamespace NvlUnity\n{\n public ab"
},
{
"path": "001.NVL/NVLUnity/NVLUnityDecryptor/NvlUnityDecrypt/NvlUnity.V1/GameDBV1.cs",
"chars": 8010,
"preview": "using System;\nusing System.Collections.Generic;\n\nnamespace NvlUnity.V1\n{\n /// <summary>\n /// V1版加密\n /// </summ"
},
{
"path": "001.NVL/NVLUnity/NVLUnityDecryptor/NvlUnityDecrypt/NvlUnity.V1/NVLFilterV1.cs",
"chars": 2492,
"preview": "using System;\nusing System.Collections.Generic;\n\nnamespace NvlUnity.V1\n{\n /// <summary>\n /// Key信息V1\n /// </su"
},
{
"path": "001.NVL/NVLUnity/NVLUnityDecryptor/NvlUnityDecrypt/NvlUnityDecryptor.csproj",
"chars": 557,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>net6.0-windows</TargetFramework>\n <Platfor"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Common/encoding.cpp",
"chars": 1340,
"preview": "// encoding.cpp\n\n#include <windows.h>\n#include \"encoding.h\"\n\n#undef max\n\nnamespace Encoding\n{\n\tstd::wstring AnsiToUnico"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Common/encoding.h",
"chars": 295,
"preview": "// encoding.h\n\n#pragma once\n\n#include <string>\n\nnamespace Encoding\n{\n\tenum CodePage\n\t{\n\t\tACP = 0,\n\t\tUTF_8 = 65001,\n\t\tSH"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Common/file.cpp",
"chars": 3390,
"preview": "// file.cpp\n\n#include <string>\n#include <fstream>\n#include <limits>\n#include <cstdio>\n\n\nnamespace File\n{\n\tstd::string R"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Common/file.h",
"chars": 405,
"preview": "// file.h\n\n#pragma once\n\n#include <string>\n\nnamespace File\n{\n\tstd::string ReadAllText(const std::string& path);\n\tstd::s"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Common/log.cpp",
"chars": 2570,
"preview": "// log.cpp\n\n#include <cstdarg>\n#include <ctime>\n#include \"log.h\"\n#include \"stringhelper.h\"\n#include \"encoding.h\"\n\n\nname"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Common/log.h",
"chars": 554,
"preview": "// log.h\n\n#pragma once\n\n#include <cstdio>\n\nnamespace Log\n{\n\tclass Logger\n\t{\n\tpublic:\n\t\tLogger();\n\t\tLogger(const wchar_t"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Common/path.cpp",
"chars": 4988,
"preview": "// path.cpp\n\n#include <windows.h>\n#include <string>\n\nnamespace Path\n{\n\tstd::string GetFileName(const std::string& path)"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Common/path.h",
"chars": 789,
"preview": "// path.h\n\n#pragma once\n\n#include <string>\n\nnamespace Path\n{\n\tstd::string GetFileName(const std::string& path);\n\tstd::w"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Common/pe.cpp",
"chars": 4164,
"preview": "// pe.cpp\n\n#include \"pe.h\"\n\nnamespace PE\n{\n\tPVOID GetModuleBase(HMODULE hModule)\n\t{\n\t\tMEMORY_BASIC_INFORMATION mem;\n\n\t\t"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Common/pe.h",
"chars": 1252,
"preview": "// pe.h\n\n#pragma once\n\n#include <windows.h>\n#include <type_traits>\n\nnamespace PE\n{\n\t// Get the base address of the spec"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Common/stringhelper.cpp",
"chars": 7009,
"preview": "// stringhelper.cpp\n\n#include <algorithm>\n#include <string>\n#include <cstdarg>\n\nnamespace StringHelper\n{\n\tbool StartsWi"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Common/stringhelper.h",
"chars": 994,
"preview": "// stringhelper.h\n\n#pragma once\n\n#include <string>\n\nnamespace StringHelper\n{\n\tbool StartsWith(const char* source, const"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Common/util.cpp",
"chars": 6659,
"preview": "// util.cpp\n\n#include <windows.h>\n#include <shlobj.h>\n#include \"stringhelper.h\"\n\nnamespace Util\n{\n std::string GetMo"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Common/util.h",
"chars": 1378,
"preview": "// util.h\n\n#pragma once\n\n#include <windows.h>\n#include <string>\n\nnamespace Util\n{\n\t// Get the full path of the specifie"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Detours/creatwth.cpp",
"chars": 64561,
"preview": "//////////////////////////////////////////////////////////////////////////////\n//\n// Create a process with a DLL (crea"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Detours/detours.cpp",
"chars": 88385,
"preview": "//////////////////////////////////////////////////////////////////////////////\n//\n// Core Detours Functionality (detou"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Detours/detours.h",
"chars": 42779,
"preview": "/////////////////////////////////////////////////////////////////////////////\n//\n// Core Detours Functionality (detour"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Detours/disasm.cpp",
"chars": 165319,
"preview": "//////////////////////////////////////////////////////////////////////////////\n//\n// Detours Disassembler (disasm.cpp "
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Detours/image.cpp",
"chars": 65529,
"preview": "//////////////////////////////////////////////////////////////////////////////\n//\n// Image manipulation functions (ima"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Detours/modules.cpp",
"chars": 32353,
"preview": "//////////////////////////////////////////////////////////////////////////////\n//\n// Module Enumeration Functions (mod"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Detours/uimports.cpp",
"chars": 12666,
"preview": "//////////////////////////////////////////////////////////////////////////////\n//\n// Add DLLs to a module import table"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/DumperGUI/DumperGUI.vcxproj",
"chars": 6393,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msb"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/DumperGUI/DumperGUI.vcxproj.filters",
"chars": 1155,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/DumperGUI/dllmain.cpp",
"chars": 4353,
"preview": "#include <Windows.h>\n#include \"resource.h\"\n\n#include <Shlwapi.h>\n#pragma comment(lib,\"shlwapi.lib\")\n\n#include<vector>\n#"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/DumperGUI/resource.h",
"chars": 456,
"preview": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ ɵİļ\n// DumperGUI.rc ʹ\n//\n#define IDD_MainForm 101\n#def"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Il2Cpp/Il2CppAPI.cpp",
"chars": 11221,
"preview": "#include \"Il2CppAPI.h\"\n#include <Windows.h>\n\nvoid* g_Il2CppSetMemoryCallbacksPtr = nullptr;\nvoid* g_Il2CppGetCorlibPtr "
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Il2Cpp/Il2CppAPI.h",
"chars": 17209,
"preview": "#include \"Il2CppClass.h\"\n\n\n/// <summary>\n/// 初始化il2cppApi\n/// </summary>\n/// <returns></returns>\nbool Il2CppInitialize("
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Il2Cpp/Il2CppClass.h",
"chars": 5829,
"preview": "#include<cstdint>\n\ntypedef uint16_t Il2CppChar;\ntypedef uintptr_t il2cpp_array_size_t;\ntypedef int32_t TypeDefinitionIn"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Loader/Loader.cpp",
"chars": 1354,
"preview": "#include <windows.h>\n#include \"detours.h\"\n#include \"path.h\"\n#include \"util.h\"\n#include \"file.h\"\n#include \"stringhelper."
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Loader/Loader.vcxproj",
"chars": 7503,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msb"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/Loader/Loader.vcxproj.filters",
"chars": 3071,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/NVLUnityScriptDumper.sln",
"chars": 1971,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.4.3340"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/ScriptDumper/Export.def",
"chars": 54,
"preview": "LIBRARY\nEXPORTS\n\tDumpScript\n\tInitialize\n\tUnInitialize"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/ScriptDumper/ScriptDumper.vcxproj",
"chars": 8105,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msb"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/ScriptDumper/ScriptDumper.vcxproj.filters",
"chars": 2882,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
},
{
"path": "001.NVL/NVLUnity/NVLUnityScriptDumper/ScriptDumper/dllmain.cpp",
"chars": 7858,
"preview": "\n#include <Windows.h>\n#include <string>\n#include \"Il2CppAPI.h\"\n\n#include \"path.h\"\n#include \"file.h\"\n#include \"util.h\"\n\n"
},
{
"path": "001.NVL/NVLWeb/ConsoleTest/ConsoleTest.csproj",
"chars": 739,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n\t<PropertyGroup>\n\t\t<OutputType>Exe</OutputType>\n\t\t<TargetFramework>net6.0-windows</Ta"
},
{
"path": "001.NVL/NVLWeb/ConsoleTest/Program.cs",
"chars": 622,
"preview": "using NVLWebStatic;\nusing System;\nusing System.IO;\nusing System.Collections.Generic;\n\nnamespace ConsoleTest\n{\n inter"
},
{
"path": "001.NVL/NVLWeb/EndOfTheWorldExtractor/EndOfTheWorldExtractor.csproj",
"chars": 780,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n\t<PropertyGroup>\n\t\t<OutputType>Exe</OutputType>\n\t\t<TargetFramework>net6.0-windows</Ta"
},
{
"path": "001.NVL/NVLWeb/EndOfTheWorldExtractor/Program.cs",
"chars": 1327,
"preview": "using NVLWebStatic;\nusing System;\nusing System.IO;\nusing System.Windows.Forms;\n\nnamespace EndOfTheWorldExtractor\n{\n "
},
{
"path": "001.NVL/NVLWeb/Manual.md",
"chars": 218,
"preview": "# NVLWeb\n\nNVLWeb 工具套件\n\n## 功能\n---\n* NVLWeb asar封包解密\n\n## 使用\n---\n\n## NVLWeb\n### 描述\n* NVLWeb asar封包解密\n### 使用\n* 对应游戏解包Exe的GUI"
},
{
"path": "001.NVL/NVLWeb/NVLWeb.sln",
"chars": 1998,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.5.3342"
},
{
"path": "001.NVL/NVLWeb/NVLWebStatic/ASARPackage.cs",
"chars": 6826,
"preview": "using System;\nusing System.Buffers;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Syste"
},
{
"path": "001.NVL/NVLWeb/NVLWebStatic/Crypto.cs",
"chars": 2042,
"preview": "using System;\nusing System.Security.Cryptography;\n\nnamespace NVLWebStatic\n{\n public class Crypto\n {\n /// <"
},
{
"path": "001.NVL/NVLWeb/NVLWebStatic/EndOfTheWorld.cs",
"chars": 4278,
"preview": "using System;\nusing System.Buffers;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System."
},
{
"path": "001.NVL/NVLWeb/NVLWebStatic/EntryProcess.cs",
"chars": 2997,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Dynamic;\nusing System.IO;\nusing System.Linq;\nusing System."
},
{
"path": "001.NVL/NVLWeb/NVLWebStatic/NVLWebStatic.csproj",
"chars": 609,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n\t<PropertyGroup>\n\t\t<TargetFramework>net6.0-windows</TargetFramework>\n\t\t<ImplicitUsing"
},
{
"path": "002.Strrationalism/Snowing/Manual.md",
"chars": 226,
"preview": "# Snowing Engine\n\nSnowing 引擎工具套件\n\n## 功能\n---\n* Snowing 资源解密\n\n## 使用\n---\n\n## SnowingExtract\n### 描述\n* 解密Snowing引擎资源\n### 使用\n*"
},
{
"path": "002.Strrationalism/Snowing/SnowingExtract/ConsoleExecute/ConsoleExecute.csproj",
"chars": 760,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <OutputType>Exe</OutputType>\n <TargetFramework>net6.0-window"
},
{
"path": "002.Strrationalism/Snowing/SnowingExtract/ConsoleExecute/Program.cs",
"chars": 1436,
"preview": "using System;\nusing System.IO;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Snowing;\nusing Snowing.Games;"
},
{
"path": "002.Strrationalism/Snowing/SnowingExtract/SnowingExtract.sln",
"chars": 1998,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.4.3311"
},
{
"path": "002.Strrationalism/Snowing/SnowingExtract/SnowingStatic/Snowing/AesHelper.cs",
"chars": 1211,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Security.Cryptograph"
},
{
"path": "002.Strrationalism/Snowing/SnowingExtract/SnowingStatic/Snowing/Archive.cs",
"chars": 439,
"preview": "\nnamespace Snowing\n{\n /// <summary>\n /// 资源相关\n /// </summary>\n public class Archive\n {\n /// <summ"
},
{
"path": "002.Strrationalism/Snowing/SnowingExtract/SnowingStatic/Snowing/ArchiveFile.cs",
"chars": 3896,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.IO;\nnamespace Snowin"
},
{
"path": "002.Strrationalism/Snowing/SnowingExtract/SnowingStatic/Snowing/MemorySearch.cs",
"chars": 792,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Snowing\n{\n /// <summary>\n /// 内存查找相"
},
{
"path": "002.Strrationalism/Snowing/SnowingExtract/SnowingStatic/Snowing/ScenarioArchive.cs",
"chars": 664,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace Snowing\n{\n /// <sum"
},
{
"path": "002.Strrationalism/Snowing/SnowingExtract/SnowingStatic/Snowing/StructureConvert.cs",
"chars": 1144,
"preview": "using System;\nusing System.Runtime.InteropServices;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace Sno"
},
{
"path": "002.Strrationalism/Snowing/SnowingExtract/SnowingStatic/Snowing/TextureArchive.cs",
"chars": 5486,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\nusing System.IO;\nusing System.Lin"
},
{
"path": "002.Strrationalism/Snowing/SnowingExtract/SnowingStatic/Snowing.Games/GameKeys.cs",
"chars": 631,
"preview": "\nnamespace Snowing.Games\n{\n /// <summary>\n /// 空梦\n /// </summary>\n public class VainRiser\n {\n ///"
},
{
"path": "002.Strrationalism/Snowing/SnowingExtract/SnowingStatic/SnowingStatic.csproj",
"chars": 807,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>net6.0-windows</TargetFramework>\n <Implicit"
},
{
"path": "002.Strrationalism/Snowing/SnowingExtract/VainRiserExtractor/Program.cs",
"chars": 1520,
"preview": "using Snowing.Games;\nusing Snowing;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Windo"
},
{
"path": "002.Strrationalism/Snowing/SnowingExtract/VainRiserExtractor/VainRiserExtractor.csproj",
"chars": 772,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n\t<PropertyGroup>\n\t\t<OutputType>Exe</OutputType>\n\t\t<TargetFramework>net6.0-windows</Ta"
},
{
"path": "003.BlueAngel/BlueAngelExtract/BlueAngelExtract.sln",
"chars": 2046,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.6.3380"
},
{
"path": "003.BlueAngel/BlueAngelExtract/BlueAngelStaticExtract/BlueAngel/AssemblyEmulator.cs",
"chars": 3526,
"preview": "\n\nnamespace BlueAngel\n{\n /// <summary>\n /// 汇编仿真\n /// </summary>\n public class AssemblyEmulator\n {\n "
},
{
"path": "003.BlueAngel/BlueAngelExtract/BlueAngelStaticExtract/BlueAngel/LZ4.cs",
"chars": 1187,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing K4os.Compression.LZ4;\n\nname"
},
{
"path": "003.BlueAngel/BlueAngelExtract/BlueAngelStaticExtract/BlueAngel/XP3Archive.cs",
"chars": 3302,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.InteropServices;\nusing System.T"
},
{
"path": "003.BlueAngel/BlueAngelExtract/BlueAngelStaticExtract/BlueAngel.StarlightofAeons/Archive.cs",
"chars": 8035,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing BlueAngel.V1;\nusing System."
},
{
"path": "003.BlueAngel/BlueAngelExtract/BlueAngelStaticExtract/BlueAngel.StarlightofAeons/Key.cs",
"chars": 43223,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace BlueAngel.StarlightofA"
},
{
"path": "003.BlueAngel/BlueAngelExtract/BlueAngelStaticExtract/BlueAngel.V1/ArchiveCrypto.cs",
"chars": 41135,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "003.BlueAngel/BlueAngelExtract/BlueAngelStaticExtract/BlueAngelStaticExtract.csproj",
"chars": 727,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>net6.0-windows</TargetFramework>\n <Platfor"
},
{
"path": "003.BlueAngel/BlueAngelExtract/ConsoleExecute/ConsoleExecute.csproj",
"chars": 749,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <OutputType>Exe</OutputType>\n <TargetFramework>net6.0-window"
},
{
"path": "003.BlueAngel/BlueAngelExtract/ConsoleExecute/Program.cs",
"chars": 1473,
"preview": "using System;\nusing System.Collections.Generic;\nusing BlueAngel.StarlightofAeons;\nusing System.Linq;\nusing BlueAngel.V1"
},
{
"path": "003.BlueAngel/BlueAngelExtract/StarlightofAeonsExtractor/Program.cs",
"chars": 1585,
"preview": "using BlueAngel.StarlightofAeons;\nusing BlueAngel.V1;\nusing System;\nusing System.Windows.Forms;\n\nnamespace StarlightofA"
},
{
"path": "003.BlueAngel/BlueAngelExtract/StarlightofAeonsExtractor/StarlightofAeonsExtractor.csproj",
"chars": 763,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n\t<PropertyGroup>\n\t\t<OutputType>Exe</OutputType>\n\t\t<TargetFramework>net6.0-windows</Ta"
},
{
"path": "003.BlueAngel/Manual.md",
"chars": 1321,
"preview": "# BlueAngel\n\n蓝天使制作组工具套件\n\n## 功能\n---\n* 封包资源解密\n\n## 使用\n---\n\n## BlueAngelExtract\n### 描述\n* XP3封包解密\n### 保护\n* VMProtect 3.x 加壳\n#"
},
{
"path": "003.BlueAngel/TheCardinalMemoryNotch/ConsoleExecute/ConsoleExecute.csproj",
"chars": 437,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <OutputType>Exe</OutputType>\n <TargetFramework>net6.0-windo"
},
{
"path": "003.BlueAngel/TheCardinalMemoryNotch/ConsoleExecute/Program.cs",
"chars": 167,
"preview": "using System;\nusing EngineCoreStatic;\n\nnamespace ConsoleExecute\n{\n internal class Program\n {\n static void "
},
{
"path": "003.BlueAngel/TheCardinalMemoryNotch/EngineCoreStatic/EngineCoreStatic.csproj",
"chars": 294,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <TargetFramework>net6.0-windows</TargetFramework>\n <Implicit"
},
{
"path": "003.BlueAngel/TheCardinalMemoryNotch/EngineCoreStatic/SPKArchive.cs",
"chars": 7264,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing Sys"
},
{
"path": "003.BlueAngel/TheCardinalMemoryNotch/EngineCoreStatic/XP3Struct.cs",
"chars": 2839,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace EngineCoreStatic\n{\n /// <summary>\n "
},
{
"path": "003.BlueAngel/TheCardinalMemoryNotch/EngineCoreStatic/Zlib.cs",
"chars": 687,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO.Compression;\nusing System.IO;\n\nnamespace EngineCoreStat"
},
{
"path": "003.BlueAngel/TheCardinalMemoryNotch/ExtractorV1/ExtractorV1.csproj",
"chars": 477,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n <PropertyGroup>\n <OutputType>Exe</OutputType>\n <TargetFramework>net6.0-window"
},
{
"path": "003.BlueAngel/TheCardinalMemoryNotch/ExtractorV1/Program.cs",
"chars": 1064,
"preview": "using System;\nusing System.Windows.Forms;\nusing EngineCoreStatic;\n\nnamespace ExtractorV1\n{\n internal class Program\n "
},
{
"path": "003.BlueAngel/TheCardinalMemoryNotch/ProtectorFileDumper/Common/directory.cpp",
"chars": 1058,
"preview": "\n#include <Windows.h>\n#include \"directory.h\"\n#include \"path.h\"\n\nnamespace Directory\n{\n\tbool Exists(const std::string& d"
},
{
"path": "003.BlueAngel/TheCardinalMemoryNotch/ProtectorFileDumper/Common/directory.h",
"chars": 227,
"preview": "#pragma once\n\n#include <string>\nnamespace Directory\n{\n\tbool Exists(const std::string& dirPath);\n\tbool Exists(const std:"
},
{
"path": "003.BlueAngel/TheCardinalMemoryNotch/ProtectorFileDumper/Common/encoding.cpp",
"chars": 1340,
"preview": "// encoding.cpp\n\n#include <windows.h>\n#include \"encoding.h\"\n\n#undef max\n\nnamespace Encoding\n{\n\tstd::wstring AnsiToUnico"
}
]
// ... and 573 more files (download for full content)
About this extraction
This page contains the full source code of the YeLikesss/CNGALTools GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 773 files (16.0 MB), approximately 4.2M tokens, and a symbol index with 9465 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.