2024-09-07 18:00:09 +06:00
|
|
|
#pragma once
|
2024-09-08 21:39:04 +06:00
|
|
|
#include <dis-asm.h>
|
2024-09-09 03:10:53 +06:00
|
|
|
#include <ppc.h>
|
2024-09-07 18:00:09 +06:00
|
|
|
|
|
|
|
namespace ppc
|
|
|
|
{
|
2024-09-08 21:39:04 +06:00
|
|
|
struct DisassemblerEngine
|
2024-09-07 18:21:08 +06:00
|
|
|
{
|
2024-09-08 21:39:04 +06:00
|
|
|
disassemble_info info{};
|
|
|
|
DisassemblerEngine(const DisassemblerEngine&) = default;
|
|
|
|
DisassemblerEngine& operator=(const DisassemblerEngine&) = delete;
|
2024-09-07 18:00:09 +06:00
|
|
|
|
2024-09-08 21:39:04 +06:00
|
|
|
DisassemblerEngine(bfd_endian endian, const char* options);
|
|
|
|
~DisassemblerEngine() = default;
|
2024-09-07 22:56:20 +06:00
|
|
|
|
2024-09-08 21:39:04 +06:00
|
|
|
/**
|
|
|
|
* \return Numbers of bytes decoded
|
|
|
|
*/
|
|
|
|
int Disassemble(const void* code, size_t size, uint64_t base, ppc_insn& out);
|
|
|
|
};
|
|
|
|
|
|
|
|
thread_local extern DisassemblerEngine gBigEndianDisassembler;
|
2024-09-07 22:56:20 +06:00
|
|
|
|
2024-09-08 21:39:04 +06:00
|
|
|
static int Disassemble(const void* code, size_t size, uint64_t base, ppc_insn& out)
|
2024-09-07 18:21:08 +06:00
|
|
|
{
|
2024-09-08 21:39:04 +06:00
|
|
|
return gBigEndianDisassembler.Disassemble(code, size, base, out);
|
2024-09-07 18:21:08 +06:00
|
|
|
}
|
2024-09-09 01:30:45 +06:00
|
|
|
|
|
|
|
static int Disassemble(const void* code, uint64_t base, ppc_insn& out)
|
|
|
|
{
|
|
|
|
return Disassemble(code, 4, base, out);
|
|
|
|
}
|
2024-09-08 21:39:04 +06:00
|
|
|
}
|