mirror of
https://github.com/radareorg/radare2
synced 2026-08-22 20:23:32 -04:00
Add opt-in Zydis x86 arch plugin ##arch
* Disable Zydis in Fil-C builds ##ci * Link bundled Zydis in static builds ##ci * Keep Capstone as default x86 plugin
This commit is contained in:
parent
ad6f48b46c
commit
da408b47c7
46 changed files with 70769 additions and 14 deletions
|
|
@ -44,6 +44,9 @@ LINK+=$(SHLR)/../subprojects/otezip/libotezip.a
|
|||
endif
|
||||
LINK+=$(SHLR)/gdb/lib/libgdbr.a
|
||||
LINK+=$(CS_LDFLAGS)
|
||||
ifneq ($(filter p/x86_zydis.mk,$(STATIC_ARCH_PLUGINS)),)
|
||||
LINK+=$(ZYDIS_LDFLAGS)
|
||||
endif
|
||||
LINK+=$(SHLR)/../subprojects/sdb/src/libsdb.a
|
||||
|
||||
# instead of libr.a
|
||||
|
|
@ -72,11 +75,17 @@ else ifeq (${COMPILER},wasm)
|
|||
LINK+=$(SHLR)/libr_shlr.a
|
||||
LINK+=$(SHLR)/../subprojects/sdb/src/libsdb.a
|
||||
LINK+=$(CS_LDFLAGS)
|
||||
ifneq ($(filter p/x86_zydis.mk,$(STATIC_ARCH_PLUGINS)),)
|
||||
LINK+=$(ZYDIS_LDFLAGS)
|
||||
endif
|
||||
EXT_EXE=.wasm
|
||||
else ifeq (${COMPILER},emscripten)
|
||||
LINK+=$(SHLR)/libr_shlr.a
|
||||
LINK+=$(SHLR)/../subprojects/sdb/src/libsdb.a
|
||||
LINK+=$(CS_LDFLAGS)
|
||||
ifneq ($(filter p/x86_zydis.mk,$(STATIC_ARCH_PLUGINS)),)
|
||||
LINK+=$(ZYDIS_LDFLAGS)
|
||||
endif
|
||||
CFLAGS+= -s SIDE_MODULE=1
|
||||
#CFLAGS+=-s ERROR_ON_UNDEFINED_SYMBOLS=0
|
||||
#EXT_EXE=.js
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ HAVE_FORK=@HAVE_FORK@
|
|||
WANT_QJS=@WANT_QJS@
|
||||
WANT_DYLINK=@WANT_DYLINK@
|
||||
WANT_CAPSTONE=@WANT_CAPSTONE@
|
||||
WANT_ZYDIS=@WANT_ZYDIS@
|
||||
WITH_STATIC_THEMES=@WITH_STATIC_THEMES@
|
||||
WITH_LIBR=@WITH_LIBR@
|
||||
|
||||
|
|
@ -96,6 +97,22 @@ CAPSTONE_CFLAGS=
|
|||
CAPSTONE_LDFLAGS=
|
||||
endif
|
||||
|
||||
# zydis
|
||||
ifeq ($(WANT_ZYDIS),1)
|
||||
USE_ZYDIS=@USE_ZYDIS@
|
||||
USE_SYS_ZYDIS=@USE_SYS_ZYDIS@
|
||||
else
|
||||
USE_ZYDIS=0
|
||||
USE_SYS_ZYDIS=0
|
||||
endif
|
||||
ifeq ($(USE_ZYDIS),1)
|
||||
CONFIG_ZYDIS_CFLAGS=@ZYDIS_CFLAGS@
|
||||
CONFIG_ZYDIS_LDFLAGS=@ZYDIS_LDFLAGS@
|
||||
else
|
||||
CONFIG_ZYDIS_CFLAGS=
|
||||
CONFIG_ZYDIS_LDFLAGS=
|
||||
endif
|
||||
|
||||
HAVE_LIB_GMP=@HAVE_LIB_GMP@
|
||||
HAVE_LIB_SSL=@HAVE_OPENSSL@
|
||||
WANT_SSL_CRYPTO=@WANT_SSL_CRYPTO@
|
||||
|
|
|
|||
48
configure
vendored
48
configure
vendored
|
|
@ -30,6 +30,7 @@ HAVE_FORK=1
|
|||
WANT_PTRACE_WRAP=1
|
||||
WANT_GPERF=1
|
||||
WANT_CAPSTONE=1
|
||||
WANT_ZYDIS=1
|
||||
WITH_LIBR=0
|
||||
WITH_STATIC_THEMES=0
|
||||
USE_CSNEXT=0
|
||||
|
|
@ -37,6 +38,8 @@ USE_CS5=0
|
|||
USE_CS4=0
|
||||
WITH_CAPSTONE=0
|
||||
WITHOUT_SYSCAPSTONE=1
|
||||
WITH_ZYDIS=0
|
||||
WITHOUT_SYSZYDIS=1
|
||||
WITH_SQSH=1
|
||||
WITH_SYSLZ4=0
|
||||
WANT_ZIP=1
|
||||
|
|
@ -225,6 +228,7 @@ Optional Features:
|
|||
--without-ptrace-wrap build ptrace-wrap support needed for the iaito debugger on Linux
|
||||
--without-gperf do not statically link the sdb databases even if gperf is found
|
||||
--without-capstone dont build the capstone dependency
|
||||
--without-zydis dont build the zydis dependency
|
||||
--with-libr build libr.a and libr.dylib
|
||||
--with-static-themes default themes are compiled and fallback if not available on disk
|
||||
--with-capstone-next build next branch of the capstone disassembler
|
||||
|
|
@ -232,6 +236,8 @@ Optional Features:
|
|||
--with-capstone4 build v4 branch of capstone
|
||||
--with-syscapstone force to use system-wide capstone
|
||||
--without-syscapstone avoid the system-wide capstone
|
||||
--with-syszydis force to use system-wide zydis
|
||||
--without-syszydis avoid the system-wide zydis
|
||||
--without-sqsh ensure squashfs support is not included, even if library is found
|
||||
--with-syslz4 force to use system's liblz4
|
||||
--without-zip build without the ZIP/ZLIB support
|
||||
|
|
@ -326,8 +332,8 @@ echo "DESCRIPTION: The UNIX-like reverse engineering toolkit"
|
|||
echo "LANGS: c"
|
||||
echo "REQUIRED: libdl"
|
||||
echo "OPTIONAL: libatomic libmagic libz libzip libxxhash libssl liblibuv>=1.0.0"
|
||||
echo "PKGCONFIG: capstone libsqsh liblz4 openssl libuv"
|
||||
echo "FLAGS: --disable-debugger --with-libatomic --with-sysmagic --disable-threads --disable-loadlibs --enable-threadsafety --without-qjs --without-dylink --without-fork --without-ptrace-wrap --without-gperf --without-capstone --with-libr --with-static-themes --with-capstone-next --with-capstone5 --with-capstone4 --with-syscapstone --without-syscapstone --without-sqsh --with-syslz4 --without-zip --with-syszip --with-sysxxhash --without-gpl --with-ssl --with-ssl-crypto --with-libuv --with-v35 --with-wasm-browser --with-rpath --with-bundle-prefix --with-compiler=gcc --with-ostype=auto --with-libversion=xxx --without-jemalloc --with-checks-level=2 --disable-debug-stuff"
|
||||
echo "PKGCONFIG: capstone zydis libsqsh liblz4 openssl libuv"
|
||||
echo "FLAGS: --disable-debugger --with-libatomic --with-sysmagic --disable-threads --disable-loadlibs --enable-threadsafety --without-qjs --without-dylink --without-fork --without-ptrace-wrap --without-gperf --without-capstone --without-zydis --with-libr --with-static-themes --with-capstone-next --with-capstone5 --with-capstone4 --with-syscapstone --without-syscapstone --with-syszydis --without-syszydis --without-sqsh --with-syslz4 --without-zip --with-syszip --with-sysxxhash --without-gpl --with-ssl --with-ssl-crypto --with-libuv --with-v35 --with-wasm-browser --with-rpath --with-bundle-prefix --with-compiler=gcc --with-ostype=auto --with-libversion=xxx --without-jemalloc --with-checks-level=2 --disable-debug-stuff"
|
||||
exit 0
|
||||
;;
|
||||
--cache-file)
|
||||
|
|
@ -391,6 +397,7 @@ echo "FLAGS: --disable-debugger --with-libatomic --with-sysmagic --disable
|
|||
"--without-ptrace-wrap") WANT_PTRACE_WRAP="0"; ;;
|
||||
"--without-gperf") WANT_GPERF="0"; ;;
|
||||
"--without-capstone") WANT_CAPSTONE="0"; ;;
|
||||
"--without-zydis") WANT_ZYDIS="0"; ;;
|
||||
"--with-libr") WITH_LIBR="1"; ;;
|
||||
"--with-static-themes") WITH_STATIC_THEMES="1"; ;;
|
||||
"--with-capstone-next") USE_CSNEXT="1"; ;;
|
||||
|
|
@ -398,6 +405,8 @@ echo "FLAGS: --disable-debugger --with-libatomic --with-sysmagic --disable
|
|||
"--with-capstone4") USE_CS4="1"; ;;
|
||||
"--with-syscapstone") WITH_CAPSTONE="1"; ;;
|
||||
"--without-syscapstone") WITHOUT_SYSCAPSTONE="0"; ;;
|
||||
"--with-syszydis") WITH_ZYDIS="1"; ;;
|
||||
"--without-syszydis") WITHOUT_SYSZYDIS="0"; ;;
|
||||
"--without-sqsh") WITH_SQSH="0"; ;;
|
||||
"--with-syslz4") WITH_SYSLZ4="1"; ;;
|
||||
"--without-zip") WANT_ZIP="0"; ;;
|
||||
|
|
@ -434,7 +443,7 @@ parse_options "$1"
|
|||
shift
|
||||
done
|
||||
|
||||
ENVWORDS="MANDIR DESCRIPTION INFODIR LIBDIR INCLUDEDIR LOCALSTATEDIR ETCDIR SYSCONFDIR DATADIR DOCDIR LIBEXECDIR SBINDIR BINDIR EPREFIX PREFIX SPREFIX TARGET HOST BUILD INSTALL INSTALL_LIB INSTALL_MAN INSTALL_PROGRAM INSTALL_PROGRAM_STRIP INSTALL_DIR INSTALL_SCRIPT INSTALL_DATA HOST_OS HOST_CPU BUILD_OS BUILD_CPU TARGET_OS TARGET_CPU VERSION VERSION_MAJOR VERSION_MINOR VERSION_PATCH VERSION_NUMBER PKGCFG_LIBDIR PKGCFG_INCDIR PKGNAME VPATH CONTACT CONTACT_NAME CONTACT_MAIL CC CFLAGS CPPFLAGS LDFLAGS HAVE_LANG_C DEBUGGER HAVE_LIB_DL DL_LIBS PKGCONFIG R2_BUILDSYSTEM HAVE_PATCH PATCH HAVE_AR AR HAVE_GIT GIT HAVE_GPERF GPERF HAVE_LIB_ATOMIC HAVE_LIB_MAGIC HAVE_LINUX_CAN_H USE_LIB_ATOMIC LIBATOMIC USE_MAGIC USE_LIB_MAGIC LIBMAGIC WANT_THREADS LOADLIBS R_CRITICAL_ENABLED WANT_QJS WANT_DYLINK HAVE_FORK WANT_PTRACE_WRAP WANT_GPERF WANT_CAPSTONE WITH_LIBR WITH_STATIC_THEMES USE_CSNEXT USE_CS5 USE_CS4 WITH_CAPSTONE WITHOUT_SYSCAPSTONE CAPSTONE_CFLAGS CAPSTONE_LDFLAGS HAVE_PKGCFG_CAPSTONE USE_CAPSTONE SQSH_CFLAGS SQSH_LDFLAGS HAVE_PKGCFG_LIBSQSH WITH_SQSH USE_SQSH LZ4_CFLAGS LZ4_LDFLAGS HAVE_PKGCFG_LIBLZ4 WITH_SYSLZ4 USE_SYSLZ4 WANT_ZIP HAVE_LIB_Z HAVE_LIB_ZIP USE_ZIP USE_LIB_ZIP LIBZIP PKGCFG_ZLIBS PKGCFG_LIBZIPLIBS PKGCFG_R_ARCH_LIBS_PRIVATE PKGCFG_R_ASM_LIBS_PRIVATE PKGCFG_R_BIN_LIBS_PRIVATE PKGCFG_R_DEBUG_LIBS_PRIVATE PKGCFG_R_FS_LIBS_PRIVATE PKGCFG_R_IO_LIBS_PRIVATE PKGCFG_R_LANG_LIBS_PRIVATE PKGCFG_R_UTIL_LIBS_PRIVATE HAVE_LIB_XXHASH USE_XXHASH USE_LIB_XXHASH LIBXXHASH WITH_GPL HAVE_DECL_ADDR_NO_RANDOMIZE HAVE_DECL___GLIBC__ HAVE_ARC4RANDOM_UNIFORM HAVE_EXPLICIT_BZERO HAVE_EXPLICIT_MEMSET HAVE_CLOCK_NANOSLEEP HAVE___ATOMIC_FETCH_ADD_8 HAVE_SIGACTION HAVE_CLOCK_GETTIME FORCE_LIB_ATOMIC CLOCK_LDFLAGS SUPPORT_GNU99 HAVE_LIB_GMP WANT_SSL WANT_SSL_CRYPTO HAVE_OPENSSL SSL_CFLAGS SSL_LDFLAGS HAVE_LIB_SSL HAVE_PKGCFG_OPENSSL WANT_LIBUV HAVE_LIBUV_VERSION_1_0_0 LIBUV_CFLAGS LIBUV_LDFLAGS HAVE_PKGCFG_LIBUV HAVE_LIBUV WANT_V35 R2_WASM_BROWSER USE_RPATH USE_BUNDLE_PREFIX USERCC USEROSTYPE LIBVERSION HAVE_JEMALLOC HAVE_PTRACE USE_PTRACE_WRAP R_CHECKS_LEVEL WANT_DEBUGSTUFF"
|
||||
ENVWORDS="MANDIR DESCRIPTION INFODIR LIBDIR INCLUDEDIR LOCALSTATEDIR ETCDIR SYSCONFDIR DATADIR DOCDIR LIBEXECDIR SBINDIR BINDIR EPREFIX PREFIX SPREFIX TARGET HOST BUILD INSTALL INSTALL_LIB INSTALL_MAN INSTALL_PROGRAM INSTALL_PROGRAM_STRIP INSTALL_DIR INSTALL_SCRIPT INSTALL_DATA HOST_OS HOST_CPU BUILD_OS BUILD_CPU TARGET_OS TARGET_CPU VERSION VERSION_MAJOR VERSION_MINOR VERSION_PATCH VERSION_NUMBER PKGCFG_LIBDIR PKGCFG_INCDIR PKGNAME VPATH CONTACT CONTACT_NAME CONTACT_MAIL CC CFLAGS CPPFLAGS LDFLAGS HAVE_LANG_C DEBUGGER HAVE_LIB_DL DL_LIBS PKGCONFIG R2_BUILDSYSTEM HAVE_PATCH PATCH HAVE_AR AR HAVE_GIT GIT HAVE_GPERF GPERF HAVE_LIB_ATOMIC HAVE_LIB_MAGIC HAVE_LINUX_CAN_H USE_LIB_ATOMIC LIBATOMIC USE_MAGIC USE_LIB_MAGIC LIBMAGIC WANT_THREADS LOADLIBS R_CRITICAL_ENABLED WANT_QJS WANT_DYLINK HAVE_FORK WANT_PTRACE_WRAP WANT_GPERF WANT_CAPSTONE WANT_ZYDIS WITH_LIBR WITH_STATIC_THEMES USE_CSNEXT USE_CS5 USE_CS4 WITH_CAPSTONE WITHOUT_SYSCAPSTONE CAPSTONE_CFLAGS CAPSTONE_LDFLAGS HAVE_PKGCFG_CAPSTONE USE_CAPSTONE WITH_ZYDIS WITHOUT_SYSZYDIS ZYDIS_CFLAGS ZYDIS_LDFLAGS HAVE_PKGCFG_ZYDIS USE_ZYDIS USE_SYS_ZYDIS SQSH_CFLAGS SQSH_LDFLAGS HAVE_PKGCFG_LIBSQSH WITH_SQSH USE_SQSH LZ4_CFLAGS LZ4_LDFLAGS HAVE_PKGCFG_LIBLZ4 WITH_SYSLZ4 USE_SYSLZ4 WANT_ZIP HAVE_LIB_Z HAVE_LIB_ZIP USE_ZIP USE_LIB_ZIP LIBZIP PKGCFG_ZLIBS PKGCFG_LIBZIPLIBS PKGCFG_R_ARCH_LIBS_PRIVATE PKGCFG_R_ASM_LIBS_PRIVATE PKGCFG_R_BIN_LIBS_PRIVATE PKGCFG_R_DEBUG_LIBS_PRIVATE PKGCFG_R_FS_LIBS_PRIVATE PKGCFG_R_IO_LIBS_PRIVATE PKGCFG_R_LANG_LIBS_PRIVATE PKGCFG_R_UTIL_LIBS_PRIVATE HAVE_LIB_XXHASH USE_XXHASH USE_LIB_XXHASH LIBXXHASH WITH_GPL HAVE_DECL_ADDR_NO_RANDOMIZE HAVE_DECL___GLIBC__ HAVE_ARC4RANDOM_UNIFORM HAVE_EXPLICIT_BZERO HAVE_EXPLICIT_MEMSET HAVE_CLOCK_NANOSLEEP HAVE___ATOMIC_FETCH_ADD_8 HAVE_SIGACTION HAVE_CLOCK_GETTIME FORCE_LIB_ATOMIC CLOCK_LDFLAGS SUPPORT_GNU99 HAVE_LIB_GMP WANT_SSL WANT_SSL_CRYPTO HAVE_OPENSSL SSL_CFLAGS SSL_LDFLAGS HAVE_LIB_SSL HAVE_PKGCFG_OPENSSL WANT_LIBUV HAVE_LIBUV_VERSION_1_0_0 LIBUV_CFLAGS LIBUV_LDFLAGS HAVE_PKGCFG_LIBUV HAVE_LIBUV WANT_V35 R2_WASM_BROWSER USE_RPATH USE_BUNDLE_PREFIX USERCC USEROSTYPE LIBVERSION HAVE_JEMALLOC HAVE_PTRACE USE_PTRACE_WRAP R_CHECKS_LEVEL WANT_DEBUGSTUFF"
|
||||
|
||||
create_environ
|
||||
|
||||
|
|
@ -707,6 +716,37 @@ USE_CAPSTONE="0"
|
|||
HAVE_PKGCFG_CAPSTONE="0"
|
||||
CAPSTONE_CFLAGS=""
|
||||
CAPSTONE_LDFLAGS=""; fi
|
||||
if [ "$WITH_ZYDIS" = "1" ]; then
|
||||
if [ -z "${PKGCONFIG}" ]; then pkg-config --version >/dev/null 2>&1 ; if [ 0 = 0 ]; then PKGCONFIG=pkg-config ; else PKGCONFIG=pkgconf ; fi; fi
|
||||
printf 'checking pkg-config flags for zydis... '
|
||||
tmp=`${PKGCONFIG} --cflags zydis 2>/dev/null`
|
||||
if [ $? != 0 ]; then echo no ; HAVE_PKGCFG_ZYDIS=0;
|
||||
ZYDIS_CFLAGS='';ZYDIS_LDFLAGS='';
|
||||
else
|
||||
ZYDIS_CFLAGS=$tmp;
|
||||
tmp=`${PKGCONFIG} --libs zydis 2>/dev/null`
|
||||
if [ $? = 0 ]; then
|
||||
echo yes; HAVE_PKGCFG_ZYDIS=1;
|
||||
ZYDIS_LDFLAGS=$tmp; fi; fi; fi
|
||||
if [ 11 = "$WITH_ZYDIS$HAVE_PKGCFG_ZYDIS" ]; then
|
||||
|
||||
USE_ZYDIS="1"
|
||||
USE_SYS_ZYDIS="1"
|
||||
else
|
||||
USE_ZYDIS="0"
|
||||
USE_SYS_ZYDIS="0"; fi
|
||||
if [ "$WITHOUT_SYSZYDIS" = "0" ]; then
|
||||
USE_ZYDIS="0"
|
||||
USE_SYS_ZYDIS="0"
|
||||
HAVE_PKGCFG_ZYDIS="0"
|
||||
ZYDIS_CFLAGS=""
|
||||
ZYDIS_LDFLAGS=""; fi
|
||||
if [ "$WANT_ZYDIS" = "0" ]; then
|
||||
USE_ZYDIS="0"
|
||||
USE_SYS_ZYDIS="0"
|
||||
HAVE_PKGCFG_ZYDIS="0"
|
||||
ZYDIS_CFLAGS=""
|
||||
ZYDIS_LDFLAGS=""; fi
|
||||
if [ -z "${PKGCONFIG}" ]; then pkg-config --version >/dev/null 2>&1 ; if [ 0 = 0 ]; then PKGCONFIG=pkg-config ; else PKGCONFIG=pkgconf ; fi; fi
|
||||
printf 'checking pkg-config flags for libsqsh... '
|
||||
tmp=`${PKGCONFIG} --cflags libsqsh 2>/dev/null`
|
||||
|
|
@ -1122,7 +1162,7 @@ do_remove
|
|||
if [ "$QUIET" = 0 ]; then
|
||||
echo
|
||||
echo "Final report:"
|
||||
for A in BUILD CC CFLAGS DEBUGGER HAVE_ARC4RANDOM_UNIFORM HAVE_EXPLICIT_BZERO HAVE_EXPLICIT_MEMSET HAVE_FORK HAVE_GPERF HAVE_LIBUV HAVE_LIB_GMP WANT_DEBUGSTUFF HAVE_OPENSSL WANT_SSL_CRYPTO HAVE_PTRACE HOST LDFLAGS LIBVERSION PKGCONFIG PREFIX R_CHECKS_LEVEL TARGET USERCC USEROSTYPE USE_CAPSTONE USE_LIB_MAGIC USE_SQSH USE_LIB_XXHASH USE_LIB_ZIP USE_PTRACE_WRAP USE_SYSLZ4 VERSION WANT_DYLINK USE_LIB_ATOMIC HAVE___ATOMIC_FETCH_ADD_8 FORCE_LIB_ATOMIC WANT_QJS ; do
|
||||
for A in BUILD CC CFLAGS DEBUGGER HAVE_ARC4RANDOM_UNIFORM HAVE_EXPLICIT_BZERO HAVE_EXPLICIT_MEMSET HAVE_FORK HAVE_GPERF HAVE_LIBUV HAVE_LIB_GMP WANT_DEBUGSTUFF HAVE_OPENSSL WANT_SSL_CRYPTO HAVE_PTRACE HOST LDFLAGS LIBVERSION PKGCONFIG PREFIX R_CHECKS_LEVEL TARGET USERCC USEROSTYPE USE_CAPSTONE USE_LIB_MAGIC USE_SQSH USE_LIB_XXHASH USE_LIB_ZIP USE_PTRACE_WRAP USE_SYSLZ4 VERSION WANT_DYLINK USE_LIB_ATOMIC HAVE___ATOMIC_FETCH_ADD_8 FORCE_LIB_ATOMIC WANT_QJS WANT_ZYDIS USE_ZYDIS USE_SYS_ZYDIS ; do
|
||||
eval VAL="\$${A}"
|
||||
[ -z "${VAL}" ] && VAL="\"\""
|
||||
echo " - ${A} = ${VAL}"
|
||||
|
|
|
|||
|
|
@ -62,6 +62,18 @@ help () {
|
|||
|
||||
cfg=./plugins.cfg
|
||||
|
||||
want_zydis() {
|
||||
if [ -n "${WANT_ZYDIS:-}" ]; then
|
||||
echo "$WANT_ZYDIS"
|
||||
return
|
||||
fi
|
||||
if [ -f ./config-user.mk ]; then
|
||||
v=$(sed -n 's/^WANT_ZYDIS=//p' ./config-user.mk | tail -n 1)
|
||||
[ -n "$v" ] && echo "$v" && return
|
||||
fi
|
||||
echo 1
|
||||
}
|
||||
|
||||
if [ ! -f "$cfg" ]; then
|
||||
echo "configure-plugins: Copying dist/plugins-cfg/plugins.def.cfg"
|
||||
cp -f dist/plugins-cfg/plugins.def.cfg plugins.cfg
|
||||
|
|
@ -289,6 +301,8 @@ while : ; do
|
|||
TARGET_OSTYPE="${1#*=}"
|
||||
update_ext
|
||||
;;
|
||||
"--without-zydis") WANT_ZYDIS=0 ;;
|
||||
"--with-syszydis") WANT_ZYDIS=1 ;;
|
||||
"--without-gpl") DEFCFG=./plugins.nogpl.cfg ;;
|
||||
"--disable-loadlibs") LOADLIBS=0 ;;
|
||||
"--rm-static") RMSTATIC="$2" ; ;;
|
||||
|
|
@ -301,6 +315,10 @@ while : ; do
|
|||
done
|
||||
|
||||
load ${DEFCFG}
|
||||
if [ "$(want_zydis)" = 0 ]; then
|
||||
STATIC=$(sub "$STATIC" arch.x86_zydis)
|
||||
SHARED=$(sub "$SHARED" arch.x86_zydis)
|
||||
fi
|
||||
sort_vars
|
||||
|
||||
if [ - != "${RMSTATIC}" ]; then
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ ARG_WITHOUT HAVE_FORK fork disable fork ;
|
|||
ARG_WITHOUT WANT_PTRACE_WRAP ptrace-wrap build ptrace-wrap support needed for the iaito debugger on Linux ;
|
||||
ARG_WITHOUT WANT_GPERF gperf do not statically link the sdb databases even if gperf is found ;
|
||||
ARG_WITHOUT WANT_CAPSTONE capstone dont build the capstone dependency ;
|
||||
ARG_WITHOUT WANT_ZYDIS zydis dont build the zydis dependency ;
|
||||
|
||||
IFNOT WANT_GPERF {
|
||||
HAVE_GPERF = 0 ;
|
||||
|
|
@ -85,6 +86,35 @@ IFNOT WITHOUT_SYSCAPSTONE {
|
|||
CAPSTONE_LDFLAGS = "" ;
|
||||
}
|
||||
|
||||
(( ZYDIS ))
|
||||
ARG_WITH WITH_ZYDIS syszydis force to use system-wide zydis ;
|
||||
ARG_WITHOUT WITHOUT_SYSZYDIS syszydis avoid the system-wide zydis ;
|
||||
IF WITH_ZYDIS {
|
||||
PKGCFG ZYDIS_CFLAGS ZYDIS_LDFLAGS zydis
|
||||
}
|
||||
IFAND WITH_ZYDIS HAVE_PKGCFG_ZYDIS {
|
||||
USE_ZYDIS = 1 ;
|
||||
USE_SYS_ZYDIS = 1 ;
|
||||
}{
|
||||
USE_ZYDIS = 0 ;
|
||||
USE_SYS_ZYDIS = 0 ;
|
||||
}
|
||||
|
||||
IFNOT WITHOUT_SYSZYDIS {
|
||||
USE_ZYDIS = 0 ;
|
||||
USE_SYS_ZYDIS = 0 ;
|
||||
HAVE_PKGCFG_ZYDIS = 0 ;
|
||||
ZYDIS_CFLAGS = "" ;
|
||||
ZYDIS_LDFLAGS = "" ;
|
||||
}
|
||||
IFNOT WANT_ZYDIS {
|
||||
USE_ZYDIS = 0 ;
|
||||
USE_SYS_ZYDIS = 0 ;
|
||||
HAVE_PKGCFG_ZYDIS = 0 ;
|
||||
ZYDIS_CFLAGS = "" ;
|
||||
ZYDIS_LDFLAGS = "" ;
|
||||
}
|
||||
|
||||
(( SQSH ))
|
||||
PKGCFG SQSH_CFLAGS SQSH_LDFLAGS libsqsh
|
||||
ARG_WITHOUT WITH_SQSH sqsh ensure squashfs support is not included, even if library is found ;
|
||||
|
|
@ -384,7 +414,8 @@ REPORT
|
|||
HAVE_OPENSSL WANT_SSL_CRYPTO HAVE_PTRACE HOST LDFLAGS LIBVERSION PKGCONFIG PREFIX
|
||||
R_CHECKS_LEVEL TARGET USERCC USEROSTYPE USE_CAPSTONE USE_LIB_MAGIC USE_SQSH
|
||||
USE_LIB_XXHASH USE_LIB_ZIP USE_PTRACE_WRAP USE_SYSLZ4 VERSION WANT_DYLINK
|
||||
USE_LIB_ATOMIC HAVE___ATOMIC_FETCH_ADD_8 FORCE_LIB_ATOMIC WANT_QJS
|
||||
USE_LIB_ATOMIC HAVE___ATOMIC_FETCH_ADD_8 FORCE_LIB_ATOMIC WANT_QJS WANT_ZYDIS
|
||||
USE_ZYDIS USE_SYS_ZYDIS
|
||||
;
|
||||
|
||||
PKGCFG_DO pkgcfg/r_egg.pc r_egg r_asm r_syscall r_util r_reg r_flag r_cons ;
|
||||
|
|
|
|||
|
|
@ -7,6 +7,6 @@ case "$1" in
|
|||
;;
|
||||
*)
|
||||
[ dist/plugins-cfg/plugins.def.cfg -nt ./plugins.cfg ] && rm -f plugins.cfg
|
||||
./configure-plugins $*
|
||||
WANT_ZYDIS="${WANT_ZYDIS:-1}" ./configure-plugins $*
|
||||
;;
|
||||
esac
|
||||
|
|
|
|||
1
dist/plugins-cfg/plugins.android.cfg
vendored
1
dist/plugins-cfg/plugins.android.cfg
vendored
|
|
@ -14,6 +14,7 @@ arch.mips_cs
|
|||
arch.null
|
||||
arch.wasm
|
||||
arch.x86_cs
|
||||
arch.x86_zydis
|
||||
arch.x86_nz
|
||||
asm.arm
|
||||
asm.att2intel
|
||||
|
|
|
|||
1
dist/plugins-cfg/plugins.bin.cfg
vendored
1
dist/plugins-cfg/plugins.bin.cfg
vendored
|
|
@ -33,6 +33,7 @@ arch.ppc_gnu
|
|||
arch.sparc
|
||||
arch.tms320
|
||||
arch.x86_cs
|
||||
arch.x86_zydis
|
||||
arch.xap
|
||||
arch.z80
|
||||
arch.sh
|
||||
|
|
|
|||
1
dist/plugins-cfg/plugins.cs4.cfg
vendored
1
dist/plugins-cfg/plugins.cs4.cfg
vendored
|
|
@ -72,6 +72,7 @@ arch.vax
|
|||
arch.wasm
|
||||
arch.ws
|
||||
arch.x86_cs
|
||||
arch.x86_zydis
|
||||
arch.x86_nasm
|
||||
arch.x86_nz
|
||||
arch.xap
|
||||
|
|
|
|||
1
dist/plugins-cfg/plugins.def.cfg
vendored
1
dist/plugins-cfg/plugins.def.cfg
vendored
|
|
@ -94,6 +94,7 @@ arch.vax
|
|||
arch.wasm
|
||||
arch.ws
|
||||
arch.x86_cs
|
||||
arch.x86_zydis
|
||||
arch.x86_nasm
|
||||
arch.x86_nz
|
||||
arch.xap
|
||||
|
|
|
|||
1
dist/plugins-cfg/plugins.emscripten.cfg
vendored
1
dist/plugins-cfg/plugins.emscripten.cfg
vendored
|
|
@ -2,6 +2,7 @@ STATIC="
|
|||
anal.null
|
||||
anal.autoname
|
||||
arch.x86_cs
|
||||
arch.x86_zydis
|
||||
arch.arm_cs
|
||||
arch.dalvik
|
||||
arch.mips_cs
|
||||
|
|
|
|||
1
dist/plugins-cfg/plugins.ios-store.cfg
vendored
1
dist/plugins-cfg/plugins.ios-store.cfg
vendored
|
|
@ -2,6 +2,7 @@ STATIC="
|
|||
anal.null
|
||||
anal.autoname
|
||||
arch.x86_cs
|
||||
arch.x86_zydis
|
||||
arch.arm
|
||||
arch.arm_cs
|
||||
arch.bf
|
||||
|
|
|
|||
1
dist/plugins-cfg/plugins.ios.cfg
vendored
1
dist/plugins-cfg/plugins.ios.cfg
vendored
|
|
@ -11,6 +11,7 @@ arch.java
|
|||
arch.mips_cs
|
||||
arch.null
|
||||
arch.x86_cs
|
||||
arch.x86_zydis
|
||||
arch.x86_nz
|
||||
esil.null
|
||||
esil.dummy
|
||||
|
|
|
|||
1
dist/plugins-cfg/plugins.mingw.cfg
vendored
1
dist/plugins-cfg/plugins.mingw.cfg
vendored
|
|
@ -62,6 +62,7 @@ arch.vax
|
|||
arch.wasm
|
||||
arch.ws
|
||||
arch.x86_cs
|
||||
arch.x86_zydis
|
||||
arch.x86_nasm
|
||||
arch.x86_nz
|
||||
arch.xap
|
||||
|
|
|
|||
1
dist/plugins-cfg/plugins.nogpl.cfg
vendored
1
dist/plugins-cfg/plugins.nogpl.cfg
vendored
|
|
@ -2,6 +2,7 @@ STATIC="arch.8051
|
|||
anal.null
|
||||
anal.autoname
|
||||
arch.x86_cs
|
||||
arch.x86_zydis
|
||||
arch.arc
|
||||
arch.arm
|
||||
arch.arm_cs
|
||||
|
|
|
|||
1
dist/plugins-cfg/plugins.sdk.cfg
vendored
1
dist/plugins-cfg/plugins.sdk.cfg
vendored
|
|
@ -89,6 +89,7 @@ arch.vax
|
|||
arch.wasm
|
||||
arch.ws
|
||||
arch.x86_cs
|
||||
arch.x86_zydis
|
||||
arch.x86_nasm
|
||||
arch.x86_nz
|
||||
arch.xap
|
||||
|
|
|
|||
1
dist/plugins-cfg/plugins.static.cfg
vendored
1
dist/plugins-cfg/plugins.static.cfg
vendored
|
|
@ -35,6 +35,7 @@ arch.sparc_cs
|
|||
arch.sparc_gnu
|
||||
arch.ws
|
||||
arch.x86_cs
|
||||
arch.x86_zydis
|
||||
arch.xap
|
||||
arch.xcore_cs
|
||||
arch.z80
|
||||
|
|
|
|||
1
dist/plugins-cfg/plugins.static.nogpl.cfg
vendored
1
dist/plugins-cfg/plugins.static.nogpl.cfg
vendored
|
|
@ -29,6 +29,7 @@ arch.snes
|
|||
arch.sparc_cs
|
||||
arch.ws
|
||||
arch.x86_cs
|
||||
arch.x86_zydis
|
||||
arch.x86_nasm
|
||||
arch.x86_nz
|
||||
arch.xap
|
||||
|
|
|
|||
1
dist/plugins-cfg/plugins.termux.cfg
vendored
1
dist/plugins-cfg/plugins.termux.cfg
vendored
|
|
@ -40,6 +40,7 @@ arch.v850
|
|||
arch.vax
|
||||
arch.wasm
|
||||
arch.x86_cs
|
||||
arch.x86_zydis
|
||||
arch.x86_nasm
|
||||
arch.x86_nz
|
||||
arch.xcore_cs
|
||||
|
|
|
|||
1
dist/plugins-cfg/plugins.tiny.cfg
vendored
1
dist/plugins-cfg/plugins.tiny.cfg
vendored
|
|
@ -10,6 +10,7 @@ arch.java
|
|||
arch.mips_cs
|
||||
arch.null
|
||||
arch.x86_cs
|
||||
arch.x86_zydis
|
||||
arch.x86_nz
|
||||
esil.null
|
||||
esil.dummy
|
||||
|
|
|
|||
1
dist/plugins-cfg/plugins.uefi.cfg
vendored
1
dist/plugins-cfg/plugins.uefi.cfg
vendored
|
|
@ -34,6 +34,7 @@ arch.pickle
|
|||
arch.pyc
|
||||
arch.wasm
|
||||
arch.x86_cs
|
||||
arch.x86_zydis
|
||||
arch.x86_nasm
|
||||
arch.x86_nz
|
||||
bin.any
|
||||
|
|
|
|||
1
dist/plugins-cfg/plugins.vinix.cfg
vendored
1
dist/plugins-cfg/plugins.vinix.cfg
vendored
|
|
@ -3,6 +3,7 @@ anal.null
|
|||
anal.autoname
|
||||
arch.null
|
||||
arch.x86_cs
|
||||
arch.x86_zydis
|
||||
arch.x86_nz
|
||||
bin.any
|
||||
esil.dummy
|
||||
|
|
|
|||
1
dist/plugins-cfg/plugins.wasi.cfg
vendored
1
dist/plugins-cfg/plugins.wasi.cfg
vendored
|
|
@ -15,6 +15,7 @@ arch.pyc
|
|||
arch.riscv
|
||||
arch.wasm
|
||||
arch.x86_cs
|
||||
arch.x86_zydis
|
||||
arch.x86_nz
|
||||
arch.z80
|
||||
esil.null
|
||||
|
|
|
|||
|
|
@ -9,6 +9,10 @@ CFLAGS+=-DR2_PLUGIN_INCORE
|
|||
CFLAGS:=-I.. -I$(LTOP)/arch/include -DR2_PLUGIN_INCORE -Iarch -I$(TOP)/shlr $(CFLAGS)
|
||||
LDFLAGS+=$(CS_LDFLAGS)
|
||||
|
||||
ifneq ($(filter p/x86_zydis.mk,$(STATIC_ARCH_PLUGINS)),)
|
||||
LDFLAGS+=$(ZYDIS_LDFLAGS)
|
||||
endif
|
||||
|
||||
.PHONY: pre
|
||||
pre: p
|
||||
$(MAKE) libr_arch.$(EXT_SO)
|
||||
|
|
|
|||
|
|
@ -193,6 +193,12 @@ if arch_plugins.contains('x86_nz')
|
|||
]
|
||||
endif
|
||||
|
||||
if arch_plugins.contains('x86_zydis')
|
||||
r_arch_sources += [
|
||||
'p/x86/plugin_zydis.c'
|
||||
]
|
||||
endif
|
||||
|
||||
if arch_plugins.contains('xtensa')
|
||||
r_arch_sources += [
|
||||
'p/xtensa/plugin.c',
|
||||
|
|
@ -212,6 +218,10 @@ deps = [
|
|||
capstone_dep,
|
||||
]
|
||||
|
||||
if arch_plugins.contains('x86_zydis')
|
||||
deps += zydis_dep
|
||||
endif
|
||||
|
||||
links = []
|
||||
incs = [platform_inc, '../xps']
|
||||
if get_option('use_v35')
|
||||
|
|
@ -239,13 +249,17 @@ r_arch = library('r_arch', r_arch_sources,
|
|||
r_arch_dep = declare_dependency(link_with: r_arch, include_directories: [incs])
|
||||
|
||||
if get_option('blob')
|
||||
static_deps = [
|
||||
r_util_static_dep,
|
||||
capstone_dep,
|
||||
]
|
||||
if arch_plugins.contains('x86_zydis')
|
||||
static_deps += zydis_dep
|
||||
endif
|
||||
r_arch_static = static_library('r_arch_static', r_arch_sources,
|
||||
include_directories: [incs],
|
||||
c_args: library_cflags,
|
||||
dependencies: [
|
||||
r_util_static_dep,
|
||||
capstone_dep,
|
||||
],
|
||||
dependencies: static_deps,
|
||||
install: true,
|
||||
implicit_include_directories: false,
|
||||
)
|
||||
|
|
|
|||
2489
libr/arch/p/x86/plugin_zydis.c
Normal file
2489
libr/arch/p/x86/plugin_zydis.c
Normal file
File diff suppressed because it is too large
Load diff
389
libr/arch/p/x86/reg_profile.inc.c
Normal file
389
libr/arch/p/x86/reg_profile.inc.c
Normal file
|
|
@ -0,0 +1,389 @@
|
|||
static char *get_reg_profile(RArchSession *as) {
|
||||
R_RETURN_VAL_IF_FAIL (as && as->config, NULL);
|
||||
int bits = as->config->bits;
|
||||
switch (bits) {
|
||||
case 16:
|
||||
case 32:
|
||||
case 64:
|
||||
break;
|
||||
default:
|
||||
if (R_SYS_BITS_CHECK (bits, 64)) {
|
||||
bits = 64;
|
||||
} else {
|
||||
bits = 32;
|
||||
}
|
||||
break;
|
||||
}
|
||||
const char *p = NULL;
|
||||
switch (bits) {
|
||||
case 16: p =
|
||||
"=PC ip\n"
|
||||
"=SP sp\n"
|
||||
"=BP bp\n"
|
||||
"=R0 ax\n"
|
||||
"=A0 ax\n"
|
||||
"=A1 bx\n"
|
||||
"=A2 cx\n"
|
||||
"=A3 dx\n"
|
||||
"=A4 si\n"
|
||||
"=A5 di\n"
|
||||
"=SN ah\n"
|
||||
"=TR fs\n" // can be %gs too, but well thats can be overriden with the cc abi scripts
|
||||
"gpr ip .16 48 0\n"
|
||||
"gpr ax .16 24 0\n"
|
||||
"gpr ah .8 25 0\n"
|
||||
"gpr al .8 24 0\n"
|
||||
"gpr bx .16 0 0\n"
|
||||
"gpr bh .8 1 0\n"
|
||||
"gpr bl .8 0 0\n"
|
||||
"gpr cx .16 4 0\n"
|
||||
"gpr ch .8 5 0\n"
|
||||
"gpr cl .8 4 0\n"
|
||||
"gpr dx .16 8 0\n"
|
||||
"gpr dh .8 9 0\n"
|
||||
"gpr dl .8 8 0\n"
|
||||
"gpr sp .16 60 0\n"
|
||||
"gpr bp .16 20 0\n"
|
||||
"gpr si .16 12 0\n"
|
||||
"gpr di .16 16 0\n"
|
||||
"seg cs .16 52 0\n"
|
||||
"seg ss .16 54 0\n"
|
||||
"seg ds .16 56 0\n"
|
||||
"seg es .16 58 0\n"
|
||||
"gpr flags .16 56 0\n"
|
||||
"flg cf .1 .448 0\n"
|
||||
"flg pf .1 .449 0\n"
|
||||
"flg af .1 .450 0\n"
|
||||
"flg zf .1 .451 0\n"
|
||||
"flg sf .1 .452 0\n"
|
||||
"flg tf .1 .453 0\n"
|
||||
"flg if .1 .454 0\n"
|
||||
"flg df .1 .455 0\n"
|
||||
"flg of .1 .456 0\n"
|
||||
"flg rf .1 .457 0\n";
|
||||
#if 0
|
||||
"drx dr0 .32 0 0\n"
|
||||
"drx dr1 .32 4 0\n"
|
||||
"drx dr2 .32 8 0\n"
|
||||
"drx dr3 .32 12 0\n"
|
||||
//"drx dr4 .32 16 0\n"
|
||||
//"drx dr5 .32 20 0\n"
|
||||
"drx dr6 .32 24 0\n"
|
||||
"drx dr7 .32 28 0\n"
|
||||
#endif
|
||||
break;
|
||||
case 32: p =
|
||||
"=PC eip\n"
|
||||
"=SP esp\n"
|
||||
"=BP ebp\n"
|
||||
"=R0 eax\n"
|
||||
"=A0 eax\n"
|
||||
"=A1 ebx\n"
|
||||
"=A2 ecx\n"
|
||||
"=A3 edx\n"
|
||||
"=A4 esi\n"
|
||||
"=A5 edi\n"
|
||||
"=SN eax\n"
|
||||
"gpr eiz .32 ? 0\n"
|
||||
"gpr oeax .32 44 0\n"
|
||||
"gpr eax .32 24 0\n"
|
||||
"gpr ax .16 24 0\n"
|
||||
"gpr ah .8 25 0\n"
|
||||
"gpr al .8 24 0\n"
|
||||
"gpr ebx .32 0 0\n"
|
||||
"gpr bx .16 0 0\n"
|
||||
"gpr bh .8 1 0\n"
|
||||
"gpr bl .8 0 0\n"
|
||||
"gpr ecx .32 4 0\n"
|
||||
"gpr cx .16 4 0\n"
|
||||
"gpr ch .8 5 0\n"
|
||||
"gpr cl .8 4 0\n"
|
||||
"gpr edx .32 8 0\n"
|
||||
"gpr dx .16 8 0\n"
|
||||
"gpr dh .8 9 0\n"
|
||||
"gpr dl .8 8 0\n"
|
||||
"gpr esi .32 12 0\n"
|
||||
"gpr si .16 12 0\n"
|
||||
"gpr edi .32 16 0\n"
|
||||
"gpr di .16 16 0\n"
|
||||
"gpr esp .32 60 0\n"
|
||||
"gpr sp .16 60 0\n"
|
||||
"gpr ebp .32 20 0\n"
|
||||
"gpr bp .16 20 0\n"
|
||||
"gpr eip .32 48 0\n"
|
||||
"gpr ip .16 48 0\n"
|
||||
"seg xfs .32 36 0\n"
|
||||
"seg xgs .32 40 0\n"
|
||||
"seg xcs .32 52 0\n"
|
||||
"seg cs .16 52 0\n"
|
||||
"seg xss .32 52 0\n"
|
||||
"flg eflags .32 .448 0 c1p.a.zstido.n.rv\n"
|
||||
"flg flags .16 .448 0\n"
|
||||
"flg cf .1 .448 0\n"
|
||||
"flg pf .1 .450 0\n"
|
||||
"flg af .1 .452 0\n"
|
||||
"flg zf .1 .454 0\n"
|
||||
"flg sf .1 .455 0\n"
|
||||
"flg tf .1 .456 0\n"
|
||||
"flg if .1 .457 0\n"
|
||||
"flg df .1 .458 0\n"
|
||||
"flg of .1 .459 0\n"
|
||||
"flg nt .1 .462 0\n"
|
||||
"flg rf .1 .464 0\n"
|
||||
"flg vm .1 .465 0\n"
|
||||
"drx dr0 .32 0 0\n"
|
||||
"drx dr1 .32 4 0\n"
|
||||
"drx dr2 .32 8 0\n"
|
||||
"drx dr3 .32 12 0\n"
|
||||
//"drx dr4 .32 16 0\n"
|
||||
//"drx dr5 .32 20 0\n"
|
||||
"drx dr6 .32 24 0\n"
|
||||
"drx dr7 .32 28 0\n"
|
||||
"vec128@fpu xmm0 .128 160 4\n"
|
||||
"vec64@fpu xmm0l .64 160 0\n"
|
||||
"vec64@fpu xmm0h .64 168 0\n"
|
||||
|
||||
"vec128@fpu xmm1 .128 176 4\n"
|
||||
"fpu xmm1l .64 176 0\n"
|
||||
"fpu xmm1h .64 184 0\n"
|
||||
|
||||
"vec128@fpu xmm2 .128 192 4\n"
|
||||
"fpu xmm2l .64 192 0\n"
|
||||
"fpu xmm2h .64 200 0\n"
|
||||
|
||||
"vec128@fpu xmm3 .128 208 4\n"
|
||||
"fpu xmm3l .64 208 0\n"
|
||||
"fpu xmm3h .64 216 0\n"
|
||||
|
||||
"vec128@fpu xmm4 .128 224 4\n"
|
||||
"fpu xmm4l .64 224 0\n"
|
||||
"fpu xmm4h .64 232 0\n"
|
||||
|
||||
"vec128@fpu xmm5 .128 240 4\n"
|
||||
"fpu vec1285l .64 240 0\n"
|
||||
"fpu vec1285h .64 248 0\n"
|
||||
|
||||
"vec128@fpu xmm6 .128 256 4\n"
|
||||
"fpu vec1286l .64 256 0\n"
|
||||
"fpu vec1286h .64 264 0\n"
|
||||
|
||||
"vec128@fpu xmm7 .128 272 4\n"
|
||||
"fpu xmm7l .64 272 0\n"
|
||||
"fpu xmm7h .64 280 0\n";
|
||||
|
||||
break;
|
||||
case 64:
|
||||
{
|
||||
#if 0
|
||||
const char *cc = "cdecl"; // r_anal_cc_default (anal); // R2_590
|
||||
const char *args_prof = cc && !strcmp (cc, "ms")
|
||||
? // Microsoft x64 CC
|
||||
"# RAX return value\n"
|
||||
"# RCX argument 1\n"
|
||||
"# RDX argument 2\n"
|
||||
"# R8 argument 3\n"
|
||||
"# R9 argument 4\n"
|
||||
"# R10-R11 syscall/sysret\n"
|
||||
"# R12-R15 GP preserved\n"
|
||||
"# RSI preserved source\n"
|
||||
"# RDI preserved destination\n"
|
||||
"# RSP stack pointer\n"
|
||||
"=PC rip\n"
|
||||
"=SP rsp\n"
|
||||
"=R0 rax\n"
|
||||
"=F0 xmm0\n"
|
||||
"=BP rbp\n"
|
||||
"=A0 rcx\n"
|
||||
"=A1 rdx\n"
|
||||
"=A2 r8\n"
|
||||
"=A3 r9\n"
|
||||
"=SN rax\n"
|
||||
: // System V AMD64 ABI
|
||||
#endif
|
||||
// R2_590 - this info shouldnt be used as a calling convention if anal.cc is set
|
||||
const char *args_prof =
|
||||
"=PC rip\n"
|
||||
"=SP rsp\n"
|
||||
"=BP rbp\n"
|
||||
"=R0 rax\n"
|
||||
"=A0 rdi\n"
|
||||
"=A1 rsi\n"
|
||||
"=A2 rdx\n"
|
||||
"=A3 rcx\n"
|
||||
"=A4 r8\n"
|
||||
"=A5 r9\n"
|
||||
"=A6 r10\n"
|
||||
"=A7 r11\n"
|
||||
"=SN rax\n";
|
||||
char *prof = r_str_newf ("%s%s", args_prof,
|
||||
"gpr rax .64 80 0\n"
|
||||
"gpr eax .32 80 0\n"
|
||||
"gpr ax .16 80 0\n"
|
||||
"gpr al .8 80 0\n"
|
||||
"gpr ah .8 81 0\n"
|
||||
"gpr rbx .64 40 0\n"
|
||||
"gpr ebx .32 40 0\n"
|
||||
"gpr bx .16 40 0\n"
|
||||
"gpr bl .8 40 0\n"
|
||||
"gpr bh .8 41 0\n"
|
||||
"gpr rcx .64 88 0\n"
|
||||
"gpr ecx .32 88 0\n"
|
||||
"gpr cx .16 88 0\n"
|
||||
"gpr cl .8 88 0\n"
|
||||
"gpr ch .8 89 0\n"
|
||||
"gpr rdx .64 96 0\n"
|
||||
"gpr edx .32 96 0\n"
|
||||
"gpr dx .16 96 0\n"
|
||||
"gpr dl .8 96 0\n"
|
||||
"gpr dh .8 97 0\n"
|
||||
"gpr rsi .64 104 0\n"
|
||||
"gpr esi .32 104 0\n"
|
||||
"gpr si .16 104 0\n"
|
||||
"gpr sil .8 104 0\n"
|
||||
"gpr rdi .64 112 0\n"
|
||||
"gpr edi .32 112 0\n"
|
||||
"gpr di .16 112 0\n"
|
||||
"gpr dil .8 112 0\n"
|
||||
"gpr r8 .64 72 0\n"
|
||||
"gpr r8d .32 72 0\n"
|
||||
"gpr r8w .16 72 0\n"
|
||||
"gpr r8b .8 72 0\n"
|
||||
"gpr r9 .64 64 0\n"
|
||||
"gpr r9d .32 64 0\n"
|
||||
"gpr r9w .16 64 0\n"
|
||||
"gpr r9b .8 64 0\n"
|
||||
"gpr r10 .64 56 0\n"
|
||||
"gpr r10d .32 56 0\n"
|
||||
"gpr r10w .16 56 0\n"
|
||||
"gpr r10b .8 56 0\n"
|
||||
"gpr r11 .64 48 0\n"
|
||||
"gpr r11d .32 48 0\n"
|
||||
"gpr r11w .16 48 0\n"
|
||||
"gpr r11b .8 48 0\n"
|
||||
"gpr r12 .64 24 0\n"
|
||||
"gpr r12d .32 24 0\n"
|
||||
"gpr r12w .16 24 0\n"
|
||||
"gpr r12b .8 24 0\n"
|
||||
"gpr r13 .64 16 0\n"
|
||||
"gpr r13d .32 16 0\n"
|
||||
"gpr r13w .16 16 0\n"
|
||||
"gpr r13b .8 16 0\n"
|
||||
"gpr r14 .64 8 0\n"
|
||||
"gpr r14d .32 8 0\n"
|
||||
"gpr r14w .16 8 0\n"
|
||||
"gpr r14b .8 8 0\n"
|
||||
"gpr r15 .64 0 0\n"
|
||||
"gpr r15d .32 0 0\n"
|
||||
"gpr r15w .16 0 0\n"
|
||||
"gpr r15b .8 0 0\n"
|
||||
"gpr rip .64 128 0\n"
|
||||
"gpr rbp .64 32 0\n"
|
||||
"gpr ebp .32 32 0\n"
|
||||
"gpr bp .16 32 0\n"
|
||||
"gpr bpl .8 32 0\n"
|
||||
"seg cs .64 136 0\n"
|
||||
"flg rflags .64 144 0 c1p.a.zstido.n.rv\n"
|
||||
"flg eflags .32 144 0 c1p.a.zstido.n.rv\n"
|
||||
"flg cf .1 144.0 0 carry\n"
|
||||
"flg pf .1 144.2 0 parity\n"
|
||||
//"gpr cf .1 .1152 0 carry\n"
|
||||
//"gpr pf .1 .1154 0 parity\n"
|
||||
"flg af .1 144.4 0 adjust\n"
|
||||
"flg zf .1 144.6 0 zero\n"
|
||||
"flg sf .1 144.7 0 sign\n"
|
||||
"flg tf .1 .1160 0 trap\n"
|
||||
"flg if .1 .1161 0 interrupt\n"
|
||||
"flg df .1 .1162 0 direction\n"
|
||||
"flg of .1 .1163 0 overflow\n"
|
||||
|
||||
"gpr riz .64 ? 0\n"
|
||||
"gpr rsp .64 152 0\n"
|
||||
"gpr esp .32 152 0\n"
|
||||
"gpr sp .16 152 0\n"
|
||||
"gpr spl .8 152 0\n"
|
||||
"seg ss .64 160 0\n"
|
||||
"seg fs_base .64 168 0\n"
|
||||
"seg gs_base .64 176 0\n"
|
||||
"seg ds .64 184 0\n"
|
||||
"seg es .64 192 0\n"
|
||||
"seg fs .64 200 0\n"
|
||||
"seg gs .64 208 0\n"
|
||||
"drx dr0 .64 0 0\n"
|
||||
"drx dr1 .64 8 0\n"
|
||||
"drx dr2 .64 16 0\n"
|
||||
"drx dr3 .64 24 0\n"
|
||||
// dr4 32
|
||||
// dr5 40
|
||||
"drx dr6 .64 48 0\n"
|
||||
"drx dr7 .64 56 0\n"
|
||||
|
||||
/*0030 struct user_fpregs_struct
|
||||
0031 {
|
||||
0032 __uint16_t cwd;
|
||||
0033 __uint16_t swd;
|
||||
0034 __uint16_t ftw;
|
||||
0035 __uint16_t fop;
|
||||
0036 __uint64_t rip;
|
||||
0037 __uint64_t rdp;
|
||||
0038 __uint32_t mxcsr;
|
||||
0039 __uint32_t mxcr_mask;
|
||||
0040 __uint32_t st_space[32]; // 8*16 bytes for each FP-reg = 128 bytes
|
||||
0041 __uint32_t xmm_space[64]; // 16*16 bytes for each XMM-reg = 256 bytes
|
||||
0042 __uint32_t padding[24];
|
||||
0043 };
|
||||
*/
|
||||
"fpu cwd .16 0 0\n"
|
||||
"fpu swd .16 2 0\n"
|
||||
"fpu ftw .16 4 0\n"
|
||||
"fpu fop .16 6 0\n"
|
||||
"fpu frip .64 8 0\n"
|
||||
"fpu frdp .64 16 0\n"
|
||||
"fpu mxcsr .32 24 0\n"
|
||||
"fpu mxcr_mask .32 28 0\n"
|
||||
|
||||
"fpu st0 .64 32 0\n"
|
||||
"fpu st1 .64 48 0\n"
|
||||
"fpu st2 .64 64 0\n"
|
||||
"fpu st3 .64 80 0\n"
|
||||
"fpu st4 .64 96 0\n"
|
||||
"fpu st5 .64 112 0\n"
|
||||
"fpu st6 .64 128 0\n"
|
||||
"fpu st7 .64 144 0\n"
|
||||
|
||||
"vec128@fpu xmm0 .128 160 4\n"
|
||||
"fpu xmm0l .64 160 0\n"
|
||||
"fpu xmm0h .64 168 0\n"
|
||||
|
||||
"vec128@fpu xmm1 .128 176 4\n"
|
||||
"fpu xmm1l .64 176 0\n"
|
||||
"fpu xmm1h .64 184 0\n"
|
||||
|
||||
"vec128@fpu xmm2 .128 192 4\n"
|
||||
"fpu xmm2l .64 192 0\n"
|
||||
"fpu xmm2h .64 200 0\n"
|
||||
|
||||
"vec128@fpu xmm3 .128 208 4\n"
|
||||
"fpu xmm3l .64 208 0\n"
|
||||
"fpu xmm3h .64 216 0\n"
|
||||
|
||||
"vec128@fpu xmm4 .128 224 4\n"
|
||||
"fpu xmm4l .64 224 0\n"
|
||||
"fpu xmm4h .64 232 0\n"
|
||||
|
||||
"vec128@fpu xmm5 .128 240 4\n"
|
||||
"fpu xmm5l .64 240 0\n"
|
||||
"fpu xmm5h .64 248 0\n"
|
||||
|
||||
"vec128@fpu xmm6 .128 256 4\n"
|
||||
"fpu xmm6l .64 256 0\n"
|
||||
"fpu xmm6h .64 264 0\n"
|
||||
|
||||
"vec128@fpu xmm7 .128 272 4\n"
|
||||
"fpu xmm7l .64 272 0\n"
|
||||
"fpu xmm7h .64 280 0\n"
|
||||
"fpu x64 .64 288 0\n");
|
||||
return prof;
|
||||
}
|
||||
}
|
||||
return (R_STR_ISNOTEMPTY (p))? strdup (p): NULL;
|
||||
}
|
||||
31
libr/arch/p/x86_zydis.mk
Normal file
31
libr/arch/p/x86_zydis.mk
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
ifeq ($(WANT_ZYDIS),1)
|
||||
|
||||
OBJ_X86_ZYDIS=p/x86/plugin_zydis.o
|
||||
ZYDIS_LIB=$(ZYDIS_ROOT)/libzydis.a
|
||||
ZYDIS_HDR=$(ZYDIS_ROOT)/amalgamated-dist/Zydis.h
|
||||
ZYDIS_DEPS=
|
||||
|
||||
STATIC_OBJ+=$(OBJ_X86_ZYDIS)
|
||||
|
||||
TARGET_X86_ZYDIS=arch_x86_zydis.$(EXT_SO)
|
||||
|
||||
ALL_TARGETS+=${TARGET_X86_ZYDIS}
|
||||
|
||||
${OBJ_X86_ZYDIS}: CFLAGS += $(ZYDIS_CFLAGS)
|
||||
|
||||
ifneq ($(USE_ZYDIS),1)
|
||||
ZYDIS_DEPS=$(ZYDIS_LIB)
|
||||
|
||||
${ZYDIS_LIB}:
|
||||
$(MAKE) -C $(LIBR)/../subprojects zydis CC="$(CC)" AR="$(AR)" CFLAGS="$(CFLAGS)"
|
||||
|
||||
${ZYDIS_HDR}: ${ZYDIS_LIB}
|
||||
|
||||
${OBJ_X86_ZYDIS}: ${ZYDIS_DEPS}
|
||||
endif
|
||||
|
||||
${TARGET_X86_ZYDIS}: ${OBJ_X86_ZYDIS} ${ZYDIS_DEPS}
|
||||
${CC} ${CFLAGS} $(call libname,arch_x86_zydis) $(ZYDIS_CFLAGS) \
|
||||
-o arch_x86_zydis.${EXT_SO} ${OBJ_X86_ZYDIS} $(ZYDIS_LDFLAGS)
|
||||
|
||||
endif
|
||||
|
|
@ -22,6 +22,13 @@ else
|
|||
CS_ROOT:=$(LIBR)/../subprojects/capstone-v5
|
||||
endif
|
||||
|
||||
ZYDIS_ROOT:=$(LIBR)/../subprojects/zydis
|
||||
WANT_ZYDIS?=1
|
||||
USE_ZYDIS?=0
|
||||
USE_SYS_ZYDIS?=0
|
||||
ZYDIS_CFLAGS?=
|
||||
ZYDIS_LDFLAGS?=
|
||||
|
||||
SHLR:=$(LIBR)/../shlr
|
||||
|
||||
include $(LIBR)/../global.mk
|
||||
|
|
@ -40,6 +47,19 @@ CS_CFLAGS=
|
|||
CS_LDFLAGS=
|
||||
endif
|
||||
|
||||
ifeq ($(WANT_ZYDIS),1)
|
||||
ifeq ($(USE_ZYDIS),1)
|
||||
ZYDIS_CFLAGS+=$(CONFIG_ZYDIS_CFLAGS) -DUSE_SYS_ZYDIS=1
|
||||
ZYDIS_LDFLAGS+=$(CONFIG_ZYDIS_LDFLAGS)
|
||||
else
|
||||
ZYDIS_CFLAGS+=-I$(ZYDIS_ROOT)/amalgamated-dist -DUSE_SYS_ZYDIS=0 -DZYDIS_STATIC_BUILD
|
||||
ZYDIS_LDFLAGS+=$(ZYDIS_ROOT)/libzydis.a
|
||||
endif
|
||||
else
|
||||
ZYDIS_CFLAGS=
|
||||
ZYDIS_LDFLAGS=
|
||||
endif
|
||||
|
||||
CFLAGS+=${CPPFLAGS}
|
||||
CFLAGS+=-I../xps
|
||||
|
||||
|
|
|
|||
|
|
@ -343,6 +343,7 @@ extern const RArchPlugin r_arch_plugin_ws;
|
|||
extern const RArchPlugin r_arch_plugin_x86_cs;
|
||||
extern const RArchPlugin r_arch_plugin_x86_nasm;
|
||||
extern const RArchPlugin r_arch_plugin_x86_nz;
|
||||
extern const RArchPlugin r_arch_plugin_x86_zydis;
|
||||
extern const RArchPlugin r_arch_plugin_xap;
|
||||
extern const RArchPlugin r_arch_plugin_xcore_cs;
|
||||
extern const RArchPlugin r_arch_plugin_xtensa;
|
||||
|
|
|
|||
|
|
@ -35,6 +35,8 @@ extern "C" {
|
|||
#define WANT_QJS @WANT_QJS@
|
||||
#define WANT_V35 @WANT_V35@
|
||||
#define WANT_CAPSTONE @WANT_CAPSTONE@
|
||||
#define WANT_ZYDIS @WANT_ZYDIS@
|
||||
#define USE_SYS_ZYDIS @USE_SYS_ZYDIS@
|
||||
#define HAVE_LINUX_CAN_H @HAVE_LINUX_CAN_H@
|
||||
#define R2_USE_BUNDLE_PREFIX @USE_BUNDLE_PREFIX@
|
||||
#define R2_USE_SQSH @USE_SQSH@
|
||||
|
|
|
|||
|
|
@ -78,6 +78,9 @@ if user_plugins.contains('x86')
|
|||
bp_plugins += [ 'x86' ]
|
||||
asm_plugins += [ 'x86' ]
|
||||
endif
|
||||
if user_plugins.contains('x86_zydis') and get_option('want_zydis')
|
||||
arch_plugins += [ 'x86_zydis' ]
|
||||
endif
|
||||
if user_plugins.contains('web')
|
||||
io_plugins += [ 'http' ]
|
||||
io_plugins += [ 'r2web' ]
|
||||
|
|
@ -197,6 +200,10 @@ if get_option('plugins') == ''
|
|||
'xcore_cs',
|
||||
]
|
||||
|
||||
if get_option('want_zydis')
|
||||
arch_plugins += [ 'x86_zydis' ]
|
||||
endif
|
||||
|
||||
if use_gpl
|
||||
arch_plugins += [
|
||||
'arm_gnu',
|
||||
|
|
|
|||
28
meson.build
28
meson.build
|
|
@ -305,6 +305,32 @@ else
|
|||
message('Using bundled xxhash library')
|
||||
endif
|
||||
|
||||
# handle Zydis library
|
||||
zydis_dep = disabler()
|
||||
use_sys_zydis = false
|
||||
want_zydis = get_option('want_zydis') and (
|
||||
get_option('plugins') == '' or get_option('plugins').split(',').contains('x86_zydis')
|
||||
)
|
||||
if want_zydis
|
||||
if get_option('use_sys_zydis')
|
||||
zydis_dep = dependency('zydis', required: false)
|
||||
if not zydis_dep.found()
|
||||
zydis_dep = cc.find_library('zydis', required: true)
|
||||
endif
|
||||
cc.has_header('Zydis/Zydis.h', dependencies: zydis_dep, required: true)
|
||||
zydis_dep = declare_dependency(
|
||||
dependencies: zydis_dep,
|
||||
compile_args: ['-DUSE_SYS_ZYDIS=1']
|
||||
)
|
||||
use_sys_zydis = true
|
||||
message('Using system zydis library')
|
||||
else
|
||||
zydis_proj = subproject('zydis', default_options: ['default_library=static'])
|
||||
zydis_dep = zydis_proj.get_variable('zydis_dep')
|
||||
message('Using bundled zydis')
|
||||
endif
|
||||
endif
|
||||
|
||||
# handle zlib library
|
||||
sys_zlib = dependency('zlib', required: false)
|
||||
use_sys_zlib = false
|
||||
|
|
@ -445,6 +471,8 @@ userconf.set10('HAVE_FORK', use_fork)
|
|||
userconf.set10('HAVE_GPERF', get_option('sdb_cgen'))
|
||||
userconf.set10('WANT_DYLINK', use_dylink)
|
||||
userconf.set10('WANT_QJS', get_option('want_qjs'))
|
||||
userconf.set10('WANT_ZYDIS', want_zydis)
|
||||
userconf.set10('USE_SYS_ZYDIS', use_sys_zydis)
|
||||
userconf.set('R2_WASM_BROWSER', 0)
|
||||
userconf.set10('WANT_V35', get_option('use_v35'))
|
||||
userconf.set10('WANT_THREADS', get_option('want_threads'))
|
||||
|
|
|
|||
|
|
@ -33,7 +33,9 @@ option('want_qjs', type: 'boolean', value: true)
|
|||
option('use_new_abi', type: 'boolean', value: false)
|
||||
option('use_bundle_prefix', type: 'boolean', value: false)
|
||||
option('want_capstone', type: 'boolean', value: true)
|
||||
option('want_zydis', type: 'boolean', value: true)
|
||||
option('use_sys_capstone', type: 'boolean', value: false)
|
||||
option('use_sys_zydis', type: 'boolean', value: false)
|
||||
option('use_capstone_version', type: 'combo', choices: ['v4', 'v5', 'next', 'v6'], value: 'v5')
|
||||
option('use_sys_magic', type: 'boolean', value: false)
|
||||
option('use_sys_zip', type: 'boolean', value: false)
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ endif
|
|||
endif
|
||||
endif
|
||||
|
||||
.PHONY: capstone-sync capstone-build all clean mrproper libgdbr libwinkd bochs sdbs
|
||||
.PHONY: capstone-sync capstone-build zydis-build all clean mrproper libgdbr libwinkd bochs sdbs
|
||||
|
||||
ifeq ($(shell gcc -v > /dev/null 2>&1 && echo works),works)
|
||||
HOST_CC?=gcc
|
||||
|
|
@ -55,7 +55,7 @@ all:
|
|||
exit 1
|
||||
endif
|
||||
|
||||
preall: libwinkd bochs capstone-build sdbs
|
||||
preall: libwinkd bochs capstone-build zydis-build sdbs
|
||||
@for MOD in ${MODS} ; do \
|
||||
echo $(MAKE) -C $$MOD ; \
|
||||
$(MAKE) -C $$MOD HAVE_VALA= ROOT="${PWD}/../" CC="${CC}" ; \
|
||||
|
|
@ -217,6 +217,23 @@ endif
|
|||
endif
|
||||
endif
|
||||
|
||||
ZYDIS_SHLR_LIB=
|
||||
ifneq ($(filter p/x86_zydis.mk,$(STATIC_ARCH_PLUGINS)),)
|
||||
ifeq ($(WANT_ZYDIS),1)
|
||||
ifeq ($(USE_ZYDIS),0)
|
||||
ZYDIS_SHLR_LIB=$(ZYDIS_ROOT)/libzydis.a
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
.PHONY: zydis-build
|
||||
ifneq ($(ZYDIS_SHLR_LIB),)
|
||||
zydis-build:
|
||||
$(MAKE) -C ../subprojects zydis CC="$(CC)" AR="$(AR)" CFLAGS="$(CFLAGS)"
|
||||
else
|
||||
zydis-build:
|
||||
endif
|
||||
|
||||
../../radare2-webui:
|
||||
cd ../.. ; git clone --depth 1 https://github.com/radareorg/radare2-webui
|
||||
|
||||
|
|
@ -262,6 +279,7 @@ spp: spp-sync
|
|||
SHLRS+=ar/libr_ar.a
|
||||
SHLRS+=bochs/lib/libbochs.a
|
||||
SHLRS+=$(CS_ROOT)/libcapstone.a
|
||||
SHLRS+=$(ZYDIS_SHLR_LIB)
|
||||
SHLRS+=gdb/lib/libgdbr.a
|
||||
SHLRS+=java/libr_java.a
|
||||
SHLRS+=qnx/lib/libqnxr.a
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@
|
|||
|
||||
# automatically set to 1 on dist tarball creation
|
||||
PREDOWNLOADED=0
|
||||
WANT_ZYDIS?=1
|
||||
USE_ZYDIS?=0
|
||||
|
||||
DEPS=sdb
|
||||
|
||||
|
|
@ -29,6 +31,12 @@ else
|
|||
WANT_BUNDLED_CAPSTONE=1
|
||||
endif
|
||||
|
||||
ifeq ($(WANT_ZYDIS),1)
|
||||
ifneq ($(USE_ZYDIS),1)
|
||||
DEPS += zydis
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(WANT_BUNDLED_CAPSTONE),1)
|
||||
ifeq ($(USE_CS4),1)
|
||||
DEPS += capstone-v4
|
||||
|
|
@ -39,7 +47,7 @@ ifeq ($(WANT_BUNDLED_CAPSTONE),1)
|
|||
endif
|
||||
endif
|
||||
|
||||
DISTDEPS=binaryninja capstone-v5 otezip qjs sdb
|
||||
DISTDEPS=binaryninja capstone-v5 otezip qjs sdb zydis
|
||||
EXTRADEPS=capstone-next capstone-v4
|
||||
ALLDEPS=$(DISTDEPS) $(EXTRADEPS)
|
||||
|
||||
|
|
|
|||
21
subprojects/packagefiles/zydis/LICENSE.MIT
Normal file
21
subprojects/packagefiles/zydis/LICENSE.MIT
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2013-2024 Zyantific
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
8
subprojects/packagefiles/zydis/README.radare2
Normal file
8
subprojects/packagefiles/zydis/README.radare2
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
Zydis bundled source metadata
|
||||
============================
|
||||
|
||||
The files under amalgamated-dist are from the Zydis 4.1.0 amalgamated release:
|
||||
|
||||
https://github.com/zyantific/zydis/releases/download/v4.1.0/zydis-amalgamated.tar.gz
|
||||
|
||||
The upstream project is distributed under the MIT license. See LICENSE.MIT.
|
||||
55012
subprojects/packagefiles/zydis/amalgamated-dist/Zydis.c
Normal file
55012
subprojects/packagefiles/zydis/amalgamated-dist/Zydis.c
Normal file
File diff suppressed because one or more lines are too long
12262
subprojects/packagefiles/zydis/amalgamated-dist/Zydis.h
Normal file
12262
subprojects/packagefiles/zydis/amalgamated-dist/Zydis.h
Normal file
File diff suppressed because it is too large
Load diff
56
subprojects/packagefiles/zydis/meson.build
Normal file
56
subprojects/packagefiles/zydis/meson.build
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
project('zydis', 'c', version: '4.1.0', meson_version: '>=0.55.0')
|
||||
|
||||
cc = meson.get_compiler('c')
|
||||
|
||||
if cc.has_argument('--std=gnu99')
|
||||
add_project_arguments('--std=gnu99', language: ['c'])
|
||||
elif cc.has_argument('--std=c99')
|
||||
add_project_arguments('--std=c99', language: ['c'])
|
||||
endif
|
||||
|
||||
if cc.get_argument_syntax() == 'msvc'
|
||||
if get_option('b_lto')
|
||||
add_project_arguments(
|
||||
'/GL', # Compiler optimisation for MSVC
|
||||
language: 'c',
|
||||
)
|
||||
add_project_link_arguments(
|
||||
'/LTCG', # Used for Linking when compiling with /GL
|
||||
language: 'c',
|
||||
)
|
||||
endif
|
||||
endif
|
||||
|
||||
zydis_c_args = []
|
||||
zydis_dep_c_args = []
|
||||
|
||||
if get_option('default_library') == 'static'
|
||||
zydis_c_args += ['-DZYDIS_STATIC_BUILD']
|
||||
else
|
||||
zydis_c_args += ['-DZYDIS_SHOULD_EXPORT']
|
||||
endif
|
||||
zydis_dep_c_args += ['-DUSE_SYS_ZYDIS=0', '-DZYDIS_STATIC_BUILD']
|
||||
|
||||
if cc.get_id() == 'msvc'
|
||||
add_project_arguments('/W0', language: 'c')
|
||||
elif cc.has_argument('-w')
|
||||
add_project_arguments('-w', language: 'c')
|
||||
endif
|
||||
|
||||
zydis_sources = [
|
||||
'amalgamated-dist/Zydis.c'
|
||||
]
|
||||
|
||||
zydis_includes = include_directories('amalgamated-dist')
|
||||
|
||||
libzydis = library('zydis', zydis_sources,
|
||||
c_args: zydis_c_args,
|
||||
include_directories: zydis_includes,
|
||||
install: false,
|
||||
)
|
||||
|
||||
zydis_dep = declare_dependency(
|
||||
link_with: libzydis,
|
||||
include_directories: zydis_includes,
|
||||
compile_args: zydis_dep_c_args,
|
||||
)
|
||||
15
subprojects/zydis.mk
Normal file
15
subprojects/zydis.mk
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
.PHONY: zydis zydis_clean
|
||||
|
||||
ZYDIS_BUILD_CFLAGS=$(filter-out -Werror%,$(CFLAGS))
|
||||
|
||||
zydis:
|
||||
rm -rf zydis.tmp
|
||||
mkdir -p zydis.tmp
|
||||
cp -rf packagefiles/zydis/* zydis.tmp
|
||||
${CC} ${ZYDIS_BUILD_CFLAGS} -fPIC -DZYDIS_STATIC_BUILD -Izydis.tmp/amalgamated-dist -c zydis.tmp/amalgamated-dist/Zydis.c -o zydis.tmp/Zydis.o
|
||||
${AR} rcs zydis.tmp/libzydis.a zydis.tmp/Zydis.o
|
||||
rm -rf zydis
|
||||
mv zydis.tmp zydis
|
||||
|
||||
zydis_clean:
|
||||
rm -rf zydis zydis.tmp
|
||||
7
subprojects/zydis.wrap
Normal file
7
subprojects/zydis.wrap
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
[wrap-file]
|
||||
directory = zydis
|
||||
source_url = https://github.com/zyantific/zydis/releases/download/v4.1.0/zydis-amalgamated.tar.gz
|
||||
source_filename = zydis-amalgamated.tar.gz
|
||||
source_hash = aa9b82be3a37a2998bd8e16cf583bbf2b6c3d80e97dc20504169dc32ca1ced59
|
||||
lead_directory_missing = true
|
||||
patch_directory = zydis
|
||||
|
|
@ -41,5 +41,6 @@ cd "$ROOT"
|
|||
. ./sys/make-jobs.inc.sh
|
||||
${MAKE} mrproper || true
|
||||
[ -z "${KEEP_PLUGINS_CFG:-}" ] && rm -f plugins.cfg
|
||||
./configure --with-rpath "$@" || exit 1
|
||||
# filcc currently crashes on the generated Zydis amalgamation.
|
||||
./configure --without-zydis --with-rpath "$@" || exit 1
|
||||
${MAKE} -j || exit 1
|
||||
|
|
|
|||
|
|
@ -93,6 +93,14 @@ elif grep -q '^USE_CS4=1' config-user.mk 2> /dev/null; then
|
|||
CAPSTONE_LIB=subprojects/capstone-v4/libcapstone.a
|
||||
fi
|
||||
STATIC_LIBS="shlr/gdb/lib/libgdbr.a subprojects/otezip/libotezip.a ${CAPSTONE_LIB}"
|
||||
if grep -q '^WANT_ZYDIS=1' config-user.mk 2> /dev/null && grep -q 'p/x86_zydis.mk' libr/config.mk 2> /dev/null; then
|
||||
if grep -q '^USE_ZYDIS=1' config-user.mk 2> /dev/null; then
|
||||
ZYDIS_LIB=`sed -n 's/^CONFIG_ZYDIS_LDFLAGS=//p' config-user.mk | tail -n 1`
|
||||
else
|
||||
ZYDIS_LIB=subprojects/zydis/libzydis.a
|
||||
fi
|
||||
STATIC_LIBS="${STATIC_LIBS} ${ZYDIS_LIB}"
|
||||
fi
|
||||
STATIC_TEST_CFLAGS="${CFLAGS_STATIC} ${CFLAGS}"
|
||||
|
||||
show_link_errors() {
|
||||
|
|
|
|||
220
test/db/anal/x86_zydis
Normal file
220
test/db/anal/x86_zydis
Normal file
|
|
@ -0,0 +1,220 @@
|
|||
NAME=x86 zydis decode readiness
|
||||
FILE=malloc://16
|
||||
CMDS=<<EOF
|
||||
e asm.arch=x86.zydis
|
||||
e asm.arch
|
||||
e asm.bits=16
|
||||
wx b83412
|
||||
pi 1
|
||||
e asm.bits=32
|
||||
s 0
|
||||
wx b878563412
|
||||
pi 1
|
||||
e asm.bits=64
|
||||
s 0
|
||||
wx 4889d8
|
||||
pi 1
|
||||
e asm.syntax=att
|
||||
s 0
|
||||
pi 1
|
||||
e asm.syntax=intel
|
||||
s 0
|
||||
wx c4
|
||||
pi 1
|
||||
ao 1~^type,size
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
x86.zydis
|
||||
mov ax, 0x1234
|
||||
mov eax, 0x12345678
|
||||
mov rax, rbx
|
||||
mov %rbx, %rax
|
||||
invalid
|
||||
size: 1
|
||||
type: ill
|
||||
EOF
|
||||
RUN
|
||||
|
||||
NAME=x86 capstone default selector
|
||||
FILE=malloc://16
|
||||
CMDS=<<EOF
|
||||
e asm.arch=x86
|
||||
e asm.arch
|
||||
e asm.bits=64
|
||||
wx 4889d8
|
||||
pi 1
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
x86
|
||||
mov rax, rbx
|
||||
EOF
|
||||
RUN
|
||||
|
||||
NAME=x86 zydis opex memory metadata
|
||||
FILE=malloc://32
|
||||
CMDS=<<EOF
|
||||
e asm.arch=x86.zydis
|
||||
e asm.bits=64
|
||||
wx 488b548b10488b0578563412c70578563412efbeadde
|
||||
aoj 1~{opex}
|
||||
s 5
|
||||
aoj 1~{opex}
|
||||
s 12
|
||||
aoj 1~{opex}
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
{"opcode":"mov rdx, qword [rbx+rcx*4+0x10]","disasm":"mov rdx, qword [rbx+rcx*4+0x10]","pseudo":"rdx = qword [rbx+rcx*4+0x10]","description":"moves data from src to dst","mnemonic":"mov","mask":"ffffffffff","esil":"rbx,rcx,4,*,+,0x10,+,[8],rdx,=","sign":false,"id":436,"opex":{"operands":[{"size":8,"rw":2,"type":"reg","value":"rdx"},{"size":8,"rw":1,"type":"mem","segment":"ds","base":"rbx","index":"rcx","scale":4,"disp":16}],"rex":true,"modrm":true,"sib":true,"disp":16},"addr":0,"bytes":"488b548b10","disp":16,"size":5,"type":"load","esilcost":8,"reg":"rbx","ireg":"rcx","scale":4,"refptr":8,"cycles":1,"failcycles":0,"delay":0,"ptrsize":8,"stackptr":0,"direction":"read","family":"cpu"}
|
||||
{"opcode":"mov rax, qword [rip+0x12345678]","disasm":"mov rax, qword [0x12345684]","pseudo":"rax = qword [0x12345684]","description":"moves data from src to dst","mnemonic":"mov","mask":"ffff0000000000","esil":"0x12345684,[8],rax,=","sign":false,"id":436,"opex":{"operands":[{"size":8,"rw":2,"type":"reg","value":"rax"},{"size":8,"rw":1,"type":"mem","segment":"ds","base":"rip","scale":0,"disp":305419896}],"rex":true,"modrm":true,"disp":305419896},"addr":5,"bytes":"488b0578563412","ptr":305419908,"size":7,"type":"load","esilcost":8,"reg":"rip","refptr":8,"cycles":1,"failcycles":0,"delay":0,"ptrsize":8,"stackptr":0,"direction":"read","family":"cpu"}
|
||||
{"opcode":"mov dword [rip+0x12345678], 0xdeadbeef","disasm":"mov dword [0x1234568e], 0xdeadbeef","pseudo":"dword [0x1234568e] = 0xdeadbeef","description":"moves data from src to dst","mnemonic":"mov","mask":"ff000000000000000000","esil":"0xffffffffdeadbeef,0x1234568e,=[4]","sign":false,"id":436,"opex":{"operands":[{"size":4,"rw":2,"type":"mem","segment":"ds","base":"rip","scale":0,"disp":305419896},{"size":4,"rw":1,"type":"imm","value":-559038737}],"modrm":true,"disp":305419896},"addr":12,"bytes":"c70578563412efbeadde","val":18446744073150512879,"ptr":305419918,"size":10,"type":"store","esilcost":12,"reg":"rip","refptr":4,"cycles":1,"failcycles":0,"delay":0,"ptrsize":4,"stackptr":0,"direction":"write","family":"cpu"}
|
||||
EOF
|
||||
RUN
|
||||
|
||||
NAME=x86 zydis branch and stack metadata
|
||||
FILE=malloc://32
|
||||
CMDS=<<EOF
|
||||
e asm.arch=x86.zydis
|
||||
e asm.bits=64
|
||||
wx 50e8020000007501c3
|
||||
pi 4
|
||||
ao 4~^type,jump,fail,cond,stackop,stackptr
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
push rax
|
||||
call 0x8
|
||||
jnz 0x9
|
||||
ret
|
||||
type: rpush
|
||||
stackop: inc
|
||||
stackptr: 8
|
||||
type: call
|
||||
jump: 0x00000008
|
||||
fail: 0x00000006
|
||||
stackop: inc
|
||||
stackptr: 8
|
||||
type: cjmp
|
||||
jump: 0x00000009
|
||||
fail: 0x00000008
|
||||
cond: ne
|
||||
type: ret
|
||||
stackop: inc
|
||||
stackptr: 18446744073709551608
|
||||
EOF
|
||||
RUN
|
||||
|
||||
NAME=x86 zydis esil execution smoke
|
||||
FILE=malloc://16
|
||||
CMDS=<<EOF
|
||||
e asm.arch=x86.zydis
|
||||
e anal.arch=x86.zydis
|
||||
e asm.bits=64
|
||||
wx 4883c0054889c3
|
||||
pi 2
|
||||
aei
|
||||
aer rax=7
|
||||
aer rbx=0
|
||||
s 0
|
||||
aes
|
||||
aes
|
||||
aer rax
|
||||
aer rbx
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
add rax, 0x05
|
||||
mov rbx, rax
|
||||
0x0000000c
|
||||
0x0000000c
|
||||
EOF
|
||||
RUN
|
||||
|
||||
NAME=x86 zydis movsx zero-extends to rax
|
||||
FILE=-
|
||||
CMDS=<<EOF
|
||||
e io.va=true
|
||||
e asm.arch=x86.zydis
|
||||
e anal.arch=x86.zydis
|
||||
e asm.bits=64
|
||||
aei
|
||||
aeim
|
||||
aeim 0x10000000 10 source
|
||||
wx ff @ 0x10000000
|
||||
aer rbx=0x10000000
|
||||
aer rax=0
|
||||
wx 0fbe03
|
||||
s 0
|
||||
aes
|
||||
aer rax
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
0xffffffff
|
||||
EOF
|
||||
RUN
|
||||
|
||||
NAME=x86 zydis rep movsb esil execution
|
||||
FILE=-
|
||||
CMDS=<<EOF
|
||||
e io.va=true
|
||||
e asm.arch=x86.zydis
|
||||
e anal.arch=x86.zydis
|
||||
e asm.bits=32
|
||||
aei
|
||||
aeim
|
||||
aeim 0x10000000 10 source
|
||||
wx 1234567890 @ 0x10000000
|
||||
aeim 0x20000000 10 destination
|
||||
aer edi=0x20000000
|
||||
aer esi=0x10000000
|
||||
aer ecx=5
|
||||
wx f3a4
|
||||
aes
|
||||
aer?edi
|
||||
aer?esi
|
||||
pv @0x20000000
|
||||
aer?ecx
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
0x20000005
|
||||
0x10000005
|
||||
0x78563412
|
||||
0x00000000
|
||||
EOF
|
||||
RUN
|
||||
|
||||
NAME=x86 zydis zero-count rep cmpsb/scasb
|
||||
FILE=-
|
||||
CMDS=<<EOF
|
||||
e io.va=true
|
||||
e asm.arch=x86.zydis
|
||||
e anal.arch=x86.zydis
|
||||
e asm.bits=32
|
||||
aei
|
||||
aeim
|
||||
aeim 0x10000000 10 source
|
||||
wx 12 @ 0x10000000
|
||||
aeim 0x20000000 10 destination
|
||||
wx 34 @ 0x20000000
|
||||
wx f3a6
|
||||
s 0
|
||||
aer esi=0x10000000
|
||||
aer edi=0x20000000
|
||||
aer ecx=0
|
||||
aes
|
||||
aer esi
|
||||
aer edi
|
||||
aer ecx
|
||||
s 0
|
||||
wx f2ae
|
||||
aer eax=0x12
|
||||
aer edi=0x20000000
|
||||
aer ecx=0
|
||||
aes
|
||||
aer edi
|
||||
aer ecx
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
0x10000000
|
||||
0x20000000
|
||||
0x00000000
|
||||
0x20000000
|
||||
0x00000000
|
||||
EOF
|
||||
RUN
|
||||
Loading…
Add table
Add a link
Reference in a new issue