mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-25 05:48:07 -05:00
gnu: Add python-angr.
* gnu/packages/patches/python-angr-addition-type-error.patch: New patch. * gnu/packages/patches/python-angr-check-exec-deps.patch: New patch. * gnu/local.mk (dist_patch_DATA): Add them. * gnu/packages/python-xyz.scm (python-angr): New variable. Signed-off-by: jgart <jgart@dismail.de>
This commit is contained in:
parent
61eb25c549
commit
d4511a8970
4 changed files with 210 additions and 0 deletions
|
@ -1948,6 +1948,8 @@ dist_patch_DATA = \
|
||||||
%D%/packages/patches/python-3-search-paths.patch \
|
%D%/packages/patches/python-3-search-paths.patch \
|
||||||
%D%/packages/patches/python-3-fix-tests.patch \
|
%D%/packages/patches/python-3-fix-tests.patch \
|
||||||
%D%/packages/patches/python-3-hurd-configure.patch \
|
%D%/packages/patches/python-3-hurd-configure.patch \
|
||||||
|
%D%/packages/patches/python-angr-addition-type-error.patch \
|
||||||
|
%D%/packages/patches/python-angr-check-exec-deps.patch \
|
||||||
%D%/packages/patches/python-aionotify-0.2.0-py3.8.patch \
|
%D%/packages/patches/python-aionotify-0.2.0-py3.8.patch \
|
||||||
%D%/packages/patches/python-argcomplete-1.11.1-fish31.patch \
|
%D%/packages/patches/python-argcomplete-1.11.1-fish31.patch \
|
||||||
%D%/packages/patches/python-cross-compile.patch \
|
%D%/packages/patches/python-cross-compile.patch \
|
||||||
|
|
18
gnu/packages/patches/python-angr-addition-type-error.patch
Normal file
18
gnu/packages/patches/python-angr-addition-type-error.patch
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
This fixes failures of the test_ln_gcc_O2 and other related tests
|
||||||
|
in the angr test suite. The patch has been proposed upstream.
|
||||||
|
|
||||||
|
Taken form: https://github.com/angr/angr/pull/4443
|
||||||
|
|
||||||
|
diff --git a/angr/analyses/reassembler.py b/angr/analyses/reassembler.py
|
||||||
|
index 7a2399a60..b09b3a8cb 100644
|
||||||
|
--- a/angr/analyses/reassembler.py
|
||||||
|
+++ b/angr/analyses/reassembler.py
|
||||||
|
@@ -730,7 +730,7 @@ class Instruction:
|
||||||
|
elif operand.type == capstone.CS_OP_MEM:
|
||||||
|
operand_offsets.append(capstone_instr.disp_offset)
|
||||||
|
else:
|
||||||
|
- operand_offsets.append(None)
|
||||||
|
+ operand_offsets.append(0)
|
||||||
|
|
||||||
|
if self.addr is not None:
|
||||||
|
self._initialize(capstone_instr.operands, operand_offsets)
|
93
gnu/packages/patches/python-angr-check-exec-deps.patch
Normal file
93
gnu/packages/patches/python-angr-check-exec-deps.patch
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
The angr test suite performs analysis on several pre-compiled binaries
|
||||||
|
to ensure its binary analysis capabilities are working as intended.
|
||||||
|
Some of these binaries are also executed as part of the test suite to
|
||||||
|
test if the simulation engine provided by angr results in the same
|
||||||
|
output as native execution of the binary.
|
||||||
|
|
||||||
|
For Guix, this files as the glibc shared objects cannot be found.
|
||||||
|
Additionally, we don't really want to execute pre-compiled binaries
|
||||||
|
on Guix, hence we disable those tests.
|
||||||
|
|
||||||
|
diff --git a/tests/test_ctype_locale.py b/tests/test_ctype_locale.py
|
||||||
|
index 08cb89836..2b9233558 100644
|
||||||
|
--- a/tests/test_ctype_locale.py
|
||||||
|
+++ b/tests/test_ctype_locale.py
|
||||||
|
@@ -14,7 +14,7 @@ test_location = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
||||||
|
|
||||||
|
class TestCtypeLocale(unittest.TestCase):
|
||||||
|
- @skip_if_not_linux
|
||||||
|
+ @unittest.skip("test executes pre-compiled binaries")
|
||||||
|
def test_ctype_b_loc(self):
|
||||||
|
"""
|
||||||
|
test_ctype_locale.test_ctype_b_loc
|
||||||
|
@@ -60,7 +60,7 @@ class TestCtypeLocale(unittest.TestCase):
|
||||||
|
output = subprocess.check_output(bin_path, shell=True)
|
||||||
|
assert result == output
|
||||||
|
|
||||||
|
- @skip_if_not_linux
|
||||||
|
+ @unittest.skip("test executes pre-compiled binaries")
|
||||||
|
def test_ctype_tolower_loc(self):
|
||||||
|
"""
|
||||||
|
test_ctype_locale.test_ctype_tolower_loc
|
||||||
|
@@ -109,7 +109,7 @@ class TestCtypeLocale(unittest.TestCase):
|
||||||
|
output = subprocess.check_output(bin_path, shell=True)
|
||||||
|
assert result == output
|
||||||
|
|
||||||
|
- @skip_if_not_linux
|
||||||
|
+ @unittest.skip("test executes pre-compiled binaries")
|
||||||
|
def test_ctype_toupper_loc(self):
|
||||||
|
"""
|
||||||
|
test_ctype_locale.test_ctype_toupper_loc
|
||||||
|
diff --git a/tests/test_signed_div.py b/tests/test_signed_div.py
|
||||||
|
index 59cb9b8d1..994ed9c65 100644
|
||||||
|
--- a/tests/test_signed_div.py
|
||||||
|
+++ b/tests/test_signed_div.py
|
||||||
|
@@ -1,6 +1,7 @@
|
||||||
|
import angr
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
+import pytest
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
@@ -13,7 +14,7 @@ import os
|
||||||
|
test_location = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
|
||||||
|
|
||||||
|
-@skipUnless(sys.platform.startswith("linux"), "linux only")
|
||||||
|
+@pytest.mark.skip(reason="test executes pre-compiled binaries")
|
||||||
|
def test_signed_div():
|
||||||
|
test_bin = os.path.join(test_location, "..", "..", "binaries", "tests", "x86_64", "test_signed_div")
|
||||||
|
b = angr.Project(test_bin, auto_load_libs=False)
|
||||||
|
diff --git a/tests/test_sscanf.py b/tests/test_sscanf.py
|
||||||
|
index 29d2c8403..ea799b310 100644
|
||||||
|
--- a/tests/test_sscanf.py
|
||||||
|
+++ b/tests/test_sscanf.py
|
||||||
|
@@ -1,3 +1,4 @@
|
||||||
|
+import pytest
|
||||||
|
import angr
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
@@ -14,7 +15,7 @@ test_location = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
|
||||||
|
|
||||||
|
class TestSscanf(unittest.TestCase):
|
||||||
|
- @unittest.skipUnless(sys.platform.startswith("linux"), "linux only")
|
||||||
|
+ @unittest.skip("test executes pre-compiled binaries")
|
||||||
|
def test_sscanf(self):
|
||||||
|
test_bin = os.path.join(test_location, "..", "..", "binaries", "tests", "x86_64", "sscanf_test")
|
||||||
|
b = angr.Project(test_bin, auto_load_libs=False)
|
||||||
|
diff --git a/tests/test_strtol.py b/tests/test_strtol.py
|
||||||
|
index 6c29cab22..f36181407 100644
|
||||||
|
--- a/tests/test_strtol.py
|
||||||
|
+++ b/tests/test_strtol.py
|
||||||
|
@@ -11,7 +11,7 @@ class TestStrtol(unittest.TestCase):
|
||||||
|
# pylint: disable=no-self-use
|
||||||
|
|
||||||
|
@slow_test
|
||||||
|
- @unittest.skipUnless(sys.platform.startswith("linux"), "linux-only")
|
||||||
|
+ @unittest.skip("test executes pre-compiled binaries")
|
||||||
|
def test_strtol(self, threads=None):
|
||||||
|
test_bin = os.path.join(bin_location, "tests", "x86_64", "strtol_test")
|
||||||
|
# disabling auto_load_libs increases the execution time of the test case.
|
|
@ -34070,6 +34070,103 @@ (define-public python-itanium-demangler
|
||||||
mangled symbols, which can be used for directly extracting type information.")
|
mangled symbols, which can be used for directly extracting type information.")
|
||||||
(license license:bsd-0)))
|
(license license:bsd-0)))
|
||||||
|
|
||||||
|
(define-public python-angr
|
||||||
|
(package
|
||||||
|
(name "python-angr")
|
||||||
|
(version "9.2.46")
|
||||||
|
(source
|
||||||
|
(origin
|
||||||
|
;; Fetching from Git as pypi release doesn't include all test files.
|
||||||
|
(method git-fetch)
|
||||||
|
(patches (search-patches "python-angr-addition-type-error.patch"
|
||||||
|
"python-angr-check-exec-deps.patch"))
|
||||||
|
(uri (git-reference
|
||||||
|
(url "https://github.com/angr/angr")
|
||||||
|
(commit (string-append "v" version))))
|
||||||
|
(file-name (git-file-name name version))
|
||||||
|
(sha256
|
||||||
|
(base32 "18y9wyf7va7gvp9zd6lhw82j9a2x2ajsvbawh96xnxzml0jwlwjm"))))
|
||||||
|
(build-system pyproject-build-system)
|
||||||
|
(arguments
|
||||||
|
(list
|
||||||
|
#:phases #~(modify-phases %standard-phases
|
||||||
|
(add-after 'unpack 'patch-tests
|
||||||
|
(lambda* (#:key inputs #:allow-other-keys)
|
||||||
|
(let ((coreutils (assoc-ref inputs "coreutils")))
|
||||||
|
(substitute* "tests/test_vault.py"
|
||||||
|
(("/bin/false")
|
||||||
|
(which "false")))
|
||||||
|
(substitute* "tests/common.py"
|
||||||
|
(("\\[\"cc\"\\]")
|
||||||
|
"[\"gcc\"]")))))
|
||||||
|
(replace 'check
|
||||||
|
(lambda* (#:key inputs tests? #:allow-other-keys)
|
||||||
|
(when tests?
|
||||||
|
(copy-recursively #$(this-package-native-input "binaries")
|
||||||
|
"../binaries")
|
||||||
|
(with-directory-excursion "tests"
|
||||||
|
;; test_mips32_missing_offset_in_instructions fails
|
||||||
|
;; with capstone 5 and passes with capstone 4. Might
|
||||||
|
;; be a capstone regressions, needs investigation.
|
||||||
|
;;
|
||||||
|
;; test_concrete_memset is a non-deterministic benchmark.
|
||||||
|
(invoke "pytest" "-vv" "-x" "--dist" "loadfile"
|
||||||
|
"-k" "not test_mips32_missing_offset_in_instructions and not test_concrete_memset"
|
||||||
|
"-n" (number->string (parallel-job-count)))))))
|
||||||
|
(add-before 'build 'set-cc
|
||||||
|
(lambda _
|
||||||
|
(setenv "CC" "gcc"))))))
|
||||||
|
(propagated-inputs (list python-ailment
|
||||||
|
python-archinfo
|
||||||
|
python-cachetools
|
||||||
|
python-cffi
|
||||||
|
python-claripy
|
||||||
|
python-cle
|
||||||
|
python-colorama
|
||||||
|
python-cppheaderparser
|
||||||
|
python-dpkt
|
||||||
|
python-gitpython
|
||||||
|
python-mulpyplexer
|
||||||
|
python-nampa
|
||||||
|
python-networkx
|
||||||
|
python-protobuf
|
||||||
|
python-psutil
|
||||||
|
python-itanium-demangler
|
||||||
|
python-pycparser
|
||||||
|
python-pyvex
|
||||||
|
python-progressbar2
|
||||||
|
python-rpyc
|
||||||
|
python-sortedcontainers
|
||||||
|
python-sqlalchemy
|
||||||
|
python-sympy
|
||||||
|
unicorn))
|
||||||
|
(native-inputs `(("python-pytest" ,python-pytest)
|
||||||
|
("python-pytest-xdist" ,python-pytest-xdist)
|
||||||
|
("binaries"
|
||||||
|
;; This repository ships several binaries used only for testing
|
||||||
|
;; purpose. The binaries are not executed and not part of the
|
||||||
|
;; angr distribution, they are only used to test angr's binary
|
||||||
|
;; analysis capabilities. In the context of the GNU FSDG, these
|
||||||
|
;; files should be considered non-functional data.
|
||||||
|
,(origin
|
||||||
|
(method git-fetch)
|
||||||
|
(uri (git-reference (url
|
||||||
|
"https://github.com/angr/binaries")
|
||||||
|
(commit (string-append "v"
|
||||||
|
version))))
|
||||||
|
(file-name (git-file-name "angr-binaries" version))
|
||||||
|
(sha256 (base32
|
||||||
|
"1f286b2239zavxzwg1184hj1zs380cr9qr549mvy3vywvm8bsmgr"))))))
|
||||||
|
(home-page "https://github.com/angr/angr")
|
||||||
|
(synopsis "Multi-architecture binary analysis toolkit")
|
||||||
|
(description
|
||||||
|
"This package provides a versatile binary analysis platform with the
|
||||||
|
ability to perform dynamic symbolic execution as well as various
|
||||||
|
static analyses directly on binaries. As such, it can be used for all
|
||||||
|
kinds of reverse engineering, vulnerability discovery, exploit
|
||||||
|
generation, and software testing purposes.")
|
||||||
|
(license license:bsd-2)))
|
||||||
|
|
||||||
(define-public python-peachpy
|
(define-public python-peachpy
|
||||||
;; There is no tag in this repo.
|
;; There is no tag in this repo.
|
||||||
(let ((commit "913d74c35a6b1d330e90bfc055208ce5b06b35a0")
|
(let ((commit "913d74c35a6b1d330e90bfc055208ce5b06b35a0")
|
||||||
|
|
Loading…
Reference in a new issue