From 269320f8155b23d9029d033127b9672a5ef63f08 Mon Sep 17 00:00:00 2001
From: Martin Teichmann <martin.teichmann@gmail.com>
Date: Sun, 12 Feb 2023 11:26:07 +0000
Subject: [PATCH] add support for signed memory

---
 ebpfcat/ebpf.py      | 4 ++++
 ebpfcat/ebpf_test.py | 9 ++++++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/ebpfcat/ebpf.py b/ebpfcat/ebpf.py
index 84b6d41..acd1bae 100644
--- a/ebpfcat/ebpf.py
+++ b/ebpfcat/ebpf.py
@@ -1111,6 +1111,10 @@ class EBPF:
         self.mI = MemoryMap(self, "I")
         self.mA = MemoryMap(self, "A")  # actually I, but treat as Q
         self.mQ = MemoryMap(self, "Q")
+        self.mb = MemoryMap(self, "b")
+        self.mh = MemoryMap(self, "h")
+        self.mi = MemoryMap(self, "i")
+        self.mq = MemoryMap(self, "q")
 
         self.r = RegisterArray(self, True, False)
         self.sr = RegisterArray(self, True, True)
diff --git a/ebpfcat/ebpf_test.py b/ebpfcat/ebpf_test.py
index 88928de..a4c33e6 100644
--- a/ebpfcat/ebpf_test.py
+++ b/ebpfcat/ebpf_test.py
@@ -141,6 +141,8 @@ class Tests(TestCase):
         e.r3 = e.mH[e.r3 + 2]
         e.r4 = e.mI[7 + e.r8]
         e.r5 = e.mQ[e.r3 - 7]
+        e.r5 = e.mb[e.r3] >> 2
+        e.r5 = e.mB[e.r3] >> 2
         self.assertEqual(e.opcodes,
             [Instruction(opcode=114, dst=5, src=0, off=0, imm=7),
              Instruction(opcode=106, dst=3, src=0, off=2, imm=3),
@@ -153,7 +155,12 @@ class Tests(TestCase):
              Instruction(opcode=113, dst=2, src=5, off=0, imm=0),
              Instruction(opcode=105, dst=3, src=3, off=2, imm=0),
              Instruction(opcode=97, dst=4, src=8, off=7, imm=0),
-             Instruction(opcode=121, dst=5, src=3, off=-7, imm=0)])
+             Instruction(opcode=121, dst=5, src=3, off=-7, imm=0),
+             Instruction(opcode=O.B+O.LD, dst=5, src=3, off=0, imm=0),
+             Instruction(opcode=O.LONG+O.ARSH, dst=5, src=0, off=0, imm=2),
+             Instruction(opcode=O.B+O.LD, dst=5, src=3, off=0, imm=0),
+             Instruction(opcode=O.LONG+O.RSH, dst=5, src=0, off=0, imm=2),
+            ])
 
     def test_local(self):
         class Local(EBPF):
-- 
GitLab