summaryrefslogtreecommitdiff
path: root/disasm.cpp
diff options
context:
space:
mode:
authorOxore <oxore@protonmail.com>2023-05-01 01:26:44 +0300
committerOxore <oxore@protonmail.com>2023-05-01 01:26:44 +0300
commitd38bdcabf534e2c639299f3a8fff8b9e048bbaf4 (patch)
treec0526c190a2baa738366ae9ad8cafb448fa82d16 /disasm.cpp
parent7e7e4a42229094c654ac23f71ca800e62aec1708 (diff)
Fix Bcc
Diffstat (limited to 'disasm.cpp')
-rw-r--r--disasm.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/disasm.cpp b/disasm.cpp
index 2ca0491..df7f16a 100644
--- a/disasm.cpp
+++ b/disasm.cpp
@@ -513,6 +513,10 @@ static void disasm_bra_bsr_bcc(
}
const char suffix = dispmt ? 's' : 'w';
if (dispmt == 0) {
+ // Check the boundaries
+ if (node.offset + kInstructionSizeStepBytes >= code.occupied_size) {
+ return disasm_verbatim(node, instr, code, s);
+ }
dispmt = GetI16BE(code.buffer + node.offset + kInstructionSizeStepBytes);
if (dispmt % kInstructionSizeStepBytes) {
return disasm_verbatim(node, instr, code, s);
@@ -584,7 +588,7 @@ static void disasm_move_movea(
src.SNPrint(src_str, sizeof(src_str));
dst.SNPrint(dst_str, sizeof(dst_str));
const char *mnemonic = dst.mode == AddrMode::kAn ? "movea" : "move";
- snprintf(node.mnemonic, kMarkBufferSize, "%s%c", mnemonic, suffix);
+ snprintf(node.mnemonic, kMnemonicBufferSize, "%s%c", mnemonic, suffix);
snprintf(node.arguments, kArgsBufferSize, "%s,%s", src_str, dst_str);
node.size = kInstructionSizeStepBytes + src.Size() + dst.Size();
}