* Remove macros checking for CS_API_VERSION 3
* Remove CS 3 from meson_options and subprojects.
* Remove Capstone v3 from CI
* Remove CS_API_VERSION >= 4 checks since always true from now on.
* Add CSv5 workflow to CI.
* Handle ARM pre v6 build errors.
* Fix PPC build errors for CS < v6
* Fix correct macro name
* Remove wrong include.
* Fix fallthrough warning
* Fix getter macros for WB and post-fix flags.
* Fix faulty macro name
* Check for all float extensions for vabs.
* Add return to assert cases.
* Update cs to 46154e8605aaefdcca5fecf4ea88b92db5a40ad3
* Remove cs3 wrap file.
---------
Co-authored-by: wargio <wargio@libero.it>
ARM
- Updated ARM identifiers and API changes.
- Fixed shift amounts to be always decimal.
- Fixed incorrect usages of memory disponents.
- Fixed restoring of condition codes.
- Updated IDs for new ones.
- Fixed 8-byte stores.
- Added flag checking for MOV with shifts.
Capstone Integration
- Removed capstone-auto-sync subproject and replaced with next.
- Checked for NEON features.
- Used https://github.com/capstone-engine/capstone/pull/2122 for better system operand support.
- Distinguished between 32 and 64-bit cc checks.
- Checked for CS API version >5.
- Checked for CS_NEXT_VERSION instead of CS_API_MAJOR.
- Fixed VSTn and VLDn instructions to use corrected memory operands.
- Excluded multiple instruction aliases that are no longer valid IDs.
- Used CS_NEXT_VERSION as include guard.
- Added CS v6 include guards.
- Added CS v6 support to branch conditions for Rzil.
- Added more CSv6 guards.
PPC
- Fixed: Compare instructions do not use the branch predicate.
- Fixed conditional and CTR checks.
- Fixed MTSPR and MFSPR instructions.
- Excluded more branch aliases no longer present in v6 from switch cases.
- Fixed incorrectly assigned variables.
- Fixed condition checks for branches.
- Used ITE for condition checks, to prevent unnecessary reads of CTR or CR.
- Fixed rzil tests with new semantics using register 0.
- Updated include guards for Capstone versions to use CS_NEXT_VERSION.
- Initialized spr_name to prevent uninitialized use.
- Used mem.offset register for CSv6.
- Always used real operand details.
- Used mem operand for DCBZ.
- Fixed tests that are semantically identical.
- Handled LI LIS alias.
- Fixed rzil tests (with simplified semantics).
- Fixed branch alias with new cond test method.
- Handled clrl. alias.
- Handled SL/SR alias.
- Fixed conditional branches in ESIL.
- Fixed possible multiplication result overflow.
- Added RZ_NONNULL.
- Added 0 register.
- Handled LIS alias.
- Fixed: Print crX reg name in CS v6.
- Handled all general branch instructions into a single case statement.
- Fixed no semantic issues in tests.
- Added newly discovered calls.
- Moved direction check to inline function.
- Added link of root cause for broken test.
- Added QPX support.
- Set Capstone next branch to latest commit.
- Fixed uninitialized warning.
- Set CS next branch to newest commit.
* core/cmd: Adjust math commands
* shell: make `?x` commands a parsing failure
We have moved the `?x` commands to `%x`, thus now no command should
start with `?`. This patch makes the parser fail to parse `?x`
strings.
* core/tui: use APIs in panels
* There's no `%q` anymore, use `%=`
Functions like MEM_read32 could still perform unaligned accesses on
OpenBSD/sparc64 with gcc, possibly related to gcc bug 51628. The
solution is to switch to a safe memcpy-based solution and let the
compiler do any optimizations.
Apple Clang 4.2 on Mac OS X 10.7 Lion does support avx2, but it has
issues with some of the asm syntax used, in particular jc and some mov
syntax.
So we add an additional check for a short assembly snippet.
The test for avx512 could result in false-positives because the
_mm256_setr_epi64x intrinsic requires only AVX, not AVX512. Specifically what
is needed here is AVX512VL.
In addition, not passing the -mavx* args to the asm compilation failed the
build on macOS High Sierra and below (Apple LLVM version 10.0.0,
clang-1000.11.45.5)
This commit rewrites completely how RzBinPlugin are used to load info
into the RzBinObject structure.
Main changes are:
- Avoid looping multiple times to set the same data:
now the data is cycled only once to rebase addresses, demangle strings
and to make each loaded structure similar to each other.
- rz_bin_demangle is now demangling only strings:
the old implementation was a hack over a hack to add classes & methods
into the RzBinObject while demangling a string.
This allowed methods and classes to be added to RzBinObject when for
example invoking `is` or other printing commands.
This was meant to be an "optimization" to avoid looping and doing
things on-the-fly.
- Now the demangling is done after guessing the language used in the bin.
This is done to avoid looping to various demanglers hoping that a
string is going to be correctly demangled.
After each string is demangled, the string is given to the language
related function which adds classes, methods and fields into the
RzBinObject fields.
- Swift handling is a special case, since the demangler can be disabled
via -Duse_swift_demangler.
The issue with the swift demangler is that is not correctly demangling
strings and outputting swift code, but instead is creating something
that sometimes works, sometimes doesn't.
Also the old code only added fields and never methods for "reasons",
and the new code just uses what the old code was doing as is.
- The new code also takes advantage of the language detection, which now
happens before the demangling of symbols, imports and relocs.
* Improve cmd_help.yaml and fix a small bug
* Add support for 64bit random numbers
* Make a distinction between 32- and 64-bit PRNG
* Add documentation for new functions
* Change the RBTree test to use 32-bit random numbers
* cmd: Fix summary of few "L" sub-commands
* util: start decluttering plugins handling
- Add Doxygen docs
- Remove unused API functions and make others internal only
- Use RzLibType enum for plugin type instead of int
* util: move dlopen/dlsym/dlclose to rz_sys
* util: make rz_lib_open/close return bool
* util: simplify rz_lib_add_handler and rz_lib_open*
* libs: implement rz_*_plugin_del to remove a plugin
* core: remove commands from RzCmd when removing plugins
* librz: call plugins 'fini' method when removing a plugin
* core/cmd: do not fail if the hashmap removal fails
When removing a group command, the inner command might have the same
name, thus it would result in trying to remove the same name twice.
Ignore it, as it is fine.
* librz: make RzCrypto plugins handling like the others
* librz/crypto: add rz_crypto_reset and use it
* librz: allocate the plugin structures before adding them