From db24dec108bd6e0464692fc970c7022d09aa1cc6 Mon Sep 17 00:00:00 2001
From: Jason Hiser <jdhiser@gmail.com>
Date: Fri, 12 Jul 2019 15:02:48 +0000
Subject: [PATCH] adding arm32 for rida, though it still doesnt making xforming
 arm32 binaries work without ida.

---
 irdb-libs/rida/rida.cpp | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/irdb-libs/rida/rida.cpp b/irdb-libs/rida/rida.cpp
index ed5064372..471d5b8e1 100644
--- a/irdb-libs/rida/rida.cpp
+++ b/irdb-libs/rida/rida.cpp
@@ -74,9 +74,10 @@ class CreateFunctions_t
 			}
 
 			const auto cs_mode= 
-				machine_type==mtAarch64 ? CS_MODE_LITTLE_ENDIAN :
-				file_class==ELF64 ? CS_MODE_64 : 
-				file_class==ELF32 ? CS_MODE_32 : 
+				machine_type == mtArm32   ? CS_MODE_LITTLE_ENDIAN :
+				machine_type == mtAarch64 ? CS_MODE_LITTLE_ENDIAN :
+				file_class   == ELF64     ? CS_MODE_64 : 
+				file_class   == ELF32     ? CS_MODE_32 : 
 				throw std::runtime_error("Cannot handle ELF class");
 
 			const auto my_cs_arch = 
@@ -394,7 +395,7 @@ class CreateFunctions_t
 					addName(i,dynsymEntryIndex++);
 				}
 			};
-			const auto handle_arm_plt=[&]()
+			const auto handle_arm64_plt=[&]()
 			{
 				const auto plt_entry_size=16;
 				const auto plt_header_size=8*4;
@@ -406,6 +407,18 @@ class CreateFunctions_t
 					addName(i,dynsymEntryIndex++);
 				}
 			};
+			const auto handle_arm32_plt=[&]()
+			{
+				const auto plt_entry_size=3*4;	// 3 instructions
+				const auto plt_header_size=5*4; // 5 instructions
+
+				addRange(startAddr,plt_header_size);
+				for(auto i=startAddr+plt_header_size; i<endAddr; i+=plt_entry_size) 
+				{
+					addRange(i,plt_entry_size);
+					addName(i,dynsymEntryIndex++);
+				}
+			};
 
 			switch(machine_type)
 			{
@@ -414,7 +427,10 @@ class CreateFunctions_t
 					handle_x86_plt();
 					break;
 				case mtAarch64:
-					handle_arm_plt();
+					handle_arm64_plt();
+					break;
+				case mtArm32:
+					handle_arm32_plt();
 					break;
 				default:
 					assert(0);
-- 
GitLab