binary-rts

BinaryRTS is a research tool for regression test selection of C++ binaries based on dynamic binary instrumentation

https://github.com/tum-i4/binary-rts

Science Score: 52.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
    Organization tum-i4 has institutional domain (www.cs.cit.tum.de)
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (12.9%) to scientific vocabulary

Keywords

cpp dynamic-binary-instrumentation regression-test-selection regression-testing research
Last synced: 6 months ago · JSON representation ·

Repository

BinaryRTS is a research tool for regression test selection of C++ binaries based on dynamic binary instrumentation

Basic Info
  • Host: GitHub
  • Owner: tum-i4
  • License: other
  • Language: Python
  • Default Branch: main
  • Homepage:
  • Size: 492 KB
Statistics
  • Stars: 7
  • Watchers: 4
  • Forks: 0
  • Open Issues: 1
  • Releases: 1
Topics
cpp dynamic-binary-instrumentation regression-test-selection regression-testing research
Created over 3 years ago · Last pushed over 2 years ago
Metadata Files
Readme License Citation

README.md

BinaryRTS

CI

BinaryRTS is a research tool for regression test selection (RTS) based on dynamic binary instrumentation. A sample project and instructions on how to use BinaryRTS can be found here.

Structure

The project has the following structure:

├── binaryrts <- BinaryRTS sources. │ ├── client <- Dynamic binary instrumentation client for DynamoRIO. │ ├── cli <- BinaryRTS CLI for test trace conversion and running the test selection. │ ├── extractor <- C/C++ function extractor from binaries for Frida agent (Windows-only, experimental). │ ├── frida <- Dynamic binary instrumentation agent using Frida (experimental). │ ├── junit <- JUnit test listener that can be used to attach BinaryRTS to Java tests. │ ├── listener <- C++ test event listener to regularly dump coverage during test execution (e.g., with GoogleTest). │ └── resolver <- C/C++ symbol resolver based on DynamoRIO's symbol access library. ├── cmake <- Internal cmake configuration files. ├── sample <- Sample GoogleTest project to experiment with BinaryRTS. └── scripts <- Scripts and utilities to set up BinaryRTS (e.g., patch GoogleTest main routines).

Build

CMake

Except for the BinaryRTS CLI project, all parts of BinaryRTS can be built using cmake. Run the following commands in the root of the BinaryRTS repository, to build all subprojects:

```shell mkdir build cd build

(1) Generate build system using cmake

Linux/Windows

cmake -DCMAKEBUILDTYPE=Debug ..

[optional] Change generator and target arch on Windows (currently requires MSVC toolchain v142)

cmake -DCMAKEBUILDTYPE=Debug -G "Visual Studio 16 2019" -A x64 .. cmake -DCMAKEBUILDTYPE=Debug -G "Visual Studio 17 2022" -A x64 ..

(2) Build BinaryRTS using generated build system (Win32: MSBuild, Linux: Unix Makefiles)

cmake --build . --config Debug ```

Docker

There is a Dockerfile for dockerized builds, e.g., on platforms other than Linux/Windows such as macOS. For building the Docker image and creating a container with a new bash session, run:

```shell

Build BinaryRTS docker image

$ docker build -t binaryrts:1.0 -f Dockerfile.dev .

Create and run container with new bash session and current working directory mounted into container

$ docker run -v $(pwd):/binary-rts -it binaryrts:1.0 bash ```

Then, you can run the cmake commands from above inside the bash session to build BinaryRTS.

Disclaimer

BinaryRTS is still under active development (mainly by Daniel Elsner) and we expect changes and improvements while collecting experience during the operation of BinaryRTS. Since this repository is the public version of an internal repository, updates will be pushed regularly, but not continuously.

Owner

  • Name: Chair Software and Systems Engineering
  • Login: tum-i4
  • Kind: organization
  • Email: github.i04.in@tum.de
  • Location: Munich, Germany

Citation (CITATION.cff)

cff-version: 1.2.0
title: >-
  BinaryRTS
message: >-
  Please cite this software using these metadata.
type: dataset
authors:
  - given-names: Daniel
    family-names: Elsner
    email: daniel.elsner@tum.de
    affiliation: Technical University of Munich (TUM)
    city: Munich
    country: DE
    website: https://www.cs.cit.tum.de/sse/elsner/
  - given-names: Severin
    family-names: Kacianka
    email: severin.kacianka@tum.de
    affiliation: Technical University of Munich (TUM)
    orcid: https://orcid.org/0000-0002-2546-3031
    city: Munich
    country: DE
    website: https://www.cs.cit.tum.de/sse/kacianka/
  - given-names: Stephan
    family-names: Lipp
    email: stephan.lipp@tum.de
    affiliation: Technical University of Munich (TUM)
    orcid: https://orcid.org/0000-0002-2546-3031
    city: Munich
    country: DE
    website: https://www.cs.cit.tum.de/sse/lipp/
  - given-names: Alexander
    family-names: Pretschner
    email: alexander.pretschner@tum.de
    affiliation: Technical University of Munich
    orcid: "https://orcid.org/0000-0002-5573-1201"
    city: Munich
    country: DE
    website: https://www.cs.cit.tum.de/en/sse/people/alexander-pretschner/
  - given-names: Axel
    family-names: Habermann
  - given-names: Maria
    family-names: Graber
  - given-names: Silke
    family-names: Reimer
repository-code: "https://github.com/tum-i4/binary-rts"
keywords:
  - regression tests
preferred-citation:
  keywords:
    - regression tests
  status: advance-online
  title: "BinaryRTS: Cross-language Regression Test Selection for C++ Binaries in CI"
  year: 2023
  publisher:
    name: IEEE
  conference:
    name: "ICST '23"
    city: Dublin
    country: IE
    date-start: 2023-04-16
    date-end: 2023-04-20
    website: https://conf.researchr.org/home/icst-2023
  collection-type: proceedings
  collection-title: "Proceedings of the 16th IEEE International Conference on Software Testing, Verification and Validation (ICST)"
  authors:
    - given-names: Daniel
      family-names: Elsner
      email: daniel.elsner@tum.de
      affiliation: Technical University of Munich (TUM)
      city: Munich
      country: DE
      website: https://www.cs.cit.tum.de/sse/elsner/
    - given-names: Severin
      family-names: Kacianka
      email: severin.kacianka@tum.de
      affiliation: Technical University of Munich (TUM)
      orcid: https://orcid.org/0000-0002-2546-3031
      city: Munich
      country: DE
      website: https://www.cs.cit.tum.de/sse/kacianka/
    - given-names: Stephan
      family-names: Lipp
      email: stephan.lipp@tum.de
      affiliation: Technical University of Munich (TUM)
      orcid: https://orcid.org/0000-0002-2546-3031
      city: Munich
      country: DE
      website: https://www.cs.cit.tum.de/sse/lipp/
    - given-names: Alexander
      family-names: Pretschner
      email: alexander.pretschner@tum.de
      affiliation: Technical University of Munich
      orcid: "https://orcid.org/0000-0002-5573-1201"
      city: Munich
      country: DE
      website: https://www.cs.cit.tum.de/en/sse/people/alexander-pretschner/
    - given-names: Axel
      family-names: Habermann
    - given-names: Maria
      family-names: Graber
    - given-names: Silke
      family-names: Reimer
  type: conference-paper

GitHub Events

Total
Last Year

Dependencies

.github/workflows/build.yml actions
  • abatilo/actions-poetry v2 composite
  • actions/checkout v3 composite
  • actions/setup-python v4 composite
.github/workflows/codeql.yml actions
  • actions/checkout v3 composite
  • github/codeql-action/analyze v2 composite
  • github/codeql-action/autobuild v2 composite
  • github/codeql-action/init v2 composite
binaryrts/junit/pom.xml maven
  • junit:junit 4.13 compile
  • org.junit.platform:junit-platform-commons 1.7.0 compile
  • org.junit.platform:junit-platform-launcher 1.7.0 compile
  • org.junit.jupiter:junit-jupiter-engine 5.7.0
  • org.junit.vintage:junit-vintage-engine 5.7.0
binaryrts/frida/src/binaryrts_frida/agent/package-lock.json npm
  • 248 dependencies
binaryrts/frida/src/binaryrts_frida/agent/package.json npm
  • @types/frida-gum ^18.1.0 development
  • @types/node ^17.0.45 development
  • frida-compile ^10.2.5 development
binaryrts/cli/poetry.lock pypi
  • atomicwrites 1.4.1 develop
  • attrs 22.1.0 develop
  • iniconfig 1.1.1 develop
  • packaging 21.3 develop
  • pluggy 1.0.0 develop
  • py 1.11.0 develop
  • pyparsing 3.0.9 develop
  • pytest 7.1.2 develop
  • tomli 2.0.1 develop
  • click 8.1.2
  • colorama 0.4.4
  • gitdb 4.0.9
  • gitpython 3.1.30
  • numpy 1.22.4
  • shellingham 1.4.0
  • smmap 5.0.0
  • typer 0.4.2
binaryrts/cli/pyproject.toml pypi
  • pytest ^7.1.2 develop
  • GitPython ^3.1.30
  • numpy ^1.22.4
  • python ^3.8
  • typer ^0.4.1
binaryrts/frida/poetry.lock pypi
  • colorama 0.4.5
  • frida 15.1.28
  • frida-tools 10.8.0
  • prompt-toolkit 3.0.30
  • pygments 2.12.0
  • wcwidth 0.2.5
binaryrts/frida/pyproject.toml pypi
  • frida ^15.1.28
  • frida-tools ^10.8.0
  • python ^3.8