Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
emoon committed Mar 31, 2024
1 parent 217602d commit 77a715e
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 27 deletions.
96 changes: 69 additions & 27 deletions src/debugger/disassembly_view.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@
#include "memory.h"
#include "newcpu.h"

static SelectedRegisters s_selected_registers;

static uint32_t s_colors[] = {
0xffb27474, 0xffb28050, 0xffa9b250, 0xff60b250,
0xff4fb292, 0xff4f71b2, 0xff8850b2, 0xffb25091,
};

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

struct DisassemblyView {
csh capstone;
};
Expand Down Expand Up @@ -40,42 +49,28 @@ static void draw_disassembly(DisassemblyView* self) {
cs_insn* insn = nullptr;
size_t count = cs_disasm(self->capstone, pc_addr - offset, count_bytes, start_disasm, 0, &insn);

int color_index = 0;

for (size_t j = 0; j < count; j++) {
cs_detail* detail = insn[j].detail;

printf("--------------------------------------------------------\n");

printf("%08llxx %s %s\n", insn[j].address, insn[j].mnemonic, insn[j].op_str);
printf(" read offsets registers: ");

for (int i = 0; i < detail->regs_read_string_count; i++) {
RegisterStringInfo* reg = &detail->regs_read_string_info[i];
printf(" %d %d %d |", reg->offset, reg->length, reg->type);
}

printf("\n");
printf(" write offsets registers:");

for (int i = 0; i < detail->regs_write_string_count; i++) {
RegisterStringInfo* reg = &detail->regs_write_string_info[i];
printf(" %d %d %d | \n", reg->offset, reg->length, reg->type);

if (insn[j].address == pc) {
continue;
}

printf("\n");
printf(" read registers: ");

for (int i = 0; i < detail->regs_read_count; i++) {
printf(" %d |", detail->regs_read[i]);
int c = s_selected_registers.read_register_count++;
s_selected_registers.read_registers[c] = detail->regs_read[i];
s_selected_registers.read_registers_colors[c] = s_colors[color_index & 7];
color_index++;
}

printf("\n");
printf(" write registers: ");

for (int i = 0; i < detail->regs_write_count; i++) {
printf(" %d |", detail->regs_write[i]);
int c = s_selected_registers.write_register_count++;
s_selected_registers.write_registers[c] = detail->regs_write[i];
s_selected_registers.write_register_colors[c] = s_colors[color_index & 7];
color_index++;
}

printf("\n");
}

int max_instruction_width = 20;
Expand Down Expand Up @@ -128,6 +123,11 @@ static void draw_disassembly(DisassemblyView* self) {
strcpy(buffer + max_instruction_width, insn[j].op_str);

ImGui::Text("%s", buffer);

//ImDrawList* draw_list = ImGui::GetWindowDrawList();
//ImVec2 p = ImGui::GetCursorScreenPos();
//AddRect

ImGui::TableNextColumn();
}

Expand Down Expand Up @@ -165,3 +165,45 @@ void DisassemblyView_update(DisassemblyView* self, const char* name) {
ImGui::End();
}


/*
for (size_t j = 0; j < count; j++) {
cs_detail* detail = insn[j].detail;
printf("--------------------------------------------------------\n");
printf("%08llxx %s %s\n", insn[j].address, insn[j].mnemonic, insn[j].op_str);
printf(" read offsets registers: ");
for (int i = 0; i < detail->regs_read_string_count; i++) {
RegisterStringInfo* reg = &detail->regs_read_string_info[i];
printf(" %d %d %d |", reg->offset, reg->length, reg->type);
}
printf("\n");
printf(" write offsets registers:");
for (int i = 0; i < detail->regs_write_string_count; i++) {
RegisterStringInfo* reg = &detail->regs_write_string_info[i];
printf(" %d %d %d | \n", reg->offset, reg->length, reg->type);
}
printf("\n");
printf(" read registers: ");
for (int i = 0; i < detail->regs_read_count; i++) {
printf(" %d |", detail->regs_read[i]);
}
printf("\n");
printf(" write registers: ");
for (int i = 0; i < detail->regs_write_count; i++) {
printf(" %d |", detail->regs_write[i]);
}
printf("\n");
}
*/


10 changes: 10 additions & 0 deletions src/debugger/disassembly_view.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,18 @@

#include <capstone/capstone.h>

struct SelectedRegisters {
uint32_t read_registers_colors[64];
uint32_t write_register_colors[64];
uint8_t read_registers[64];
uint8_t write_registers[64];
uint8_t read_register_count;
uint8_t write_register_count;
};

struct DisassemblyView;

DisassemblyView* DisassemblyView_create(csh capstone);
SelectedRegisters* DisassemblyView_get_selected_registers(DisassemblyView* self);
void DisassemblyView_update(DisassemblyView* self, const char* name);
void DisassemblyView_destroy(DisassemblyView* self);

0 comments on commit 77a715e

Please sign in to comment.