1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-14 08:44:58 +00:00

disasm: Print instruction bytes

This prints 7 instruction bytes per line, which is enough for most
x86-64 instructions (rex+opcode+mod/rm+imm32) and is also what
objdump uses.

Co-authored-by: Simon Wanner <skyrising@pvpctutorials.de>
This commit is contained in:
Hendiadyoin1 2022-04-07 14:48:22 +02:00 committed by Andreas Kling
parent 6bb1505902
commit 5ee85aaa5d

View file

@ -130,7 +130,26 @@ ErrorOr<int> serenity_main(Main::Arguments args)
is_first_symbol = false;
}
outln("{:p} {}", virtual_offset, insn.value().to_string(virtual_offset, symbol_provider));
size_t length = insn.value().length();
StringBuilder builder;
builder.appendff("{: 8x}:\t", virtual_offset);
for (size_t i = 0; i < 7; i++) {
if (i < length)
builder.appendff("{:02x} ", asm_data[offset + i]);
else
builder.append(" "sv);
}
builder.append("\t"sv);
builder.append(insn.value().to_string(virtual_offset, symbol_provider));
outln("{}", builder.string_view());
for (size_t bytes_printed = 7; bytes_printed < length; bytes_printed += 7) {
builder.clear();
builder.appendff("{:p} ", virtual_offset + bytes_printed);
for (size_t i = bytes_printed; i < bytes_printed + 7 && i < length; i++)
builder.appendff(" {:02x}", asm_data[offset + i]);
outln("{}", builder.string_view());
}
}
return 0;
}