From 7e986cbc15f1cc4e506642ae15d9b0ad47c4520f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Tue, 3 Dec 2024 21:49:13 +0100 Subject: [PATCH 1/3] Attempt to disassemblify invalid instructions. --- src/components/ProgramLoader/BinaryFileUpload.tsx | 2 +- src/components/ProgramLoader/Loader.tsx | 4 +--- src/packages/pvm/pvm/disassemblify.ts | 8 ++++++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/components/ProgramLoader/BinaryFileUpload.tsx b/src/components/ProgramLoader/BinaryFileUpload.tsx index 648f7ef..ca62f13 100644 --- a/src/components/ProgramLoader/BinaryFileUpload.tsx +++ b/src/components/ProgramLoader/BinaryFileUpload.tsx @@ -49,7 +49,7 @@ export const BinaryFileUpload = ({ className="my-6 mr-3" id="test-file" type="file" - accept="application/octet-stream" + accept="application/octet-stream,*.bin,*.pvm" onClick={(e) => e.stopPropagation()} onChange={(e) => { if (e.target.files?.length) { diff --git a/src/components/ProgramLoader/Loader.tsx b/src/components/ProgramLoader/Loader.tsx index 5936f58..6c5ca05 100644 --- a/src/components/ProgramLoader/Loader.tsx +++ b/src/components/ProgramLoader/Loader.tsx @@ -56,9 +56,7 @@ export const Loader = ({ JSON tests Examples - - RAW bytecode - + RAW bytecode Assembly
diff --git a/src/packages/pvm/pvm/disassemblify.ts b/src/packages/pvm/pvm/disassemblify.ts index cb51b11..665af25 100644 --- a/src/packages/pvm/pvm/disassemblify.ts +++ b/src/packages/pvm/pvm/disassemblify.ts @@ -5,6 +5,7 @@ import { ArgsDecoder, instructionArgumentTypeMap, createResults, + ArgumentType, } from "@typeberry/pvm-debugger-adapter"; import { Instruction } from "./instruction"; @@ -20,7 +21,10 @@ export function disassemblify(rawProgram: Uint8Array) { while (i < code.length) { const currentInstruction = code[i]; - const argumentType = instructionArgumentTypeMap[currentInstruction]; + const isValidInstruction = currentInstruction < instructionArgumentTypeMap.length; + const argumentType = isValidInstruction + ? instructionArgumentTypeMap[currentInstruction] + : ArgumentType.NO_ARGUMENTS; const args = createResults()[argumentType]; try { @@ -41,7 +45,7 @@ export function disassemblify(rawProgram: Uint8Array) { const currentInstructionDebug = { instructionCode: currentInstruction, ...byteToOpCodeMap[currentInstruction], - name: Instruction[currentInstruction], + name: isValidInstruction ? Instruction[currentInstruction] : `INVALID(${currentInstruction})`, instructionBytes: code.slice(i - (args.noOfBytesToSkip ?? 0), i), address, args, From 0115396d7051243ffeb13fd89f922509d690d157 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Tue, 3 Dec 2024 22:42:20 +0100 Subject: [PATCH 2/3] Fix extensions. --- src/components/ProgramLoader/BinaryFileUpload.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ProgramLoader/BinaryFileUpload.tsx b/src/components/ProgramLoader/BinaryFileUpload.tsx index ca62f13..bc3dab5 100644 --- a/src/components/ProgramLoader/BinaryFileUpload.tsx +++ b/src/components/ProgramLoader/BinaryFileUpload.tsx @@ -49,7 +49,7 @@ export const BinaryFileUpload = ({ className="my-6 mr-3" id="test-file" type="file" - accept="application/octet-stream,*.bin,*.pvm" + accept=".bin,.pvm" onClick={(e) => e.stopPropagation()} onChange={(e) => { if (e.target.files?.length) { From 3ed5d868fbc39dd5bb4e0027a2aa55418a3135a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomek=20Drwi=C4=99ga?= Date: Thu, 5 Dec 2024 09:31:59 +0100 Subject: [PATCH 3/3] Update src/packages/pvm/pvm/disassemblify.ts Co-authored-by: Mateusz Sikora --- src/packages/pvm/pvm/disassemblify.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/packages/pvm/pvm/disassemblify.ts b/src/packages/pvm/pvm/disassemblify.ts index 665af25..17896b4 100644 --- a/src/packages/pvm/pvm/disassemblify.ts +++ b/src/packages/pvm/pvm/disassemblify.ts @@ -21,7 +21,7 @@ export function disassemblify(rawProgram: Uint8Array) { while (i < code.length) { const currentInstruction = code[i]; - const isValidInstruction = currentInstruction < instructionArgumentTypeMap.length; + const isValidInstruction = Instruction[currentInstruction] !== undefined; const argumentType = isValidInstruction ? instructionArgumentTypeMap[currentInstruction] : ArgumentType.NO_ARGUMENTS;