Switch to an amalgamated Zydis 4.0.0

This commit is contained in:
Duncan Ogilvie 2023-07-08 14:12:28 +02:00
parent 6c253bc74d
commit a9a339ad45
8 changed files with 66242 additions and 181 deletions

3
.gitmodules vendored
View File

@ -1,3 +0,0 @@
[submodule "GleeBug/zyan-disassembler-engine"]
path = GleeBug/zyan-disassembler-engine
url = https://github.com/zyantific/zyan-disassembler-engine

View File

@ -1,10 +1,6 @@
#include "Debugger.Process.h"
#include "Debugger.Thread.Registers.h"
#define ZYDIS_EXPORTS
#define ZYDIS_ENABLE_FEATURE_IMPLICITLY_USED_REGISTERS
#define ZYDIS_ENABLE_FEATURE_AFFECTED_FLAGS
#include <Zydis/Zydis.h>
#include "Zydis/Zydis.h"
namespace GleeBug
{
@ -21,21 +17,45 @@ namespace GleeBug
hardwareBreakpoints[i].internal.hardware.enabled = false;
}
static bool IsRepeated(const ZydisInstructionInfo & info)
static bool IsRepeated(const ZydisDecodedInstruction & info)
{
// https://www.felixcloutier.com/x86/rep:repe:repz:repne:repnz
// TODO: allow extracting the affected range
switch(info.mnemonic)
{
case ZYDIS_MNEMONIC_INS:
case ZYDIS_MNEMONIC_OUTS:
case ZYDIS_MNEMONIC_MOVS:
// INS
case ZYDIS_MNEMONIC_INSB:
case ZYDIS_MNEMONIC_INSW:
case ZYDIS_MNEMONIC_INSD:
// OUTS
case ZYDIS_MNEMONIC_OUTSB:
case ZYDIS_MNEMONIC_OUTSW:
case ZYDIS_MNEMONIC_OUTSD:
// MOVS
case ZYDIS_MNEMONIC_MOVSB:
case ZYDIS_MNEMONIC_MOVSW:
case ZYDIS_MNEMONIC_MOVSD:
case ZYDIS_MNEMONIC_LODS:
case ZYDIS_MNEMONIC_STOS:
case ZYDIS_MNEMONIC_CMPS:
case ZYDIS_MNEMONIC_MOVSQ:
// LODS
case ZYDIS_MNEMONIC_LODSB:
case ZYDIS_MNEMONIC_LODSW:
case ZYDIS_MNEMONIC_LODSD:
case ZYDIS_MNEMONIC_LODSQ:
// STOS
case ZYDIS_MNEMONIC_STOSB:
case ZYDIS_MNEMONIC_STOSW:
case ZYDIS_MNEMONIC_STOSD:
case ZYDIS_MNEMONIC_STOSQ:
// CMPS
case ZYDIS_MNEMONIC_CMPSB:
case ZYDIS_MNEMONIC_CMPSW:
case ZYDIS_MNEMONIC_CMPSD:
case ZYDIS_MNEMONIC_SCAS:
case ZYDIS_MNEMONIC_CMPSQ:
// SCAS
case ZYDIS_MNEMONIC_SCASB:
case ZYDIS_MNEMONIC_SCASW:
case ZYDIS_MNEMONIC_SCASD:
case ZYDIS_MNEMONIC_SCASQ:
return (info.attributes & (ZYDIS_ATTRIB_HAS_REP | ZYDIS_ATTRIB_HAS_REPZ | ZYDIS_ATTRIB_HAS_REPNZ)) != 0;
}
return false;
@ -47,14 +67,17 @@ namespace GleeBug
unsigned char data[16];
if(MemReadSafe(gip, data, sizeof(data)))
{
ZydisInstructionInfo info;
memset(&info, 0, sizeof(info));
auto mode = GleeArchValue(ZYDIS_OPERATING_MODE_32BIT, ZYDIS_OPERATING_MODE_64BIT);
auto status = ZydisDecode(mode, data, sizeof(data), gip, &info);
auto stepOver = false;
if(ZYDIS_SUCCESS(status))
ZydisDisassembledInstruction instruction;
if(ZYAN_SUCCESS(ZydisDisassembleIntel(
GleeArchValue(ZYDIS_MACHINE_MODE_LONG_64, ZYDIS_MACHINE_MODE_LONG_COMPAT_32),
gip,
data,
sizeof(data),
&instruction
)))
{
switch(info.mnemonic)
bool stepOver = false;
switch(instruction.info.mnemonic)
{
case ZYDIS_MNEMONIC_CALL:
case ZYDIS_MNEMONIC_PUSHF:
@ -63,11 +86,21 @@ namespace GleeBug
stepOver = true;
break;
default:
stepOver = IsRepeated(info);
stepOver = IsRepeated(instruction.info);
break;
}
}
if(stepOver)
{
SetBreakpoint(gip + instruction.info.length, [cbStep](const BreakpointInfo & info)
{
cbStep();
}, true, SoftwareType::ShortInt3);
return;
}
}
}
thread->StepInto(cbStep);
}
{
SetBreakpoint(gip + info.length, [cbStep](const BreakpointInfo & info)
{

View File

@ -68,22 +68,22 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>$(ProjectDir)..\bin\$(Configuration)\x32\</OutDir>
<TargetExt>.lib</TargetExt>
<IncludePath>$(ProjectDir)..;$(ProjectDir)zyan-disassembler-engine\include;$(IncludePath)</IncludePath>
<IncludePath>$(ProjectDir)..;$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>$(ProjectDir)..\bin\$(Configuration)\x64\</OutDir>
<TargetExt>.lib</TargetExt>
<IncludePath>$(ProjectDir)..;$(ProjectDir)zyan-disassembler-engine\include;$(IncludePath)</IncludePath>
<IncludePath>$(ProjectDir)..;$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>$(ProjectDir)..\bin\$(Configuration)\x32\</OutDir>
<TargetExt>.lib</TargetExt>
<IncludePath>$(ProjectDir)..;$(ProjectDir)zyan-disassembler-engine\include;$(IncludePath)</IncludePath>
<IncludePath>$(ProjectDir)..;$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(ProjectDir)..\bin\$(Configuration)\x64\</OutDir>
<TargetExt>.lib</TargetExt>
<IncludePath>$(ProjectDir)..;$(ProjectDir)zyan-disassembler-engine\include;$(IncludePath)</IncludePath>
<IncludePath>$(ProjectDir)..;$(IncludePath)</IncludePath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
@ -176,18 +176,7 @@
<ClCompile Include="Static.Pattern.cpp" />
<ClCompile Include="Static.Pe.cpp" />
<ClCompile Include="stringutils.cpp" />
<ClCompile Include="zyan-disassembler-engine\src\Decoder.c" />
<ClCompile Include="zyan-disassembler-engine\src\Formatter.c">
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_CRT_SECURE_NO_WARNINGS;_USING_V110_SDK71_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_CRT_SECURE_NO_WARNINGS;_USING_V110_SDK71_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">_CRT_SECURE_NO_WARNINGS;_USING_V110_SDK71_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">_CRT_SECURE_NO_WARNINGS;_USING_V110_SDK71_;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ClCompile Include="zyan-disassembler-engine\src\InstructionTable.c" />
<ClCompile Include="zyan-disassembler-engine\src\Mnemonic.c" />
<ClCompile Include="zyan-disassembler-engine\src\Register.c" />
<ClCompile Include="zyan-disassembler-engine\src\Utils.c" />
<ClCompile Include="zyan-disassembler-engine\src\Zydis.c" />
<ClCompile Include="Zydis\Zydis.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="Debugger.Breakpoint.h" />
@ -211,25 +200,7 @@
<ClInclude Include="Static.Pe.Section.h" />
<ClInclude Include="Static.Region.h" />
<ClInclude Include="stringutils.h" />
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Decoder.h" />
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Defines.h" />
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Formatter.h" />
<ClInclude Include="zyan-disassembler-engine\include\Zydis\InstructionInfo.h" />
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Internal\InstructionTable.h" />
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Mnemonic.h" />
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Register.h" />
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Status.h" />
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Types.h" />
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Utils.h" />
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Zydis.h" />
</ItemGroup>
<ItemGroup>
<None Include="zyan-disassembler-engine\include\Zydis\Internal\GeneratedTypes.inc" />
<None Include="zyan-disassembler-engine\include\Zydis\Internal\InstructionDefinitions.inc" />
<None Include="zyan-disassembler-engine\include\Zydis\Internal\InstructionFilters.inc" />
<None Include="zyan-disassembler-engine\include\Zydis\Internal\MnemonicDefines.inc" />
<None Include="zyan-disassembler-engine\include\Zydis\Internal\MnemonicStrings.inc" />
<None Include="zyan-disassembler-engine\include\Zydis\Internal\OperandDefinitions.inc" />
<ClInclude Include="Zydis\Zydis.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">

View File

@ -10,13 +10,10 @@
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Source Files\Zydis">
<UniqueIdentifier>{087a6721-6324-4dd6-94f3-8cf8ec131db6}</UniqueIdentifier>
<UniqueIdentifier>{c334ecd8-b526-42dd-aa95-8eb0acdb8892}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\Zydis">
<UniqueIdentifier>{a3b02551-ba19-40b2-a117-90b9f44d3dcd}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\Zydis\Internal">
<UniqueIdentifier>{2bc2d721-bce0-440e-947e-e74497e76fa6}</UniqueIdentifier>
<UniqueIdentifier>{3108807c-0904-48ba-99db-88d28ee6dbd8}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
@ -83,30 +80,12 @@
<ClCompile Include="Static.Pattern.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="zyan-disassembler-engine\src\Decoder.c">
<Filter>Source Files\Zydis</Filter>
</ClCompile>
<ClCompile Include="zyan-disassembler-engine\src\Formatter.c">
<Filter>Source Files\Zydis</Filter>
</ClCompile>
<ClCompile Include="zyan-disassembler-engine\src\InstructionTable.c">
<Filter>Source Files\Zydis</Filter>
</ClCompile>
<ClCompile Include="zyan-disassembler-engine\src\Mnemonic.c">
<Filter>Source Files\Zydis</Filter>
</ClCompile>
<ClCompile Include="zyan-disassembler-engine\src\Register.c">
<Filter>Source Files\Zydis</Filter>
</ClCompile>
<ClCompile Include="zyan-disassembler-engine\src\Utils.c">
<Filter>Source Files\Zydis</Filter>
</ClCompile>
<ClCompile Include="zyan-disassembler-engine\src\Zydis.c">
<Filter>Source Files\Zydis</Filter>
</ClCompile>
<ClCompile Include="stringutils.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Zydis\Zydis.c">
<Filter>Source Files\Zydis</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Debugger.h">
@ -160,39 +139,6 @@
<ClInclude Include="Static.Pattern.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Internal\InstructionTable.h">
<Filter>Header Files\Zydis\Internal</Filter>
</ClInclude>
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Decoder.h">
<Filter>Header Files\Zydis</Filter>
</ClInclude>
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Defines.h">
<Filter>Header Files\Zydis</Filter>
</ClInclude>
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Formatter.h">
<Filter>Header Files\Zydis</Filter>
</ClInclude>
<ClInclude Include="zyan-disassembler-engine\include\Zydis\InstructionInfo.h">
<Filter>Header Files\Zydis</Filter>
</ClInclude>
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Mnemonic.h">
<Filter>Header Files\Zydis</Filter>
</ClInclude>
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Register.h">
<Filter>Header Files\Zydis</Filter>
</ClInclude>
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Status.h">
<Filter>Header Files\Zydis</Filter>
</ClInclude>
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Types.h">
<Filter>Header Files\Zydis</Filter>
</ClInclude>
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Utils.h">
<Filter>Header Files\Zydis</Filter>
</ClInclude>
<ClInclude Include="zyan-disassembler-engine\include\Zydis\Zydis.h">
<Filter>Header Files\Zydis</Filter>
</ClInclude>
<ClInclude Include="oprintf.h">
<Filter>Header Files</Filter>
</ClInclude>
@ -205,25 +151,8 @@
<ClInclude Include="ntdll.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="zyan-disassembler-engine\include\Zydis\Internal\GeneratedTypes.inc">
<Filter>Header Files\Zydis\Internal</Filter>
</None>
<None Include="zyan-disassembler-engine\include\Zydis\Internal\InstructionDefinitions.inc">
<Filter>Header Files\Zydis\Internal</Filter>
</None>
<None Include="zyan-disassembler-engine\include\Zydis\Internal\InstructionFilters.inc">
<Filter>Header Files\Zydis\Internal</Filter>
</None>
<None Include="zyan-disassembler-engine\include\Zydis\Internal\MnemonicDefines.inc">
<Filter>Header Files\Zydis\Internal</Filter>
</None>
<None Include="zyan-disassembler-engine\include\Zydis\Internal\MnemonicStrings.inc">
<Filter>Header Files\Zydis\Internal</Filter>
</None>
<None Include="zyan-disassembler-engine\include\Zydis\Internal\OperandDefinitions.inc">
<Filter>Header Files\Zydis\Internal</Filter>
</None>
<ClInclude Include="Zydis\Zydis.h">
<Filter>Header Files\Zydis</Filter>
</ClInclude>
</ItemGroup>
</Project>

54289
GleeBug/Zydis/Zydis.c Normal file

File diff suppressed because one or more lines are too long

11884
GleeBug/Zydis/Zydis.h Normal file

File diff suppressed because it is too large Load Diff

@ -1 +0,0 @@
Subproject commit d3192a8be7f95f9b6bb040e558e4b4a7e10509a6

View File

@ -1,41 +0,0 @@
#ifndef ZYDIS_EXPORT_H
#define ZYDIS_EXPORT_H
#ifdef ZYDIS_STATIC_DEFINE
# define ZYDIS_EXPORT
# define ZYDIS_NO_EXPORT
#else
# ifndef ZYDIS_EXPORT
# ifdef Zydis_EXPORTS
/* We are building this library */
# define ZYDIS_EXPORT
# else
/* We are using this library */
# define ZYDIS_EXPORT
# endif
# endif
# ifndef ZYDIS_NO_EXPORT
# define ZYDIS_NO_EXPORT
# endif
#endif
#ifndef ZYDIS_DEPRECATED
# define ZYDIS_DEPRECATED __declspec(deprecated)
#endif
#ifndef ZYDIS_DEPRECATED_EXPORT
# define ZYDIS_DEPRECATED_EXPORT ZYDIS_EXPORT ZYDIS_DEPRECATED
#endif
#ifndef ZYDIS_DEPRECATED_NO_EXPORT
# define ZYDIS_DEPRECATED_NO_EXPORT ZYDIS_NO_EXPORT ZYDIS_DEPRECATED
#endif
#if 0 /* DEFINE_NO_DEPRECATED */
# ifndef ZYDIS_NO_DEPRECATED
# define ZYDIS_NO_DEPRECATED
# endif
#endif
#endif