mirror of
https://github.com/vtil-project/VTIL-Core
synced 2026-08-17 08:23:03 -04:00
Merge pull request #63 from vtil-project/gh-actions
Switch to GitHub Actions
This commit is contained in:
commit
36ae17d153
8 changed files with 85 additions and 78 deletions
42
.github/workflows/build.yml
vendored
Normal file
42
.github/workflows/build.yml
vendored
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
name: CMake
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
# Skip building pull requests from the same repository
|
||||
if: ${{ github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [windows-2019, ubuntu-20.04, macos-11]
|
||||
env:
|
||||
BUILD_TYPE: Release
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Install ninja-build tool
|
||||
uses: seanmiddleditch/gha-setup-ninja@v3
|
||||
|
||||
- name: Enable Developer Command Prompt
|
||||
if: ${{ runner.os == 'Windows' }}
|
||||
uses: ilammy/msvc-dev-cmd@v1.7.0
|
||||
|
||||
- name: Set up GCC
|
||||
if: ${{ runner.os == 'Linux' }}
|
||||
uses: egor-tensin/setup-gcc@v1
|
||||
with:
|
||||
version: 11
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} -DVTIL_BUILD_TESTS=ON
|
||||
cmake --build build --config ${{ env.BUILD_TYPE }} --parallel
|
||||
|
||||
- name: Test
|
||||
run: |
|
||||
ctest --version
|
||||
cd build
|
||||
ctest . -C ${{ env.BUILD_TYPE }} --verbose
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -379,3 +379,5 @@ build/
|
|||
|
||||
## Intel VTune
|
||||
VTune Results/
|
||||
cmake-build-*/
|
||||
.idea/
|
||||
|
|
|
|||
33
.travis.yml
33
.travis.yml
|
|
@ -1,33 +0,0 @@
|
|||
language: cpp
|
||||
|
||||
os: linux
|
||||
dist: bionic
|
||||
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- sourceline: 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-10 main'
|
||||
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
|
||||
- sourceline: 'deb https://apt.kitware.com/ubuntu/ xenial main'
|
||||
key_url: 'https://apt.kitware.com/keys/kitware-archive-latest.asc'
|
||||
update: true
|
||||
packages:
|
||||
- clang++-10
|
||||
- clang-10
|
||||
- libc++-10-dev
|
||||
- libc++abi-10-dev
|
||||
- cmake
|
||||
- cmake-data
|
||||
- ninja-build
|
||||
|
||||
script:
|
||||
# Fix issue caused by previous cmake version.
|
||||
- alias cmake='/usr/bin/cmake'
|
||||
- /usr/bin/cmake --version
|
||||
|
||||
# Build and run tests.
|
||||
- mkdir build
|
||||
- cd build
|
||||
- /usr/bin/cmake -G Ninja -DCMAKE_C_COMPILER=clang-10 -DCMAKE_CXX_COMPILER=clang++-10 -DCMAKE_CXX_FLAGS="-stdlib=libc++" -DVTIL_BUILD_TESTS=ON ..
|
||||
- ninja -j8
|
||||
- ./VTIL-Tests/VTIL-Tests
|
||||
|
|
@ -30,4 +30,6 @@ add_subdirectory(VTIL)
|
|||
# Tests
|
||||
if(VTIL_BUILD_TESTS)
|
||||
add_subdirectory(VTIL-Tests)
|
||||
enable_testing()
|
||||
add_test(NAME VTIL-Tests COMMAND "$<TARGET_FILE:VTIL-Tests>")
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -7,14 +7,11 @@
|
|||
<h1 align="center">VTIL</h1>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://travis-ci.com/vtil-project/VTIL-Core">
|
||||
<img src="https://img.shields.io/travis/com/vtil-project/vtil-core/master.svg?logo=travis&style=flat-square" alt="travis-ci"/>
|
||||
</a>
|
||||
<a href="https://ci.appveyor.com/project/can1357/vtil-core">
|
||||
<img src="https://img.shields.io/appveyor/build/can1357/VTIL-Core?logo=appveyor&style=flat-square" alt="appveyor-ci"/>
|
||||
<a href="https://github.com/vtil-project/VTIL-Core/actions/workflows/build.yml">
|
||||
<img alt="github-actions" src="https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fvtil-project%2FVTIL-Core%2Fbadge&style=flat-square"/>
|
||||
</a>
|
||||
<a href="https://github.com/vtil-project/vtil-core/blob/master/LICENSE.md">
|
||||
<img src="https://img.shields.io/github/license/vtil-project/vtil-core.svg?style=flat-square" alt="license"/>
|
||||
<img alt="license" src="https://img.shields.io/github/license/vtil-project/vtil-core.svg?style=flat-square"/>
|
||||
</a>
|
||||
<a href="https://discord.gg/VdMdkze">
|
||||
<img alt="discord" src="https://img.shields.io/discord/724300992023232533?label=chat&logo=Discord&style=flat-square">
|
||||
|
|
|
|||
|
|
@ -148,21 +148,20 @@ namespace vtil
|
|||
|
||||
// Default constructor / move / copy.
|
||||
//
|
||||
register_desc() = default;
|
||||
register_desc( register_desc&& ) = default;
|
||||
register_desc( const register_desc& ) = default;
|
||||
register_desc& operator=( register_desc&& ) = default;
|
||||
register_desc& operator=( const register_desc& ) = default;
|
||||
constexpr register_desc() = default;
|
||||
constexpr register_desc( register_desc&& ) = default;
|
||||
constexpr register_desc( const register_desc& ) = default;
|
||||
constexpr register_desc& operator=( register_desc&& ) = default;
|
||||
constexpr register_desc& operator=( const register_desc& ) = default;
|
||||
|
||||
// Construct a fully formed register.
|
||||
//
|
||||
register_desc( weak_id id, bitcnt_t bit_count, bitcnt_t bit_offset = 0 )
|
||||
constexpr register_desc( weak_id id, bitcnt_t bit_count, bitcnt_t bit_offset = 0 )
|
||||
: flags( ( register_flag ) id.flags ), combined_id( id.cid ), bit_count( bit_count ), bit_offset( bit_offset )
|
||||
{
|
||||
is_valid( true );
|
||||
}
|
||||
|
||||
register_desc( uint32_t flags, uint64_t id, bitcnt_t bit_count, bitcnt_t bit_offset = 0, uint64_t architecture = architecture_default )
|
||||
constexpr register_desc( uint32_t flags, uint64_t id, bitcnt_t bit_count, bitcnt_t bit_offset = 0, uint64_t architecture = 0 )
|
||||
: flags( ( register_flag ) flags ), local_id( id ), bit_count( bit_count ), bit_offset( bit_offset ), architecture( architecture )
|
||||
{
|
||||
is_valid( true );
|
||||
|
|
@ -173,7 +172,7 @@ namespace vtil
|
|||
|
||||
// Returns whether the descriptor is valid or not.
|
||||
//
|
||||
bool is_valid( bool force = false ) const
|
||||
constexpr bool is_valid( bool force = false ) const
|
||||
{
|
||||
// Validate bit count and offset.
|
||||
//
|
||||
|
|
@ -246,26 +245,26 @@ namespace vtil
|
|||
|
||||
// Simple helpers to determine some properties.
|
||||
//
|
||||
bool is_flags() const { return flags & register_flags; }
|
||||
bool is_undefined() const { return flags & register_undefined; }
|
||||
bool is_local() const { return flags & register_local; }
|
||||
bool is_global() const { return ( ~flags ) & register_local; }
|
||||
bool is_virtual() const { return ( ~flags ) & register_physical; }
|
||||
bool is_physical() const { return flags & register_physical; }
|
||||
bool is_volatile() const { return flags & register_volatile; }
|
||||
bool is_read_only() const { return flags & register_readonly; }
|
||||
bool is_stack_pointer() const { return flags & register_stack_pointer; }
|
||||
bool is_image_base() const { return flags & register_image_base; }
|
||||
bool is_special() const { return flags & register_special; }
|
||||
bool is_internal() const { return ( flags & register_internal ) == register_internal; }
|
||||
constexpr bool is_flags() const { return flags & register_flags; }
|
||||
constexpr bool is_undefined() const { return flags & register_undefined; }
|
||||
constexpr bool is_local() const { return flags & register_local; }
|
||||
constexpr bool is_global() const { return ( ~flags ) & register_local; }
|
||||
constexpr bool is_virtual() const { return ( ~flags ) & register_physical; }
|
||||
constexpr bool is_physical() const { return flags & register_physical; }
|
||||
constexpr bool is_volatile() const { return flags & register_volatile; }
|
||||
constexpr bool is_read_only() const { return flags & register_readonly; }
|
||||
constexpr bool is_stack_pointer() const { return flags & register_stack_pointer; }
|
||||
constexpr bool is_image_base() const { return flags & register_image_base; }
|
||||
constexpr bool is_special() const { return flags & register_special; }
|
||||
constexpr bool is_internal() const { return ( flags & register_internal ) == register_internal; }
|
||||
|
||||
// Returns the mask for the bits that this register's value would occupy in a 64-bit register.
|
||||
//
|
||||
uint64_t get_mask() const { return math::fill( bit_count, bit_offset ); }
|
||||
constexpr uint64_t get_mask() const { return math::fill( bit_count, bit_offset ); }
|
||||
|
||||
// Checks whether bits from this register and the other register overlap.
|
||||
//
|
||||
bool overlaps( const register_desc& o ) const
|
||||
constexpr bool overlaps( const register_desc& o ) const
|
||||
{
|
||||
if ( local_id != o.local_id || architecture != o.architecture || flags != o.flags )
|
||||
return false;
|
||||
|
|
@ -274,15 +273,15 @@ namespace vtil
|
|||
|
||||
// Simple wrappers to resize/rebase a register.
|
||||
//
|
||||
register_desc select( bitcnt_t new_bit_count, bitcnt_t new_bit_offset ) const
|
||||
constexpr register_desc select( bitcnt_t new_bit_count, bitcnt_t new_bit_offset ) const
|
||||
{
|
||||
return { flags, local_id, new_bit_count, new_bit_offset, architecture };
|
||||
}
|
||||
register_desc rebase( bitcnt_t new_bit_offset ) const
|
||||
constexpr register_desc rebase( bitcnt_t new_bit_offset ) const
|
||||
{
|
||||
return select( bit_count, new_bit_offset );
|
||||
}
|
||||
register_desc resize( bitcnt_t new_bit_count ) const
|
||||
constexpr register_desc resize( bitcnt_t new_bit_count ) const
|
||||
{
|
||||
return select( new_bit_count, bit_offset );
|
||||
}
|
||||
|
|
@ -395,12 +394,12 @@ namespace vtil
|
|||
|
||||
// VTIL special registers.
|
||||
//
|
||||
static register_desc UNDEFINED = { register_volatile | register_undefined, 0, arch::bit_count };
|
||||
static register_desc REG_IMGBASE = { register_readonly | register_image_base, 0, arch::bit_count };
|
||||
static register_desc REG_FLAGS = { register_physical | register_flags, 0, arch::bit_count };
|
||||
static register_desc REG_SP = { register_physical | register_stack_pointer, 0, arch::bit_count };
|
||||
static constexpr register_desc UNDEFINED = { register_volatile | register_undefined, 0, arch::bit_count };
|
||||
static constexpr register_desc REG_IMGBASE = { register_readonly | register_image_base, 0, arch::bit_count };
|
||||
static constexpr register_desc REG_FLAGS = { register_physical | register_flags, 0, arch::bit_count };
|
||||
static constexpr register_desc REG_SP = { register_physical | register_stack_pointer, 0, arch::bit_count };
|
||||
|
||||
// Helper to make undefined of N bits.
|
||||
//
|
||||
static register_desc make_undefined( bitcnt_t sz ) { return UNDEFINED.select( sz, 0 ); }
|
||||
static constexpr register_desc make_undefined( bitcnt_t sz ) { return UNDEFINED.select( sz, 0 ); }
|
||||
};
|
||||
|
|
@ -66,7 +66,11 @@ namespace vtil
|
|||
{
|
||||
static constexpr size_t max_entry_count = ( size_t ) limit;
|
||||
static constexpr size_t max_xref_count = 8;
|
||||
#ifdef __GNUC__ // There is a very weird bug in gcc-11 that breaks this
|
||||
static constexpr size_t invalid_xref = 0;
|
||||
#else
|
||||
static constexpr size_t invalid_xref = ( size_t ) ~0ull;
|
||||
#endif // __GNUC__
|
||||
|
||||
// Type of entries provided in the constructor.
|
||||
//
|
||||
|
|
@ -90,6 +94,8 @@ namespace vtil
|
|||
{
|
||||
for ( auto&& [id, entry] : entries )
|
||||
{
|
||||
fassert( id != invalid_xref );
|
||||
|
||||
// Must be the only reference to it.
|
||||
//
|
||||
auto& entry_n = linear_entries[ ( size_t ) id ];
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
version: 1.0.{build}
|
||||
image: Visual Studio 2019
|
||||
build_script:
|
||||
- cmd: mkdir build && cd build
|
||||
- cmd: cmake -DVTIL_BUILD_TESTS=ON ..
|
||||
- cmd: cmake --build . --config Release
|
||||
test_script:
|
||||
- cmd: VTIL-Tests\Release\VTIL-Tests.exe
|
||||
Loading…
Add table
Add a link
Reference in a new issue