From 7738e90c3ec67033192b9229ee89df6412dfd0bf Mon Sep 17 00:00:00 2001 From: yyp Date: Tue, 29 Aug 2023 14:26:06 -0400 Subject: [PATCH] fix for aarch64 --- README.md | 4 ++-- binary.py | 4 ++-- darm.py | 7 ++++++- disassembler.py | 7 ++++--- .../binary}/spec2000_gcc5.5_O0_marm_v5t_bzip2 | Bin .../spec2000_gcc5.5_O0_marm_v5t_bzip2_stripped | Bin utils/aarch64-linux-gnu-readelf | Bin 0 -> 522016 bytes 7 files changed, 14 insertions(+), 8 deletions(-) rename {utils/test => test/binary}/spec2000_gcc5.5_O0_marm_v5t_bzip2 (100%) rename {utils/test => test/binary}/spec2000_gcc5.5_O0_marm_v5t_bzip2_stripped (100%) create mode 100755 utils/aarch64-linux-gnu-readelf diff --git a/README.md b/README.md index 1f24f76..b97c92c 100644 --- a/README.md +++ b/README.md @@ -14,11 +14,11 @@ Detailed requirements will be provided later. ## Usage Run D-ARM with the following command: ```bash -$ python main.py -i PATH_TO_BINARY -a ARCH[Other Options] +$ python darm.py -i PATH_TO_BINARY -a ARCH [Other Options] ``` e.g.: ```bash -$ python darm.py -i utils/test/spec2000_gcc5.5_O0_marm_v5t_bzip2 -a 32 +$ python darm.py -i test/binary/spec2000_gcc5.5_O0_marm_v5t_bzip2 -a 32 ``` Arguments: - `-i`, `--input`: the filepath of input binary (required) diff --git a/binary.py b/binary.py index 962e00b..8040aa0 100644 --- a/binary.py +++ b/binary.py @@ -138,7 +138,7 @@ def read_symbols_32(self): self.mappings = sorted(self.arm_code_bound + self.thumb_code_bound + self.data) def read_sections_64(self): - cmd = "utils/arm-linux-gnueabihf-readelf -S " + self.path + cmd = "utils/aarch64-linux-gnu-readelf -S " + self.path output = subprocess.check_output(cmd, shell=True) output = output.decode("ISO-8859-1") line_list = output.split("\n") @@ -186,7 +186,7 @@ def read_sections_64(self): ) def read_symbols_64(self): - cmd = "utils/arm-linux-gnueabihf-readelf -s " + self.path + cmd = "utils/aarch64-linux-gnu-readelf -s " + self.path output = subprocess.check_output(cmd, shell=True) output = output.decode("ISO-8859-1") for line in output.split("\n"): diff --git a/darm.py b/darm.py index 80d24d1..bd45c91 100644 --- a/darm.py +++ b/darm.py @@ -1,7 +1,8 @@ import argparse from disassembler import ARMDisassembler from binary import ARMBinary - +import resource +import sys def get_parser(): parser = argparse.ArgumentParser(description="Disassemble ARM binary") @@ -17,6 +18,7 @@ def get_parser(): "--arch", dest="arch", default=32, + type=int, help="architecture of input binary (32 or 64)", ) parser.add_argument( @@ -63,4 +65,7 @@ def main(): if __name__ == "__main__": + resource.setrlimit(resource.RLIMIT_STACK, (2**29,-1)) + sys.setrecursionlimit(10**6) + main() diff --git a/disassembler.py b/disassembler.py index de18bb4..f889d6f 100644 --- a/disassembler.py +++ b/disassembler.py @@ -1524,10 +1524,11 @@ def slove_graph(self, ss): ) self.data_selected = set(self.data.keys()) - self.data_todo + # TODO: check if it is necessary ## Initial update - data_new = self.data_selected.copy() - if not self.greedy_add(set(), data_new, ss, addr): - logging.error("Initial greedy fail") + # data_new = self.data_selected.copy() + # if not self.greedy_add(set(), data_new, ss, addr): + # logging.error("Initial greedy fail") # logging.debug("{} {} {}".format(hex(addr), t, s)) entry_data = [[-self.data[addr].hint, addr, "D"] for addr in self.data_todo] diff --git a/utils/test/spec2000_gcc5.5_O0_marm_v5t_bzip2 b/test/binary/spec2000_gcc5.5_O0_marm_v5t_bzip2 similarity index 100% rename from utils/test/spec2000_gcc5.5_O0_marm_v5t_bzip2 rename to test/binary/spec2000_gcc5.5_O0_marm_v5t_bzip2 diff --git a/utils/test/spec2000_gcc5.5_O0_marm_v5t_bzip2_stripped b/test/binary/spec2000_gcc5.5_O0_marm_v5t_bzip2_stripped similarity index 100% rename from utils/test/spec2000_gcc5.5_O0_marm_v5t_bzip2_stripped rename to test/binary/spec2000_gcc5.5_O0_marm_v5t_bzip2_stripped diff --git a/utils/aarch64-linux-gnu-readelf b/utils/aarch64-linux-gnu-readelf new file mode 100755 index 0000000000000000000000000000000000000000..d33c9511a59d1a8ddc36e62f402acc244d18cf52 GIT binary patch literal 522016 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