Example of Capstone for both libxenia and the UI. Going to shuffle around.

This commit is contained in:
Ben Vanik
2015-06-10 23:31:19 -07:00
parent 8ca2b17e51
commit 6d4d1db310
16 changed files with 751 additions and 8 deletions

View File

@@ -0,0 +1,140 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{5AE85790-F2EA-4077-8953-825E9C0AADE9}</ProjectGuid>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<Keyword>ManagedCProj</Keyword>
<RootNamespace>XeniaDebugNative</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CLRSupport>true</CLRSupport>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset>
<CLRSupport>true</CLRSupport>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\build\Xenia.Cpp.x64.Common.props" />
<Import Project="..\..\build\Xenia.Cpp.x64.Debug.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\build\Xenia.Cpp.x64.Common.props" />
<Import Project="..\..\build\Xenia.Cpp.x64.Release.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level2</WarningLevel>
<Optimization>Disabled</Optimization>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<CompileAs>CompileAsCpp</CompileAs>
<AdditionalIncludeDirectories>$(SolutionDir)\third_party\capstone\include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>
</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level2</WarningLevel>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<CompileAs>CompileAsCpp</CompileAs>
<AdditionalIncludeDirectories>$(SolutionDir)\third_party\capstone\include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<RuntimeLibrary>
</RuntimeLibrary>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>
</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\third_party\capstone\arch\X86\X86BaseInfo.h" />
<ClInclude Include="..\..\third_party\capstone\arch\X86\X86Disassembler.h" />
<ClInclude Include="..\..\third_party\capstone\arch\X86\X86DisassemblerDecoder.h" />
<ClInclude Include="..\..\third_party\capstone\arch\X86\X86DisassemblerDecoderCommon.h" />
<ClInclude Include="..\..\third_party\capstone\arch\X86\X86InstPrinter.h" />
<ClInclude Include="..\..\third_party\capstone\arch\X86\X86Mapping.h" />
<ClInclude Include="..\..\third_party\capstone\cs_priv.h" />
<ClInclude Include="..\..\third_party\capstone\include\capstone.h" />
<ClInclude Include="..\..\third_party\capstone\include\platform.h" />
<ClInclude Include="..\..\third_party\capstone\include\x86.h" />
<ClInclude Include="..\..\third_party\capstone\LEB128.h" />
<ClInclude Include="..\..\third_party\capstone\MathExtras.h" />
<ClInclude Include="..\..\third_party\capstone\MCDisassembler.h" />
<ClInclude Include="..\..\third_party\capstone\MCFixedLenDisassembler.h" />
<ClInclude Include="..\..\third_party\capstone\MCInst.h" />
<ClInclude Include="..\..\third_party\capstone\MCInstrDesc.h" />
<ClInclude Include="..\..\third_party\capstone\MCRegisterInfo.h" />
<ClInclude Include="..\..\third_party\capstone\myinttypes.h" />
<ClInclude Include="..\..\third_party\capstone\SStream.h" />
<ClInclude Include="..\..\third_party\capstone\utils.h" />
<ClInclude Include="x64_disassembler.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\third_party\capstone\arch\X86\X86Disassembler.c" />
<ClCompile Include="..\..\third_party\capstone\arch\X86\X86DisassemblerDecoder.c" />
<ClCompile Include="..\..\third_party\capstone\arch\X86\X86IntelInstPrinter.c" />
<ClCompile Include="..\..\third_party\capstone\arch\X86\X86Mapping.c" />
<ClCompile Include="..\..\third_party\capstone\arch\X86\X86Module.c" />
<ClCompile Include="..\..\third_party\capstone\cs.c" />
<ClCompile Include="..\..\third_party\capstone\MCInst.c" />
<ClCompile Include="..\..\third_party\capstone\MCInstrDesc.c" />
<ClCompile Include="..\..\third_party\capstone\MCRegisterInfo.c" />
<ClCompile Include="..\..\third_party\capstone\SStream.c" />
<ClCompile Include="..\..\third_party\capstone\utils.c" />
<ClCompile Include="assembly_info.cc" />
<ClCompile Include="x64_disassembler.cc" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\third_party\capstone\arch\X86\X86GenAsmWriter.inc" />
<None Include="..\..\third_party\capstone\arch\X86\X86GenAsmWriter1.inc" />
<None Include="..\..\third_party\capstone\arch\X86\X86GenAsmWriter1_reduce.inc" />
<None Include="..\..\third_party\capstone\arch\X86\X86GenAsmWriter_reduce.inc" />
<None Include="..\..\third_party\capstone\arch\X86\X86GenDisassemblerTables.inc" />
<None Include="..\..\third_party\capstone\arch\X86\X86GenDisassemblerTables_reduce.inc" />
<None Include="..\..\third_party\capstone\arch\X86\X86GenInstrInfo.inc" />
<None Include="..\..\third_party\capstone\arch\X86\X86GenInstrInfo_reduce.inc" />
<None Include="..\..\third_party\capstone\arch\X86\X86GenRegisterInfo.inc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@@ -0,0 +1,170 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="third_party">
<UniqueIdentifier>{f0462696-4abd-4dc9-8290-aafff5ca6158}</UniqueIdentifier>
</Filter>
<Filter Include="src">
<UniqueIdentifier>{1a3b1c52-32cb-477e-9008-f2f9a6171c8c}</UniqueIdentifier>
</Filter>
<Filter Include="src\xenia">
<UniqueIdentifier>{5fb51b29-2462-49de-89c1-e332aafa0ca9}</UniqueIdentifier>
</Filter>
<Filter Include="src\xenia\debug">
<UniqueIdentifier>{15585f2e-55a4-4af5-bb24-6d6649d74ed0}</UniqueIdentifier>
</Filter>
<Filter Include="third_party\capstone">
<UniqueIdentifier>{920bc92f-e430-4c48-86dd-1a697c9a5fd1}</UniqueIdentifier>
</Filter>
<Filter Include="third_party\capstone\include">
<UniqueIdentifier>{d26b9a34-94fd-493b-841e-2ae2561bc584}</UniqueIdentifier>
</Filter>
<Filter Include="third_party\capstone\arch">
<UniqueIdentifier>{c9adeb1a-189d-4877-9bbd-c9948401b63e}</UniqueIdentifier>
</Filter>
<Filter Include="third_party\capstone\arch\X86">
<UniqueIdentifier>{4e8ea226-a18e-413a-95bd-6b3e5f4f8460}</UniqueIdentifier>
</Filter>
<Filter Include="src\Xenia.Debug.Native">
<UniqueIdentifier>{fc34f72d-e3c6-4fe7-9645-7b422ffaad57}</UniqueIdentifier>
</Filter>
<Filter Include="src\xenia\debug\native">
<UniqueIdentifier>{e530b0a2-9f4a-4b85-aee8-7185042251b1}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\third_party\capstone\cs_priv.h">
<Filter>third_party\capstone</Filter>
</ClInclude>
<ClInclude Include="..\..\third_party\capstone\LEB128.h">
<Filter>third_party\capstone</Filter>
</ClInclude>
<ClInclude Include="..\..\third_party\capstone\MathExtras.h">
<Filter>third_party\capstone</Filter>
</ClInclude>
<ClInclude Include="..\..\third_party\capstone\MCDisassembler.h">
<Filter>third_party\capstone</Filter>
</ClInclude>
<ClInclude Include="..\..\third_party\capstone\MCFixedLenDisassembler.h">
<Filter>third_party\capstone</Filter>
</ClInclude>
<ClInclude Include="..\..\third_party\capstone\MCInst.h">
<Filter>third_party\capstone</Filter>
</ClInclude>
<ClInclude Include="..\..\third_party\capstone\MCInstrDesc.h">
<Filter>third_party\capstone</Filter>
</ClInclude>
<ClInclude Include="..\..\third_party\capstone\MCRegisterInfo.h">
<Filter>third_party\capstone</Filter>
</ClInclude>
<ClInclude Include="..\..\third_party\capstone\myinttypes.h">
<Filter>third_party\capstone</Filter>
</ClInclude>
<ClInclude Include="..\..\third_party\capstone\SStream.h">
<Filter>third_party\capstone</Filter>
</ClInclude>
<ClInclude Include="..\..\third_party\capstone\utils.h">
<Filter>third_party\capstone</Filter>
</ClInclude>
<ClInclude Include="..\..\third_party\capstone\include\capstone.h">
<Filter>third_party\capstone\include</Filter>
</ClInclude>
<ClInclude Include="..\..\third_party\capstone\include\platform.h">
<Filter>third_party\capstone\include</Filter>
</ClInclude>
<ClInclude Include="..\..\third_party\capstone\include\x86.h">
<Filter>third_party\capstone\include</Filter>
</ClInclude>
<ClInclude Include="..\..\third_party\capstone\arch\X86\X86BaseInfo.h">
<Filter>third_party\capstone\arch\X86</Filter>
</ClInclude>
<ClInclude Include="..\..\third_party\capstone\arch\X86\X86Disassembler.h">
<Filter>third_party\capstone\arch\X86</Filter>
</ClInclude>
<ClInclude Include="..\..\third_party\capstone\arch\X86\X86DisassemblerDecoder.h">
<Filter>third_party\capstone\arch\X86</Filter>
</ClInclude>
<ClInclude Include="..\..\third_party\capstone\arch\X86\X86DisassemblerDecoderCommon.h">
<Filter>third_party\capstone\arch\X86</Filter>
</ClInclude>
<ClInclude Include="..\..\third_party\capstone\arch\X86\X86InstPrinter.h">
<Filter>third_party\capstone\arch\X86</Filter>
</ClInclude>
<ClInclude Include="..\..\third_party\capstone\arch\X86\X86Mapping.h">
<Filter>third_party\capstone\arch\X86</Filter>
</ClInclude>
<ClInclude Include="x64_disassembler.h">
<Filter>src\Xenia.Debug.Native</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\third_party\capstone\cs.c">
<Filter>third_party\capstone</Filter>
</ClCompile>
<ClCompile Include="..\..\third_party\capstone\MCInst.c">
<Filter>third_party\capstone</Filter>
</ClCompile>
<ClCompile Include="..\..\third_party\capstone\MCInstrDesc.c">
<Filter>third_party\capstone</Filter>
</ClCompile>
<ClCompile Include="..\..\third_party\capstone\MCRegisterInfo.c">
<Filter>third_party\capstone</Filter>
</ClCompile>
<ClCompile Include="..\..\third_party\capstone\SStream.c">
<Filter>third_party\capstone</Filter>
</ClCompile>
<ClCompile Include="..\..\third_party\capstone\utils.c">
<Filter>third_party\capstone</Filter>
</ClCompile>
<ClCompile Include="..\..\third_party\capstone\arch\X86\X86Disassembler.c">
<Filter>third_party\capstone\arch\X86</Filter>
</ClCompile>
<ClCompile Include="..\..\third_party\capstone\arch\X86\X86DisassemblerDecoder.c">
<Filter>third_party\capstone\arch\X86</Filter>
</ClCompile>
<ClCompile Include="..\..\third_party\capstone\arch\X86\X86IntelInstPrinter.c">
<Filter>third_party\capstone\arch\X86</Filter>
</ClCompile>
<ClCompile Include="..\..\third_party\capstone\arch\X86\X86Mapping.c">
<Filter>third_party\capstone\arch\X86</Filter>
</ClCompile>
<ClCompile Include="..\..\third_party\capstone\arch\X86\X86Module.c">
<Filter>third_party\capstone\arch\X86</Filter>
</ClCompile>
<ClCompile Include="x64_disassembler.cc">
<Filter>src\Xenia.Debug.Native</Filter>
</ClCompile>
<ClCompile Include="assembly_info.cc">
<Filter>src\Xenia.Debug.Native</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\..\third_party\capstone\arch\X86\X86GenAsmWriter.inc">
<Filter>third_party\capstone\arch\X86</Filter>
</None>
<None Include="..\..\third_party\capstone\arch\X86\X86GenAsmWriter_reduce.inc">
<Filter>third_party\capstone\arch\X86</Filter>
</None>
<None Include="..\..\third_party\capstone\arch\X86\X86GenAsmWriter1.inc">
<Filter>third_party\capstone\arch\X86</Filter>
</None>
<None Include="..\..\third_party\capstone\arch\X86\X86GenAsmWriter1_reduce.inc">
<Filter>third_party\capstone\arch\X86</Filter>
</None>
<None Include="..\..\third_party\capstone\arch\X86\X86GenDisassemblerTables.inc">
<Filter>third_party\capstone\arch\X86</Filter>
</None>
<None Include="..\..\third_party\capstone\arch\X86\X86GenDisassemblerTables_reduce.inc">
<Filter>third_party\capstone\arch\X86</Filter>
</None>
<None Include="..\..\third_party\capstone\arch\X86\X86GenInstrInfo.inc">
<Filter>third_party\capstone\arch\X86</Filter>
</None>
<None Include="..\..\third_party\capstone\arch\X86\X86GenInstrInfo_reduce.inc">
<Filter>third_party\capstone\arch\X86</Filter>
</None>
<None Include="..\..\third_party\capstone\arch\X86\X86GenRegisterInfo.inc">
<Filter>third_party\capstone\arch\X86</Filter>
</None>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,45 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2015 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
using namespace System;
using namespace System::Reflection;
using namespace System::Runtime::CompilerServices;
using namespace System::Runtime::InteropServices;
using namespace System::Security::Permissions;
//
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
//
[assembly:AssemblyTitleAttribute(L"Xenia.Debug.Native")];
[assembly:AssemblyDescriptionAttribute(L"")];
[assembly:AssemblyConfigurationAttribute(L"")];
[assembly:AssemblyCompanyAttribute(L"")];
[assembly:AssemblyProductAttribute(L"Xenia.Debug.Native")];
[assembly:AssemblyCopyrightAttribute(L"Copyright (c) Ben Vanik 2015")];
[assembly:AssemblyTrademarkAttribute(L"")];
[assembly:AssemblyCultureAttribute(L"")];
//
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the value or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly:AssemblyVersionAttribute("1.0.*")];
[assembly:ComVisible(false)];
[assembly:CLSCompliantAttribute(true)];

View File

@@ -0,0 +1,52 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2015 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "Xenia.Debug.Native/x64_disassembler.h"
#include "third_party/capstone/include/capstone.h"
#include "third_party/capstone/include/x86.h"
namespace Xenia {
namespace Debug {
namespace Native {
using namespace System;
using namespace System::Text;
X64Disassembler::X64Disassembler()
: capstone_handle_(0), string_builder_(gcnew StringBuilder(16 * 1024)) {
uintptr_t capstone_handle;
if (cs_open(CS_ARCH_X86, CS_MODE_64, &capstone_handle) != CS_ERR_OK) {
System::Diagnostics::Debug::Fail("Failed to initialize capstone");
return;
}
capstone_handle_ = capstone_handle;
cs_option(capstone_handle_, CS_OPT_SYNTAX, CS_OPT_SYNTAX_INTEL);
cs_option(capstone_handle_, CS_OPT_DETAIL, CS_OPT_OFF);
}
X64Disassembler::~X64Disassembler() {
if (capstone_handle_) {
pin_ptr<uintptr_t> capstone_handle = &capstone_handle_;
cs_close(capstone_handle);
}
}
String^ X64Disassembler::GenerateString(IntPtr code_address,
size_t code_size) {
string_builder_->Clear();
//
return string_builder_->ToString();
}
} // namespace Native
} // namespace Debug
} // namespace Xenia

View File

@@ -0,0 +1,38 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2015 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#ifndef XENIA_DEBUG_NATIVE_X64_DISASSEMBLER_H_
#define XENIA_DEBUG_NATIVE_X64_DISASSEMBLER_H_
#include <cstdint>
namespace Xenia {
namespace Debug {
namespace Native {
using namespace System;
using namespace System::Text;
public ref class X64Disassembler {
public:
X64Disassembler();
~X64Disassembler();
String^ GenerateString(IntPtr code_address, size_t code_size);
private:
uintptr_t capstone_handle_;
StringBuilder^ string_builder_;
};
} // namespace Native
} // namespace Debug
} // namespace Xenia
#endif // XENIA_DEBUG_NATIVE_X64_DISASSEMBLER_H_