executable archive format

Related tags

Distribution xar
Overview

XAR

CircleCI Status Code style: black Downloads

XAR lets you package many files into a single self-contained executable file. This makes it easy to distribute and install.

A .xar file is a read-only file system image which, when mounted, looks like a regular directory to user-space programs. This requires a one-time installation of a driver for this file system (SquashFS).

XAR is pronounced like "czar" (/t͡ʂar/). The 'X' in XAR is meant to be a placeholder for all other letters as at Facebook this format was originally designed to replace ZIP-based PAR (Python archives), JSAR (JavaScript archives), LAR (Lua archives), and so on.

Use Cases

There are two primary use cases for XAR files. The first is simply collecting a number of files for automatic, atomic mounting somewhere on the filesystem. Using a XAR file vastly shrinks the on-disk size of the data it holds. Compressing to below 20% of the original size is not unheard of. This can save multiple gigabytes per machine and reduce random disk IO. This is especially important on machines with flash storage.

The second use case is an extension of the first -- by making the XAR file executable and using the xarexec helper, a XAR becomes a self-contained package of executable code and its data. A popular example is Python application archives that include all Python source code files, as well as native shared libraries, configuration files, other data.

This can replace virtualenvs and PEX files with a system that is faster, has less overhead, is more compatible, and achieves better compression. The downside is that it requires a setuid helper to perform the mounting.

Advantages of XAR for Python usage

  • SquashFS looks like regular files on disk to Python. This lets it use regular imports which are better supported by CPython.

  • SquashFS looks like regular files to your application, too. You don't need to use pkg_resources or other tricks to access data files in your package.

  • SquashFS with Zstandard compression saves disk space, also compared to a ZIP file.

  • SquashFS doesn't require unpacking of .so files to a temporary location like ZIP files do.

  • SquashFS is faster to start up than unpacking a ZIP file. You only need to mount the file system once. Subsequent calls to your application will reuse the existing mount.

  • SquashFS only decompresses the pages that are used by the application, and decompressed pages are cached in the page cache.

  • SquashFS is read-only so the integrity of your application is guaranteed compared to using virtualenvs or unpacking to a temporary directory.

Benchmarks

Optimizing performance (both space and execution time) was a key design goal for XARs. We ran benchmark tests with open source tools to compare PEX, XAR, and native installs on the following metrics:

  • Size: file size, in bytes, of the executable
  • Cold start time: time taken when we have nothing mounted or extracted
  • Hot start time: time taken when we have extracted cache or mounted XAR squashfs

The PEXs are built with python3 setup.py bdist_pex --bdist-all, and the XARs are built with python3 setup.py bdist_xar --xar-compression-algorithm=zstd.

Console script Size Cold start time Hot start time
django-admin (native) 22851072 B - 0.220 s
django-admin.pex 8529089 B 1.705 s 0.772 s
django-admin.xar 5464064 B (-36%) 0.141 s (-92%) 0.122 s (-84%)
black (native) 1020928 B - 0.245 s
black.pex 677550 B 0.737 s 0.619 s
black.xar 307200 B (-55%) 0.245 s (-67%) 0.219 s (-65%)
jupyter (native) 64197120 B - 0.399 s
jupyter.pex 17315669 B 2.152 s 1.046 s
jupyter.xar 17530880 B (+1%) 0.213 s (-90%) 0.181 s (-83%)

The results show that both file size (with zstd compression) and start times improve with XARs. This is an improvement when shipping to large number of servers, especially with short-running executables, such as small data collection scripts on web servers or interactive command line tools.

Requirements

XAR requires:

  • Linux or macOS
  • Python >= 2.7.11 & >= 3.5
  • squashfs-tools to build XARs
  • squashfuse >= 0.1.102 with squashfuse_ll to run XARs

Components of XAR

bdist_xar

This is a setuptools plugin that lets you package your Python application as a .xar file. It requires squashfs-tools. Install it from PyPI to get the stable version:

pip install xar

or you can install it from this repository:

python setup.py install

After installation go to your favorite Python project with a console script and run:

python setup.py bdist_xar

The setuptools extension bdist_xar has options to configure the XAR, most importantly --interpreter sets the Python interpreter used. Run python setup.py bdist_xar --help for a full list of options.

xarexec_fuse

This is a binary written in C++ used to mount a SquashFS image. It requires squashfuse installed. Note that the current squashfuse package on Ubuntu doesn't include squashfuse_ll, so you will have to install from source.

You can build this part of the code with:

mkdir build && cd build && cmake .. && make && [sudo] make install

Examples

bdist_xar

Simply run:

python /path/to/black/setup.py bdist_xar [--xar-compression-algorithm=zstd]
/path/to/black/dist/black.xar --help

make_xar

XAR provides a simple CLI to create XARs from Python executables or directories. We can create a XAR from an existing Python executable zip file, like a PEX.

make_xar --python black.pex --output black.xar

You can also create a XAR from a directory, and tell XAR which executable to run once it starts.

> mkdir myxar
> echo -n "#\!/bin/sh\nshift\necho \$@" > myxar/echo
> chmod +x myxar/echo
> make_xar --raw myxar --raw-executable echo --output echo
> ./echo hello world
hello world

xarexec_fuse will execute the executable it is given using the XAR path as the first argument, and will forward the XARs arguments after.

Running the Circle CI tests locally

First you need to install docker (and possible docker-machine), as it is how it runs the the code. Then you need to install the circleci cli, and run

circleci build

If you change .circleci/config.yml you should validate it before committing

circleci config validate

Contributing

See the CONTRIBUTING file for how to help out.

License

XAR is BSD-licensed.

Comments
  • Imports of modules in parent directory not working.

    Imports of modules in parent directory not working.

    Lets start with very cool project. Been playing around with it and see lots of cases where I needed this in the past.

    (venv) api goose$ python setup.py install && python setup.py bdist_xar
    
    (venv) api goose$ ./dist/api.xar
    Directories/modules found:  ['ctrl_api', 'setup', 'api', 'compare_api_mappings', 'ctrl_decorators', 'ctrl_logging', 'dev_code', 'endpoints', 'providers', 'settings', 'test_xar', 'tests']
    Traceback (most recent call last):
      File "/mnt/xarfuse/uid-501/5348637a/__run_xar_main__.py", line 32, in <module>
        __invoke_main()
      File "/mnt/xarfuse/uid-501/5348637a/__run_xar_main__.py", line 29, in __invoke_main
        runpy._run_module_as_main(module, False)
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 193, in _run_module_as_main
        "__main__", mod_spec)
      File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 85, in _run_code
        exec(code, run_globals)
      File "/mnt/xarfuse/uid-501/5348637a/ctrl_api/api.py", line 11, in <module>
        from providers.auth.authenticate import (
    ModuleNotFoundError: No module named 'providers'
    

    So what seems to work best is:

    try:
        from providers.auth.authenticate import (
            authenticate,
            retrieve_refresh_token
        )
    except ImportError:
        from .providers.auth.authenticate import (
            authenticate,
            retrieve_refresh_token
        )
    

    Seems relative imports is the default.

    I looked quick and didn't see it mentioned in the docs.

    Perhaps mention the relative imports of this is the expected behaviour?

    opened by c-goosen 9
  • bdist_xar in a pipenv

    bdist_xar in a pipenv

    trying out the xar distutils extension, but having trouble getting it running w/in pipenv

    basically don't see the bdist_xar extension when running distutils:

    pipenv run python setup.py --help-commands
    Standard commands:
      build            build everything needed to install
      build_py         "build" pure Python modules (copy to build directory)
      build_ext        build C/C++ extensions (compile/link to build directory)
      build_clib       build C/C++ libraries used by Python extensions
      build_scripts    "build" scripts (copy and fixup #! line)
      clean            clean up temporary files from 'build' command
      install          install everything from build directory
      install_lib      install all Python modules (extensions and pure Python)
      install_headers  install C/C++ header files
      install_scripts  install scripts (Python or otherwise)
      install_data     install data files
      sdist            create a source distribution (tarball, zip file, etc.)
      register         register the distribution with the Python package index
      bdist            create a built (binary) distribution
      bdist_dumb       create a "dumb" built distribution
      bdist_rpm        create an RPM distribution
      bdist_wininst    create an executable installer for MS Windows
      check            perform some checks on the package
      upload           upload binary package to PyPI
    
    usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
       or: setup.py --help [cmd1 cmd2 ...]
       or: setup.py --help-commands
       or: setup.py cmd --help
    

    on mac and have installed xar via brew per the instructions: https://code.fb.com/data-infrastructure/xars-a-more-efficient-open-source-system-for-self-contained-executables/

    in the pipenv i install the extensions by cloning xar, cding into the directory and:

    pipenv run pip install .
    

    still dont get the extension, but if I import it in my setup.py, it works fine, until the build directory is cleaned:

    from xar.commands.bdist_xar import bdist_xar
    setup(
    ...
        cmdclass={'bdist_xar': bdist_xar},
    ...
    )
    

    then:

    › per python setup.py bdist_xar
    running bdist_xar
    running bdist_wheel
    running build
    running build_py
    creating build
    creating build/lib
    copying collector.py -> build/lib
    removing 'build/bdist.macosx-10.12-x86_64/xar' (and everything under it)
    error: [Errno 2] No such file or directory: 'build/bdist.macosx-10.12-x86_64/xar'
    

    any direction is much appreciated

    opened by nathantsoi 8
  • [xar] Fix CMake build

    [xar] Fix CMake build

    D31507009 moved the logging macros to a different header, but this header wasn't added to CMakeLists. This diff fixes the CMake build.

    Tested with:

    mkdir build; cd build; cmake ..; make
    

    Fixes #49

    CLA Signed 
    opened by wrigby 6
  • Add Logging file to xarlib_srcs

    Add Logging file to xarlib_srcs

    I have a feeling the open source build has been broken (at least for MacOS) since https://github.com/facebookincubator/xar/commit/a4c59465d7550c0e26041114d213076bc9ad49ac

    I was getting a linking error against Logging.h, repro'd with both clang and gcc. Explicitly adding that dependency to the xarlib_srcs set has the binary compiling successfully for me now.

    CLA Signed 
    opened by dusty-phillips 6
  • add a `--force` flag to pass force=True to add_distribution?

    add a `--force` flag to pass force=True to add_distribution?

    Perhaps there is a better fix for this, but packaging selenium, I get existing file errors unless I patch https://github.com/facebookincubator/xar/blob/master/xar/xar_builder.py#L392 to force=True

    e.g.

    -        wheel.install(sys_paths, xar_paths, force=False)
    +        wheel.install(sys_paths, xar_paths, force=True)
    

    Any suggestions or should I look into passing through a --force flag?

    edit: to clarify, packaging an executable with selenium as a dependency.

    opened by nathantsoi 6
  • XAR for CentOs and Windows

    XAR for CentOs and Windows

    Hi ,

    It's a great one. Thanks for making one. I am seeking one help. I want to make XAR for windows and CentOs also. Could you please help me by letting me know how to do the same.

    Thanks & regards, Shashank Singh

    question 
    opened by Shashank0719 5
  • Improve make_xar documentation

    Improve make_xar documentation

    Hi all,

    I've received the error below when executing a xar executable file:

    ./hello
    /dev/shm/uid-1000/8d11d214-ns-4026531840/hello.py: 3: /dev/shm/uid-1000/8d11d214-ns-4026531840/hello.py: Syntax error: "(" unexpected
    

    Executable python script

    cat hellopy/hello.py 
    #!/usr/bin/python
    
    for i in range(100):
        print i
    
    

    Build xar

    make_xar --python-interpreter python3 --raw hellopy --raw-executable hello.py --output hello
    

    Any hint is welcome.

    OS: Ubuntu 16.04 LTS

    opened by trungnq97 5
  • Use XAR in containers without kernel modules

    Use XAR in containers without kernel modules

    When using xar in a docker container, there is an issue with the FUSE driver:

    $ ./test.xar
    fuse: device not found, try 'modprobe fuse' first FATAL /opt/xar/xar/XarExecFuse.cpp:486: squashfuse_ll failed with exit status 1
    
    [1]    46915 abort      ./test.xar
    $ modprobe fuse
    modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.9.87-linuxkit-aufs/modules.dep.bin'
    modprobe: FATAL: Module fuse not found in directory /lib/modules/4.9.87-linuxkit-aufs
    

    AFAIK the container environment is responsible for the latter.

    Is there any way to use xar without this kernel module, in order avoid privileged containers or mounting the fuse socket? (Probably really important when using docker containers on windows)

    opened by sauercrowd 4
  • Do you need a setup.py file to use this?

    Do you need a setup.py file to use this?

    I'd like to use Xar to improve the import-time performance of Zulip, but we don't have a setup.py file with a fixed set of executables. Instead, we have a requirements.txt file for our standard virtualenv, and individual command source it and then use it.

    There's only 2-3 entry points that we really care about (e.g. the Django standard manage.py that you mention in your benchmarks is one), so it'd be fine if we need to list the entrypoints, but I can't figure out from your documentation how to create a xar archive for such a command without first creating a setup.py file.

    opened by timabbott 3
  • Support for other Python 3.x versions

    Support for other Python 3.x versions

    I noticed that this package only officially supports Python 2.6 and 3.6; is there a reason you'd expect it to not work on with 3.5/3.7, or have you just not tested it for those?

    question 
    opened by timabbott 3
  • Is xar limited to Python?

    Is xar limited to Python?

    Is xar limited to Python or could it be used for other types of payloads as well? Could it be used as more generic image format for something like AppImage?

    opened by probonopd 3
  • Unable to use xar from a venv

    Unable to use xar from a venv

    Hey, thanks for a cool project— I noted that when I install xar in a venv, it doesn't work:

    $ path/to/my/xar_env/bin/python setup.py bdist_xar
    running bdist_xar
    removing 'build/bdist.linux-x86_64/xar' (and everything under it)
    error: [Errno 2] No such file or directory: 'build/bdist.linux-x86_64/xar'
    

    I see the same result when I source bin/activate in that virtualenv and also if my project is installed into the virtualenv. It only works as expected if I pip3 install xar system-wide (undesirable, especially for many CI setups). Is there something I'm missing here to make this work? Thanks again.


    It is particularly a problem because xar also seems to pick up (and then complain about) system dependency versions even when it has downloaded the correct/newer ones, eg:

    Collecting paramiko-expect
      Using cached paramiko_expect-0.2.8-py2.py3-none-any.whl (11 kB)
      Saved ./build/bdist.linux-x86_64/xar/downloads/paramiko_expect-0.2.8-py2.py3-none-any.whl
    Collecting paramiko>=1.10.1
      File was already downloaded path/to/my/project/build/bdist.linux-x86_64/xar/downloads/paramiko-2.7.1-py2.py3-none-any.whl
    Collecting bcrypt>=3.1.3
      File was already downloaded path/to/my/project/build/bdist.linux-x86_64/xar/downloads/bcrypt-3.1.7-cp34-abi3-manylinux1_x86_64.whl
    Collecting cryptography>=2.5
      File was already downloaded path/to/my/project/build/bdist.linux-x86_64/xar/downloads/cryptography-2.9.2-cp35-abi3-manylinux2010_x86_64.whl
    Collecting pynacl>=1.0.1
      File was already downloaded path/to/my/project/build/bdist.linux-x86_64/xar/downloads/PyNaCl-1.4.0-cp35-abi3-manylinux1_x86_64.whl
    Collecting cffi>=1.1
      File was already downloaded path/to/my/project/build/bdist.linux-x86_64/xar/downloads/cffi-1.14.0-cp35-cp35m-manylinux1_x86_64.whl
    Collecting six>=1.4.1
      File was already downloaded path/to/my/project/build/bdist.linux-x86_64/xar/downloads/six-1.15.0-py2.py3-none-any.whl
    Collecting pycparser
      File was already downloaded path/to/my/project/build/bdist.linux-x86_64/xar/downloads/pycparser-2.20-py2.py3-none-any.whl
    Successfully downloaded paramiko-expect paramiko bcrypt cryptography pynacl cffi six pycparser
    WARNING: You are using pip version 20.0.2; however, version 20.1.1 is available.
    You should consider upgrading via the '/usr/bin/python3 -m pip install --upgrade pip' command.
    removing 'build/bdist.linux-x86_64/xar' (and everything under it)
    Traceback (most recent call last):
      File "setup.py", line 25, in <module>
        'tqdm'
      File "/usr/local/lib/python3.5/dist-packages/setuptools/__init__.py", line 144, in setup
        return distutils.core.setup(**attrs)
      File "/usr/lib/python3.5/distutils/core.py", line 148, in setup
        dist.run_commands()
      File "/usr/lib/python3.5/distutils/dist.py", line 955, in run_commands
        self.run_command(cmd)
      File "/usr/lib/python3.5/distutils/dist.py", line 974, in run_command
        cmd_obj.run()
      File "/usr/local/lib/python3.5/dist-packages/xar/commands/bdist_xar.py", line 231, in run
        deps = self._deps(dist)
      File "/usr/local/lib/python3.5/dist-packages/xar/commands/bdist_xar.py", line 193, in _deps
        requires, extras=extras, installer=self.installer
      File "/usr/local/lib/python3.5/dist-packages/pkg_resources/__init__.py", line 792, in resolve
        raise VersionConflict(dist, req).with_context(dependent_req)
    pkg_resources.ContextualVersionConflict: (cryptography 1.2.3 (/usr/lib/python3/dist-packages), Requirement.parse('cryptography>=2.5'), {'paramiko'})
    

    I don't think any of this would be an issue if xar were used from a clean environment.

    I'm using Ubuntu; I can reproduce this behaviour on both Ubuntu Xenial (Python 3.5) and Ubuntu Focal (Python 3.8).

    opened by mikepurvis 1
  • Customizing squashfuse mount options and Mac OS X

    Customizing squashfuse mount options and Mac OS X

    I've got a Python CLI tool that I'm trying to distribute internally at my company, and xar is really close to a perfect fit. There's just one niggling issue for me, and that's the way OSXFUSE (for obvious reasons) always mounts the squashfs with an icon on the Mac OS Desktop.

    The biggest issue is the name, it ends up being called OSXFUSE Volume 0 (squashfuse_ll) or something similar, which is a little rough. It would be great if we could pass the -o volname= option and either set it to the name of the package, or make it customizable.

    Even better would be if there's a way to hide the volume altogether, but that's probably asking a bit much. I haven't been able to figure out if it's actually possible to hide a OSXFUSE volume at all.

    enhancement 
    opened by philchristensen 2
  • mksquashfs: -force-gid invalid gid or unknown group

    mksquashfs: -force-gid invalid gid or unknown group

    I just ran make_xar --python /usr/lib/python3.7/site-packages/IPython --output ipython.xar on Manjaro Linux (Arch derivative) and got this output:

    make_xar --python /usr/lib/python3.7/site-packages/
    IPython --output ipython.xar                                                                     
    2019-11-12 21:01:04,679 INFO Squashing /tmp/tmpgk_12zc1 to /tmp/tmp4pyijqfo
    mksquashfs: -force-gid invalid gid or unknown group      
    Traceback (most recent call last):                                                               
      File "/home/redacted/.local/bin/make_xar", line 10, in <module>
        sys.exit(main())                                                                             
      File "/home/redacted/.local/lib/python3.7/site-packages/xar/make_xar.py", line 147, in main
        xar.build(opts.output, squashfs_options)                                                     
      File "/home/redacted/.local/lib/python3.7/site-packages/xar/xar_builder.py", line 269, in build
        self._staging, tmp_xar, self._shebang, xar_header, squashfs_options
      File "/home/redacted/.local/lib/python3.7/site-packages/xar/xar_builder.py", line 224, in _build_st
    aging_dir                                                                                        
        xar.go()
      File "/home/redacted/.local/lib/python3.7/site-packages/xar/xar_util.py", line 104, in go
        subprocess.check_call(cmd)
      File "/usr/lib/python3.7/subprocess.py", line 347, in check_call
        raise CalledProcessError(retcode, cmd)
    subprocess.CalledProcessError: Command '['mksquashfs', '/tmp/tmpgk_12zc1', '/tmp/tmp5mqduxu2', '-
    noappend', '-noI', '-noX', '-force-uid', 'nobody', '-force-gid', 'nogroup', '-b', '262144', '-com
    p', 'gzip']' returned non-zero exit status 1.
    
    documentation 
    opened by JeffCarpenter 3
  • Instead of invoking squashfuse_ll link with library

    Instead of invoking squashfuse_ll link with library

    The Ubuntu package contains the libsquashfuse_ll.so dynamic library. It is possible to use it instead of the executable itself for xarexec_fuse. We shouldn't wait for debian to package this binary to move forward.

    question 
    opened by thedrow 15
  • how can I embed python binary to xar

    how can I embed python binary to xar

    want to deploy python apps with xar, but need to include python 3.7 binary to support old centos6. used pex to build to that usage. but xar seems dose not include python binary itself. how can I do that?

    enhancement 
    opened by darjeeling 0
Releases(20.12.2)
Owner
Facebook Incubator
We work hard to contribute our work back to the web, mobile, big data, & infrastructure communities. NB: members must have two-factor auth.
Facebook Incubator
A library and tool for generating .pex (Python EXecutable) files

PEX Contents Overview Installation Simple Examples Integrating pex into your workflow Documentation Development Contributing Overview pex is a library

Pants Build 2.2k Jan 1, 2023
This repository contains various tools useful for offensive operations (reversing, etc) regarding the PE (Portable Executable) format

PE-Tools This repository contains various tools useful for offensive operations (reversing, etc) regarding the PE (Portable Executable) format Install

stark0de 4 Oct 13, 2022
The Internet Archive Research Assistant - Daily search Internet Archive for new items matching your keywords

The Internet Archive Research Assistant - Daily search Internet Archive for new items matching your keywords

Kay Savetz 60 Dec 25, 2022
The LiberaPay archive module for the SeanPM life archive project.

By: Top README.md Read this article in a different language Sorted by: A-Z Sorting options unavailable ( af Afrikaans Afrikaans | sq Shqiptare Albania

Sean P. Myrick V19.1.7.2 1 Aug 26, 2022
Archive-Crack - A Tools for crack file archive

Install In TERMUX > apt update && apt upgrade -y > pkg install python git unrar

X - MrG3P5 10 Oct 6, 2022
Cloud-optimized, single-file archive format for pyramids of map tiles

PMTiles PMTiles is a single-file archive format for tiled data. A PMTiles archive can be hosted on a commodity storage platform such as S3, and enable

Protomaps 325 Jan 4, 2023
A Python module and command line utility for working with web archive data using the WACZ format specification

py-wacz The py-wacz repository contains a Python module and command line utility for working with web archive data using the WACZ format specification

Webrecorder 14 Oct 24, 2022
Nuitka Organization 8k Jan 7, 2023
A library and tool for generating .pex (Python EXecutable) files

PEX Contents Overview Installation Simple Examples Integrating pex into your workflow Documentation Development Contributing Overview pex is a library

Pants Build 2.2k Jan 1, 2023
Mysterium the first tool which permits you to retrieve the most part of a Python code even the .py or .pyc was extracted from an executable file, even it is encrypted with every existing encryptage. Mysterium don't make any difference between encrypted and non encrypted files, it can retrieve code from Pyarmor or .pyc files.

Mysterium the first tool which permits you to retrieve the most part of a Python code even the .py or .pyc was extracted from an executable file, even it is encrypted with every existing encryptage. Mysterium don't make any difference between encrypted and non encrypted files, it can retrieve code from Pyarmor or .pyc files.

Venax 116 Dec 21, 2022
Written in Python, freezed into stand-alone executable with PyInstaller. This app will make sure you stay in New World without getting kicked for inactivity.

New World - AFK Written in Python, freezed into stand-alone executable with PyInstaller. This app will make sure you stay in New World without getting

Rodney 5 Oct 31, 2021
PyPacker: a dumb little script for turning Python apps into standalone executable packages on Windows

PyPacker: a dumb little script for turning Python apps into standalone executable packages on Windows PyPacker is my attempt at creating a way to make

Serdar Yegulalp 9 Mar 15, 2022
GUI wrapper designed for convenient service work with TI CC1352/CC2538/CC2652 based Zigbee sticks or gateways. Packed into single executable file

ZigStar GW Multi tool is GUI wrapper firtsly designed for convenient service work with Zig Star LAN GW, but now supports any TI CC1352/CC2538/CC2652 b

null 133 Jan 1, 2023
This is python script that will extract the functions call in all used DLL in an executable and then provide a mapping of those functions to the attack classes defined and curated malapi.io.

F2Amapper This is python script that will extract the functions call in all used DLL in an executable and then provide a mapping of those functions to

Ajit Kumar 3 Sep 3, 2022
A python script to run any executable and pass test cases to it's stdin and compare stdout with correct output.

quera_testcase_checker A python script to run any executable and pass test cases to it's stdin and compare stdout with correct output. proper way to u

k3y1 1 Nov 15, 2021
Compiles python selenium script to be a Window's executable

Problem Statement Setting up a Python project can be frustrating for non-developers. From downloading the right version of python, setting up virtual

Jerry Ng 8 Jan 9, 2023
This repo explains in details about buffer overflow exploit development for windows executable.

Buffer Overflow Exploit Development For Beginner Introduction I am beginner in security community and as my fellow beginner, I spend some of my time a

cris_0xC0 11 Dec 17, 2022
Better-rtti-parser - IDA script to parse RTTI information in executable

RTTI parser Parses RTTI information from executable. Example HexRays decompiler view Before: After: Functions window Before: After: Structs window Ins

null 101 Jan 4, 2023
A Python script to download PDB files associated with a Portable Executable (PE)

A Python script to download PDB files associated with a Portable Executable (PE)

Podalirius 33 Jan 3, 2023
Doughskript interpreter for converting simple command sequences into executable Arduino C++ code.

Doughskript interpreter for converting simple command sequences into executable Arduino C++ code.

Svjatoslav 2 Jan 11, 2022