mirror of
https://github.com/RGBCube/serenity
synced 2025-05-28 14:05:09 +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:
parent
6bb1505902
commit
5ee85aaa5d
1 changed files with 20 additions and 1 deletions
|
@ -130,7 +130,26 @@ ErrorOr<int> serenity_main(Main::Arguments args)
|
||||||
is_first_symbol = false;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue