From ed1ac1e46fb0bace5ee8241a8a966f37cf4c5061 Mon Sep 17 00:00:00 2001 From: Dan <46821332+nsadeveloper789@users.noreply.github.com> Date: Wed, 16 Nov 2022 13:02:49 -0500 Subject: [PATCH] GP-2789: Fix parsing of unsigned 64-bit immediates in assembler (Closes #4688) --- .../sleigh/symbol/AssemblyNumericTerminal.java | 2 +- .../app/plugin/assembler/sleigh/x64AssemblyTest.java | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/symbol/AssemblyNumericTerminal.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/symbol/AssemblyNumericTerminal.java index 66cb66ed0e..962f37ab2a 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/symbol/AssemblyNumericTerminal.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/symbol/AssemblyNumericTerminal.java @@ -183,7 +183,7 @@ public class AssemblyNumericTerminal extends AssemblyTerminal { return Collections.emptySet(); } try { - long val = Long.parseLong(num, radix); + long val = Long.parseUnsignedLong(num, radix); if (neg) { val = -val; } diff --git a/Ghidra/Framework/SoftwareModeling/src/test/java/ghidra/app/plugin/assembler/sleigh/x64AssemblyTest.java b/Ghidra/Framework/SoftwareModeling/src/test/java/ghidra/app/plugin/assembler/sleigh/x64AssemblyTest.java index 569a820f70..31c03fd1bf 100644 --- a/Ghidra/Framework/SoftwareModeling/src/test/java/ghidra/app/plugin/assembler/sleigh/x64AssemblyTest.java +++ b/Ghidra/Framework/SoftwareModeling/src/test/java/ghidra/app/plugin/assembler/sleigh/x64AssemblyTest.java @@ -186,6 +186,17 @@ public class x64AssemblyTest extends AbstractAssemblyTest { assertOneCompatRestExact("MOV RCX,qword ptr [R12]", "49:8b:0c:24"); } + @Test + public void testAssemble_MOV_RDX_0xffffffffffffffff() { + assertOneCompatRestExact("MOV RDX,0xffffffffffffffff", "48:ba:ff:ff:ff:ff:ff:ff:ff:ff", + "MOV RDX,-0x1"); + } + + @Test + public void testAssemble_MOV_RDX_n1() { + assertOneCompatRestExact("MOV RDX,-0x1", "48:ba:ff:ff:ff:ff:ff:ff:ff:ff"); + } + @Test public void testAssemble_MOV_mRBXm_R14W() { /*