Skip to content

Commit 385520b

Browse files
authored
Diff x86 square brackets (#429)
1 parent 9c6e528 commit 385520b

4 files changed

Lines changed: 77 additions & 66 deletions

File tree

‎objdiff-core/src/arch/x86.rs‎

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ impl FormatterOutput for InstructionFormatterOutput<'_> {
458458
}
459459
}
460460
match kind {
461-
FormatterTextKind::Text | FormatterTextKind::Punctuation => {
461+
FormatterTextKind::Text => {
462462
if let Err(e) = (self.cb)(InstructionPart::basic(text)) {
463463
self.error = Some(e);
464464
}
@@ -470,6 +470,17 @@ impl FormatterOutput for InstructionFormatterOutput<'_> {
470470
self.error = Some(e);
471471
}
472472
}
473+
FormatterTextKind::Punctuation => {
474+
if text == "[" || text == "]" {
475+
if let Err(e) = (self.cb)(InstructionPart::opaque(text)) {
476+
self.error = Some(e);
477+
}
478+
} else {
479+
if let Err(e) = (self.cb)(InstructionPart::basic(text)) {
480+
self.error = Some(e);
481+
}
482+
}
483+
}
473484
_ => self.error = Some(anyhow!("x86: Unsupported FormatterTextKind {:?}", kind)),
474485
}
475486
}
@@ -624,11 +635,11 @@ mod test {
624635
InstructionPart::basic(" "),
625636
InstructionPart::opaque("ptr"),
626637
InstructionPart::basic(" "),
627-
InstructionPart::basic("["),
638+
InstructionPart::opaque("["),
628639
InstructionPart::opaque("ebp"),
629640
InstructionPart::opaque("-"),
630641
InstructionPart::signed(152i64),
631-
InstructionPart::basic("]"),
642+
InstructionPart::opaque("]"),
632643
InstructionPart::basic(","),
633644
InstructionPart::basic(" "),
634645
InstructionPart::unsigned(0u64),
@@ -669,11 +680,11 @@ mod test {
669680
InstructionPart::basic(" "),
670681
InstructionPart::opaque("ptr"),
671682
InstructionPart::basic(" "),
672-
InstructionPart::basic("["),
683+
InstructionPart::opaque("["),
673684
InstructionPart::opaque("ebp"),
674685
InstructionPart::opaque("-"),
675686
InstructionPart::signed(152i64),
676-
InstructionPart::basic("]"),
687+
InstructionPart::opaque("]"),
677688
InstructionPart::basic(","),
678689
InstructionPart::basic(" "),
679690
InstructionPart::reloc(),
@@ -713,13 +724,13 @@ mod test {
713724
InstructionPart::opaque("eax"),
714725
InstructionPart::basic(","),
715726
InstructionPart::basic(" "),
716-
InstructionPart::basic("["),
727+
InstructionPart::opaque("["),
717728
InstructionPart::opaque("eax"),
718729
InstructionPart::opaque("*"),
719730
InstructionPart::signed(4),
720731
InstructionPart::opaque("+"),
721732
InstructionPart::reloc(),
722-
InstructionPart::basic("]"),
733+
InstructionPart::opaque("]"),
723734
]);
724735
}
725736

@@ -787,9 +798,9 @@ mod test {
787798
InstructionPart::opaque("edx"),
788799
InstructionPart::basic(","),
789800
InstructionPart::basic(" "),
790-
InstructionPart::basic("["),
801+
InstructionPart::opaque("["),
791802
InstructionPart::reloc(),
792-
InstructionPart::basic("]"),
803+
InstructionPart::opaque("]"),
793804
]);
794805
}
795806

@@ -826,9 +837,9 @@ mod test {
826837
InstructionPart::opaque("rax"),
827838
InstructionPart::basic(","),
828839
InstructionPart::basic(" "),
829-
InstructionPart::basic("["),
840+
InstructionPart::opaque("["),
830841
InstructionPart::reloc(),
831-
InstructionPart::basic("]"),
842+
InstructionPart::opaque("]"),
832843
]);
833844
}
834845

‎objdiff-core/tests/snapshots/arch_x86__read_x86_64-3.snap‎

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,23 @@
22
source: objdiff-core/tests/arch_x86.rs
33
expression: output
44
---
5-
[(Address(0), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Basic("["), Normal, 0), (Argument(Opaque("rsp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Basic("]"), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("rdx")), Normal, 0), (Eol, Normal, 0)]
6-
[(Address(5), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Basic("["), Normal, 0), (Argument(Opaque("rsp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(8)), Normal, 0), (Basic("]"), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("rcx")), Normal, 0), (Eol, Normal, 0)]
5+
[(Address(0), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("[")), Normal, 0), (Argument(Opaque("rsp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(16)), Normal, 0), (Argument(Opaque("]")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("rdx")), Normal, 0), (Eol, Normal, 0)]
6+
[(Address(5), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("[")), Normal, 0), (Argument(Opaque("rsp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(8)), Normal, 0), (Argument(Opaque("]")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("rcx")), Normal, 0), (Eol, Normal, 0)]
77
[(Address(10), Dim, 5), (Spacing(4), Normal, 0), (Opcode("push", 640), Normal, 10), (Argument(Opaque("rdi")), Normal, 0), (Eol, Normal, 0)]
88
[(Address(11), Dim, 5), (Spacing(4), Normal, 0), (Opcode("sub", 740), Normal, 10), (Argument(Opaque("rsp")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(16)), Normal, 0), (Eol, Normal, 0)]
9-
[(Address(15), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("rax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("rsp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(32)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
10-
[(Address(20), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("rcx")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("rsp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(40)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
11-
[(Address(25), Dim, 5), (Spacing(4), Normal, 0), (Opcode("movss", 448), Normal, 10), (Argument(Opaque("xmm0")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("rax")), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
12-
[(Address(29), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mulss", 460), Normal, 10), (Argument(Opaque("xmm0")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("rcx")), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
13-
[(Address(33), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("rax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("rsp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(32)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
14-
[(Address(38), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("rcx")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("rsp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(40)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
15-
[(Address(43), Dim, 5), (Spacing(4), Normal, 0), (Opcode("movss", 448), Normal, 10), (Argument(Opaque("xmm1")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("rax")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(4)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
16-
[(Address(48), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mulss", 460), Normal, 10), (Argument(Opaque("xmm1")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("rcx")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(4)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
9+
[(Address(15), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("rax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("[")), Normal, 0), (Argument(Opaque("rsp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(32)), Normal, 0), (Argument(Opaque("]")), Normal, 0), (Eol, Normal, 0)]
10+
[(Address(20), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("rcx")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("[")), Normal, 0), (Argument(Opaque("rsp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(40)), Normal, 0), (Argument(Opaque("]")), Normal, 0), (Eol, Normal, 0)]
11+
[(Address(25), Dim, 5), (Spacing(4), Normal, 0), (Opcode("movss", 448), Normal, 10), (Argument(Opaque("xmm0")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("[")), Normal, 0), (Argument(Opaque("rax")), Normal, 0), (Argument(Opaque("]")), Normal, 0), (Eol, Normal, 0)]
12+
[(Address(29), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mulss", 460), Normal, 10), (Argument(Opaque("xmm0")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("[")), Normal, 0), (Argument(Opaque("rcx")), Normal, 0), (Argument(Opaque("]")), Normal, 0), (Eol, Normal, 0)]
13+
[(Address(33), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("rax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("[")), Normal, 0), (Argument(Opaque("rsp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(32)), Normal, 0), (Argument(Opaque("]")), Normal, 0), (Eol, Normal, 0)]
14+
[(Address(38), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("rcx")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("[")), Normal, 0), (Argument(Opaque("rsp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(40)), Normal, 0), (Argument(Opaque("]")), Normal, 0), (Eol, Normal, 0)]
15+
[(Address(43), Dim, 5), (Spacing(4), Normal, 0), (Opcode("movss", 448), Normal, 10), (Argument(Opaque("xmm1")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("[")), Normal, 0), (Argument(Opaque("rax")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(4)), Normal, 0), (Argument(Opaque("]")), Normal, 0), (Eol, Normal, 0)]
16+
[(Address(48), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mulss", 460), Normal, 10), (Argument(Opaque("xmm1")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("[")), Normal, 0), (Argument(Opaque("rcx")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(4)), Normal, 0), (Argument(Opaque("]")), Normal, 0), (Eol, Normal, 0)]
1717
[(Address(53), Dim, 5), (Spacing(4), Normal, 0), (Opcode("addss", 11), Normal, 10), (Argument(Opaque("xmm0")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("xmm1")), Normal, 0), (Eol, Normal, 0)]
18-
[(Address(57), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("rax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("rsp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(32)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
19-
[(Address(62), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("rcx")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("rsp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(40)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
20-
[(Address(67), Dim, 5), (Spacing(4), Normal, 0), (Opcode("movss", 448), Normal, 10), (Argument(Opaque("xmm1")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("rax")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(8)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
21-
[(Address(72), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mulss", 460), Normal, 10), (Argument(Opaque("xmm1")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Basic("["), Normal, 0), (Argument(Opaque("rcx")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(8)), Normal, 0), (Basic("]"), Normal, 0), (Eol, Normal, 0)]
18+
[(Address(57), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("rax")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("[")), Normal, 0), (Argument(Opaque("rsp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(32)), Normal, 0), (Argument(Opaque("]")), Normal, 0), (Eol, Normal, 0)]
19+
[(Address(62), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mov", 414), Normal, 10), (Argument(Opaque("rcx")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("[")), Normal, 0), (Argument(Opaque("rsp")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(40)), Normal, 0), (Argument(Opaque("]")), Normal, 0), (Eol, Normal, 0)]
20+
[(Address(67), Dim, 5), (Spacing(4), Normal, 0), (Opcode("movss", 448), Normal, 10), (Argument(Opaque("xmm1")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("[")), Normal, 0), (Argument(Opaque("rax")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(8)), Normal, 0), (Argument(Opaque("]")), Normal, 0), (Eol, Normal, 0)]
21+
[(Address(72), Dim, 5), (Spacing(4), Normal, 0), (Opcode("mulss", 460), Normal, 10), (Argument(Opaque("xmm1")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("[")), Normal, 0), (Argument(Opaque("rcx")), Normal, 0), (Argument(Opaque("+")), Normal, 0), (Argument(Signed(8)), Normal, 0), (Argument(Opaque("]")), Normal, 0), (Eol, Normal, 0)]
2222
[(Address(77), Dim, 5), (Spacing(4), Normal, 0), (Opcode("addss", 11), Normal, 10), (Argument(Opaque("xmm0")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Opaque("xmm1")), Normal, 0), (Eol, Normal, 0)]
2323
[(Address(81), Dim, 5), (Spacing(4), Normal, 0), (Opcode("add", 7), Normal, 10), (Argument(Opaque("rsp")), Normal, 0), (Basic(","), Normal, 0), (Spacing(1), Normal, 0), (Argument(Unsigned(16)), Normal, 0), (Eol, Normal, 0)]
2424
[(Address(85), Dim, 5), (Spacing(4), Normal, 0), (Opcode("pop", 590), Normal, 10), (Argument(Opaque("rdi")), Normal, 0), (Eol, Normal, 0)]

0 commit comments

Comments
 (0)