Remove capstone, use libopcodes

This commit is contained in:
Sajid
2024-09-08 21:39:04 +06:00
parent 3d6a3c61a6
commit fac30517f0
3833 changed files with 6264 additions and 2629629 deletions

View File

@@ -2,4 +2,4 @@ project("PowerUtils")
add_library(PowerUtils "disasm.h" "disasm.cpp" "file.h" "xex.cpp" "image.h" "image.cpp" "elf.h" "ppc_context.h" "symbol.h" "symbol_table.h" "section.h")
target_include_directories(PowerUtils PUBLIC .)
target_link_libraries(PowerUtils PUBLIC capstone)
target_link_libraries(PowerUtils PUBLIC disasm)

View File

@@ -1,23 +1,24 @@
#include "disasm.h"
DisassemblerEngine ppc::gPPCBigEndianDisassembler{ CS_ARCH_PPC, CS_MODE_BIG_ENDIAN };
thread_local ppc::DisassemblerEngine ppc::gBigEndianDisassembler{ BFD_ENDIAN_BIG, "cell 32"};
DisassemblerEngine::DisassemblerEngine(cs_arch arch, cs_mode mode)
ppc::DisassemblerEngine::DisassemblerEngine(bfd_endian endian, const char* options)
{
cs_open(arch, mode, &handle);
INIT_DISASSEMBLE_INFO(info, stdout, fprintf);
info.arch = bfd_arch_powerpc;
info.endian = endian;
info.disassembler_options = options;
}
size_t DisassemblerEngine::Disassemble(const uint8_t* code, size_t size, uint64_t base, size_t count, cs_insn** instructions) const
int ppc::DisassemblerEngine::Disassemble(const void* code, size_t size, uint64_t base, ppc_insn& out)
{
return cs_disasm(handle, code, size, base, count, instructions);
}
if (size < 4)
{
return 0;
}
void DisassemblerEngine::SetOption(cs_opt_type option, size_t value)
{
cs_option(handle, option, value);
}
DisassemblerEngine::~DisassemblerEngine()
{
cs_close(&handle);
info.buffer = (bfd_byte*)code;
info.buffer_vma = base;
info.buffer_length = size;
return decode_insn_ppc(base, &info, &out);
}

View File

@@ -1,43 +1,27 @@
#pragma once
#include <capstone/capstone.h>
struct DisassemblerEngine
{
csh handle{};
DisassemblerEngine(const DisassemblerEngine&) = default;
DisassemblerEngine& operator=(const DisassemblerEngine&) = delete;
DisassemblerEngine(cs_arch arch, cs_mode mode);
~DisassemblerEngine();
size_t Disassemble(const uint8_t* code, size_t size, uint64_t base, size_t count, cs_insn** instructions) const;
void SetOption(cs_opt_type option, size_t value);
void SetDetail(bool value)
{
SetOption(CS_OPT_DETAIL, value);
}
};
#include <dis-asm.h>
namespace ppc
{
extern DisassemblerEngine gPPCBigEndianDisassembler;
static size_t Disassemble(const uint8_t* code, size_t size, uint64_t base, size_t count, cs_insn** instructions)
struct DisassemblerEngine
{
return gPPCBigEndianDisassembler.Disassemble(code, size, base, count, instructions);
}
disassemble_info info{};
DisassemblerEngine(const DisassemblerEngine&) = default;
DisassemblerEngine& operator=(const DisassemblerEngine&) = delete;
static cs_insn* DisassembleSingle(const uint8_t* code, uint64_t base)
DisassemblerEngine(bfd_endian endian, const char* options);
~DisassemblerEngine() = default;
/**
* \return Numbers of bytes decoded
*/
int Disassemble(const void* code, size_t size, uint64_t base, ppc_insn& out);
};
thread_local extern DisassemblerEngine gBigEndianDisassembler;
static int Disassemble(const void* code, size_t size, uint64_t base, ppc_insn& out)
{
cs_insn* instruction{};
gPPCBigEndianDisassembler.Disassemble(code, 4, base, 1, &instruction);
return instruction;
return gBigEndianDisassembler.Disassemble(code, size, base, out);
}
static void SetDetail(bool value)
{
gPPCBigEndianDisassembler.SetDetail(value);
}
}
}