Initial work for comment detail in debugger
This commit is contained in:
@@ -5,6 +5,11 @@
|
||||
#include <array>
|
||||
|
||||
struct Disassembler {
|
||||
struct CommentPart {
|
||||
std::string str;
|
||||
u64 resolvedAddr = 0xFFFF'FFFF'FFFF'FFFFull;
|
||||
};
|
||||
|
||||
struct DisassemblyResult {
|
||||
bool success = false;
|
||||
std::string full;
|
||||
@@ -15,7 +20,23 @@ struct Disassembler {
|
||||
std::string str;
|
||||
};
|
||||
std::array<Operand, 3> ops{};
|
||||
std::string comment;
|
||||
std::array<CommentPart, 3> comment{};
|
||||
std::string GetFormattedComment() {
|
||||
std::string res{};
|
||||
for(auto& [str, _] : comment) {
|
||||
res += str;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
u64 GetResolvedAddressFromComment() {
|
||||
auto it = std::ranges::find_if(comment, [](auto& part) {
|
||||
return part.resolvedAddr != 0xFFFF'FFFF'FFFF'FFFFull;
|
||||
});
|
||||
|
||||
if(it == comment.end()) return 0xFFFF'FFFF'FFFF'FFFFull;
|
||||
return it->resolvedAddr;
|
||||
}
|
||||
};
|
||||
|
||||
~Disassembler() { cs_close(&handle); }
|
||||
@@ -24,13 +45,13 @@ struct Disassembler {
|
||||
static Disassembler ret(rsp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
[[nodiscard]] DisassemblyResult Disassemble(const u32 address) const;
|
||||
[[nodiscard]] DisassemblyResult DisassembleDetailed(u32 address, u32 instruction) const;
|
||||
[[nodiscard]] DisassemblyResult DisassembleSimple(u32 address, u32 instruction) const;
|
||||
private:
|
||||
std::string CapstoneToRegValue(mips_reg reg) const;
|
||||
template <typename T>
|
||||
T CapstoneToRegValue(mips_reg reg) const;
|
||||
explicit Disassembler(const bool rsp) : rsp(rsp) {
|
||||
if (cs_open(CS_ARCH_MIPS, static_cast<cs_mode>((rsp ? CS_MODE_32 : CS_MODE_64) | CS_MODE_BIG_ENDIAN), &handle) !=
|
||||
CS_ERR_OK) {
|
||||
|
||||
Reference in New Issue
Block a user