New JSDec home (#2563)

Switch from r2dec to jsdec
This commit is contained in:
Anton Kochkov 2021-01-16 18:48:31 +08:00 committed by GitHub
parent ddb3e62353
commit 88478ffb30
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 40 additions and 44 deletions

View File

@ -46,7 +46,7 @@ build_script:
-DCUTTER_ENABLE_PACKAGING=ON -DCUTTER_ENABLE_PACKAGING=ON
-DCUTTER_PACKAGE_DEPENDENCIES=ON -DCUTTER_PACKAGE_DEPENDENCIES=ON
-DCUTTER_PACKAGE_RZ_GHIDRA=ON -DCUTTER_PACKAGE_RZ_GHIDRA=ON
-DCUTTER_PACKAGE_R2DEC=OFF -DCUTTER_PACKAGE_JSDEC=ON
-DCUTTER_ENABLE_DEPENDENCY_DOWNLOADS=ON -DCUTTER_ENABLE_DEPENDENCY_DOWNLOADS=ON
-DCUTTER_ENABLE_CRASH_REPORTS=ON -DCUTTER_ENABLE_CRASH_REPORTS=ON
-DCMAKE_PREFIX_PATH=%CUTTER_DEPS%\\pyside -DCMAKE_PREFIX_PATH=%CUTTER_DEPS%\\pyside

View File

@ -142,7 +142,7 @@ jobs:
APP_PREFIX=`pwd`/appdir/usr APP_PREFIX=`pwd`/appdir/usr
# export LD_LIBRARY_PATH=${APP_PREFIX}/lib:$Shiboken2_ROOT/lib # export LD_LIBRARY_PATH=${APP_PREFIX}/lib:$Shiboken2_ROOT/lib
export PATH=$PATH:${APP_PREFIX}/bin export PATH=$PATH:${APP_PREFIX}/bin
# "../scripts/r2dec.sh" --prefix=`pwd`/appdir/usr "../scripts/jsdec.sh" --prefix=`pwd`/appdir/usr
wget -c "https://github.com/probonopd/linuxdeployqt/releases/download/6/linuxdeployqt-6-x86_64.AppImage" wget -c "https://github.com/probonopd/linuxdeployqt/releases/download/6/linuxdeployqt-6-x86_64.AppImage"
chmod a+x linuxdeployqt*.AppImage chmod a+x linuxdeployqt*.AppImage
rm -fv "../cutter-deps/qt/plugins/imageformats/libqjp2.so" rm -fv "../cutter-deps/qt/plugins/imageformats/libqjp2.so"
@ -218,7 +218,7 @@ jobs:
-DCUTTER_ENABLE_PACKAGING=ON ^ -DCUTTER_ENABLE_PACKAGING=ON ^
-DCUTTER_PACKAGE_DEPENDENCIES=ON ^ -DCUTTER_PACKAGE_DEPENDENCIES=ON ^
-DCUTTER_PACKAGE_RZ_GHIDRA=ON ^ -DCUTTER_PACKAGE_RZ_GHIDRA=ON ^
-DCUTTER_PACKAGE_R2DEC=OFF ^ -DCUTTER_PACKAGE_JSDEC=ON ^
-DCUTTER_ENABLE_DEPENDENCY_DOWNLOADS=ON ^ -DCUTTER_ENABLE_DEPENDENCY_DOWNLOADS=ON ^
-DCUTTER_ENABLE_CRASH_REPORTS=ON ^ -DCUTTER_ENABLE_CRASH_REPORTS=ON ^
-DCMAKE_PREFIX_PATH="%CUTTER_DEPS%\pyside" ^ -DCMAKE_PREFIX_PATH="%CUTTER_DEPS%\pyside" ^

View File

@ -25,7 +25,7 @@ option(CUTTER_ENABLE_DEPENDENCY_DOWNLOADS "Enable downloading of dependencies. S
option(CUTTER_ENABLE_PACKAGING "Enable building platform-specific packages for distributing" OFF) option(CUTTER_ENABLE_PACKAGING "Enable building platform-specific packages for distributing" OFF)
option(CUTTER_PACKAGE_DEPENDENCIES "During install step include the third party dependencies." OFF) option(CUTTER_PACKAGE_DEPENDENCIES "During install step include the third party dependencies." OFF)
option(CUTTER_PACKAGE_RZ_GHIDRA "Compile and install rz-ghidra during install step." OFF) option(CUTTER_PACKAGE_RZ_GHIDRA "Compile and install rz-ghidra during install step." OFF)
option(CUTTER_PACKAGE_R2DEC "Compile and install r2dec during install step." OFF) option(CUTTER_PACKAGE_JSDEC "Compile and install jsdec during install step." OFF)
OPTION(CUTTER_QT6 "Use QT6" OFF) OPTION(CUTTER_QT6 "Use QT6" OFF)
if(NOT CUTTER_ENABLE_PYTHON) if(NOT CUTTER_ENABLE_PYTHON)

View File

@ -8,7 +8,7 @@ if(WIN32)
set(RIZIN_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>") set(RIZIN_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>")
endif() endif()
set(RIZIN_INSTALL_BINPATH ".") set(RIZIN_INSTALL_BINPATH ".")
set(MESON_OPTIONS "--prefix=${RIZIN_INSTALL_DIR}" "--bindir=${RIZIN_INSTALL_BINPATH}" "-Drz_incdir=include/librz") set(MESON_OPTIONS "--prefix=${RIZIN_INSTALL_DIR}" "--bindir=${RIZIN_INSTALL_BINPATH}" "-DRZ_INCDIR=include/librz")
else() else()
set(RIZIN_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/Rizin-prefix") set(RIZIN_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/Rizin-prefix")
set(MESON_OPTIONS "--prefix=${RIZIN_INSTALL_DIR}" --libdir=lib) set(MESON_OPTIONS "--prefix=${RIZIN_INSTALL_DIR}" --libdir=lib)

12
dist/CMakeLists.txt vendored
View File

@ -20,15 +20,15 @@ if(WIN32)
endif() endif()
install(SCRIPT WindowsBundleQt.cmake) install(SCRIPT WindowsBundleQt.cmake)
endif() endif()
if (CUTTER_PACKAGE_R2DEC AND CUTTER_ENABLE_DEPENDENCY_DOWNLOADS) if (CUTTER_PACKAGE_JSDEC AND CUTTER_ENABLE_DEPENDENCY_DOWNLOADS)
install(CODE " install(CODE "
set(ENV{RZ_ALT_SRC_DIR} 1) set(ENV{RZ_ALT_SRC_DIR} 1)
set(ENV{PATH} \"\${CMAKE_INSTALL_PREFIX};\$ENV{PATH}\") set(ENV{PATH} \"\${CMAKE_INSTALL_PREFIX};\$ENV{PATH}\")
execute_process(COMMAND powershell \"${CMAKE_CURRENT_SOURCE_DIR}/bundle_r2dec.ps1\" \"\${CMAKE_INSTALL_PREFIX}\" execute_process(COMMAND powershell \"${CMAKE_CURRENT_SOURCE_DIR}/bundle_jsdec.ps1\" \"\${CMAKE_INSTALL_PREFIX}\"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
RESULT_VARIABLE SCRIPT_RESULT) RESULT_VARIABLE SCRIPT_RESULT)
if (SCRIPT_RESULT) if (SCRIPT_RESULT)
message(FATAL_ERROR \"Failed to package r2dec\") message(FATAL_ERROR \"Failed to package jsdec\")
endif() endif()
") ")
endif() endif()
@ -48,7 +48,7 @@ if(APPLE)
set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_CURRENT_SOURCE_DIR}/macos/cutter_mac_app.png") set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_CURRENT_SOURCE_DIR}/macos/cutter_mac_app.png")
set(CPACK_DMG_DS_STORE "${CMAKE_CURRENT_SOURCE_DIR}/macos/DS_Store_ForDMGBackground") set(CPACK_DMG_DS_STORE "${CMAKE_CURRENT_SOURCE_DIR}/macos/DS_Store_ForDMGBackground")
find_program(MACDEPLOYQT_PATH macdeployqt HINTS "${Qt5_DIR}/../../../bin") find_program(MACDEPLOYQT_PATH macdeployqt HINTS "${Qt5_DIR}/../../../bin")
if(NOT MACDEPLOYQT_PATH) if(NOT MACDEPLOYQT_PATH)
message(FATAL_ERROR "Failed to find macdeployqt") message(FATAL_ERROR "Failed to find macdeployqt")
@ -76,7 +76,7 @@ if(APPLE)
list(APPEND RZ_GHIDRA_PREFIX_PATH "${QT_PREFIX}") list(APPEND RZ_GHIDRA_PREFIX_PATH "${QT_PREFIX}")
set(RIZIN_INSTALL_PLUGDIR "share/rizin/plugins") # escaped backslash on purpose, should be evaluated later set(RIZIN_INSTALL_PLUGDIR "share/rizin/plugins") # escaped backslash on purpose, should be evaluated later
endif() endif()
################################################ ################################################
@ -112,7 +112,7 @@ if(CUTTER_PACKAGE_RZ_GHIDRA)
execute_process( execute_process(
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/rz-ghidra-prefix/src/rz-ghidra-build WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/rz-ghidra-prefix/src/rz-ghidra-build
RESULT_VARIABLE SCRIPT_RESULT RESULT_VARIABLE SCRIPT_RESULT
COMMAND \${CMAKE_COMMAND} COMMAND \${CMAKE_COMMAND}
../rz-ghidra ../rz-ghidra
-DCMAKE_BUILD_TYPE=Release -DCMAKE_BUILD_TYPE=Release
\"-DCMAKE_PREFIX_PATH=\${CMAKE_INSTALL_PREFIX};\${CMAKE_INSTALL_PREFIX}/include/librz;\${CMAKE_INSTALL_PREFIX}/include/librz/sdb;${RZ_GHIDRA_PREFIX_PATH}\" \"-DCMAKE_PREFIX_PATH=\${CMAKE_INSTALL_PREFIX};\${CMAKE_INSTALL_PREFIX}/include/librz;\${CMAKE_INSTALL_PREFIX}/include/librz/sdb;${RZ_GHIDRA_PREFIX_PATH}\"

View File

@ -1,11 +1,10 @@
$dist = $args[0] $dist = $args[0]
$python = Split-Path((Get-Command python.exe).Path) $python = Split-Path((Get-Command python.exe).Path)
if (-not (Test-Path -Path 'r2dec-js' -PathType Container)) { if (-not (Test-Path -Path 'jsdec' -PathType Container)) {
git clone https://github.com/rizinorg/r2dec-js.git --branch master --depth 1 git clone https://github.com/rizinorg/jsdec.git --branch master --depth 1
} }
cd r2dec-js cd jsdec
#git checkout b5a0d15c7bcc488f268ffb0931b7ced2919f6c9d
& meson.exe --buildtype=release -Dc_args=-DDUK_USE_DATE_NOW_WINDOWS --prefix=$dist --libdir=lib\plugins --datadir=lib\plugins p build & meson.exe --buildtype=release -Dc_args=-DDUK_USE_DATE_NOW_WINDOWS --prefix=$dist --libdir=lib\plugins --datadir=lib\plugins p build
ninja -C build install ninja -C build install
Remove-Item -Recurse -Force $dist\lib\plugins\core_pdd.lib Remove-Item -Recurse -Force $dist\lib\plugins\core_pdd.lib

View File

@ -13,7 +13,7 @@ Here's an image that compares one of the decompiler Cutter supports with the Cut
.. image:: ../images/decompiler_vs_disassembly.png .. image:: ../images/decompiler_vs_disassembly.png
Cutter provides an interface that supports plugins of multiple decompilers including Ghidra, RetDec and R2Dec. The interface receives data from the decompiler and presenting the decompiler code in a context-sensitive decompiler widget. Check the `Decompilers <https://github.com/rizinorg/cutter-plugins#decompilers>`_ section on our Plugins repository to know more about the decompilers we support. Cutter provides an interface that supports plugins of multiple decompilers including Ghidra, RetDec and JSDec. The interface receives data from the decompiler and presenting the decompiler code in a context-sensitive decompiler widget. Check the `Decompilers <https://github.com/rizinorg/cutter-plugins#decompilers>`_ section on our Plugins repository to know more about the decompilers we support.
Out of the decompiler plugins that we support, the one that's officially maintained by the developers of Cutter is RzGhidra. :doc:`Click here <menus/decompiler-context-menu>` to learn more about the functionalities we provide in the decompiler. Out of the decompiler plugins that we support, the one that's officially maintained by the developers of Cutter is RzGhidra. :doc:`Click here <menus/decompiler-context-menu>` to learn more about the functionalities we provide in the decompiler.

View File

@ -6,14 +6,11 @@ SCRIPTPATH=$(realpath "$(dirname "${BASH_SOURCE[0]}")")
cd "$SCRIPTPATH/.." cd "$SCRIPTPATH/.."
if [[ ! -d r2dec-js ]]; then if [[ ! -d jsdec ]]; then
git clone https://github.com/rizinorg/r2dec-js.git --depth 1 --branch master git clone https://github.com/rizinorg/jsdec.git --depth 1 --branch master
#cd r2dec-js
#git checkout b5a0d15c7bcc488f268ffb0931b7ced2919f6c9d
#cd ..
fi fi
cd r2dec-js cd jsdec
rm -rf build rm -rf build
mkdir build && cd build mkdir build && cd build
meson --buildtype=release --libdir=share/rizin/plugins --datadir=share/rizin/plugins "$@" ../p meson --buildtype=release --libdir=share/rizin/plugins --datadir=share/rizin/plugins "$@" ../p

View File

@ -513,8 +513,8 @@ if (CUTTER_APPIMAGE_BUILD)
target_compile_definitions(Cutter PRIVATE APPIMAGE) target_compile_definitions(Cutter PRIVATE APPIMAGE)
endif() endif()
if (CUTTER_PACKAGE_R2DEC) if (CUTTER_PACKAGE_JSDEC)
target_compile_definitions(Cutter PRIVATE CUTTER_APPVEYOR_R2DEC) target_compile_definitions(Cutter PRIVATE CUTTER_APPVEYOR_JSDEC)
endif() endif()
if(APPLE AND CUTTER_ENABLE_PACKAGING AND CUTTER_USE_BUNDLED_RIZIN) if(APPLE AND CUTTER_ENABLE_PACKAGING AND CUTTER_USE_BUNDLED_RIZIN)

View File

@ -110,8 +110,8 @@ CutterApplication::CutterApplication(int &argc, char **argv) : QApplication(argc
Config()->setOutputRedirectionEnabled(clOptions.outputRedirectionEnabled); Config()->setOutputRedirectionEnabled(clOptions.outputRedirectionEnabled);
if (R2DecDecompiler::isAvailable()) { if (JSDecDecompiler::isAvailable()) {
Core()->registerDecompiler(new R2DecDecompiler(Core())); Core()->registerDecompiler(new JSDecDecompiler(Core()));
} }
#if CUTTER_RZGHIDRA_STATIC #if CUTTER_RZGHIDRA_STATIC
@ -154,9 +154,9 @@ CutterApplication::CutterApplication(int &argc, char **argv) : QApplication(argc
sleighHome.cd("share/rizin/plugins/rz_ghidra_sleigh"); // appdir/share/rizin/plugins/rz_ghidra_sleigh sleighHome.cd("share/rizin/plugins/rz_ghidra_sleigh"); // appdir/share/rizin/plugins/rz_ghidra_sleigh
Core()->setConfig("ghidra.sleighhome", sleighHome.absolutePath()); Core()->setConfig("ghidra.sleighhome", sleighHome.absolutePath());
auto r2decHome = appdir; auto jsdecHome = appdir;
r2decHome.cd("share/rizin/plugins/r2dec-js"); // appdir/share/rizin/plugins/r2dec-js jsdecHome.cd("share/rizin/plugins/jsdec"); // appdir/share/rizin/plugins/jsdec
qputenv("R2DEC_HOME", r2decHome.absolutePath().toLocal8Bit()); qputenv("JSDEC_HOME", jsdecHome.absolutePath().toLocal8Bit());
} }
#endif #endif
@ -170,14 +170,14 @@ CutterApplication::CutterApplication(int &argc, char **argv) : QApplication(argc
sleighHome.cd("share/rizin/plugins/rz_ghidra_sleigh"); // Contents/Resources/rz/share/rizin/plugins/rz_ghidra_sleigh sleighHome.cd("share/rizin/plugins/rz_ghidra_sleigh"); // Contents/Resources/rz/share/rizin/plugins/rz_ghidra_sleigh
Core()->setConfig("ghidra.sleighhome", sleighHome.absolutePath()); Core()->setConfig("ghidra.sleighhome", sleighHome.absolutePath());
auto r2decHome = rzprefix; auto jsdecHome = rzprefix;
r2decHome.cd("share/rizin/plugins/r2dec-js"); // Contents/Resources/rz/share/rizin/plugins/r2dec-js jsdecHome.cd("share/rizin/plugins/jsdec"); // Contents/Resources/rz/share/rizin/plugins/jsdec
qputenv("R2DEC_HOME", r2decHome.absolutePath().toLocal8Bit()); qputenv("JSDEC_HOME", jsdecHome.absolutePath().toLocal8Bit());
} }
#endif #endif
#ifdef CUTTER_APPVEYOR_R2DEC #ifdef CUTTER_APPVEYOR_JSDEC
qputenv("R2DEC_HOME", "lib\\plugins\\r2dec-js"); qputenv("JSDEC_HOME", "lib\\plugins\\jsdec");
#endif #endif
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
{ {

View File

@ -17,18 +17,18 @@ RzAnnotatedCode *Decompiler::makeWarning(QString warningMessage){
return rz_annotated_code_new(strdup(temporary.c_str())); return rz_annotated_code_new(strdup(temporary.c_str()));
} }
R2DecDecompiler::R2DecDecompiler(QObject *parent) JSDecDecompiler::JSDecDecompiler(QObject *parent)
: Decompiler("r2dec", "r2dec", parent) : Decompiler("jsdec", "jsdec", parent)
{ {
task = nullptr; task = nullptr;
} }
bool R2DecDecompiler::isAvailable() bool JSDecDecompiler::isAvailable()
{ {
return Core()->cmdList("e cmd.pdc=?").contains(QStringLiteral("pdd")); return Core()->cmdList("es").contains("jsdec");
} }
void R2DecDecompiler::decompileAt(RVA addr) void JSDecDecompiler::decompileAt(RVA addr)
{ {
if (task) { if (task) {
return; return;
@ -39,7 +39,7 @@ void R2DecDecompiler::decompileAt(RVA addr)
delete task; delete task;
task = nullptr; task = nullptr;
if (json.isEmpty()) { if (json.isEmpty()) {
emit finished(Decompiler::makeWarning(tr("Failed to parse JSON from r2dec"))); emit finished(Decompiler::makeWarning(tr("Failed to parse JSON from jsdec")));
return; return;
} }
RzAnnotatedCode *code = rz_annotated_code_new(nullptr); RzAnnotatedCode *code = rz_annotated_code_new(nullptr);

View File

@ -37,7 +37,7 @@ signals:
void finished(RzAnnotatedCode *codeDecompiled); void finished(RzAnnotatedCode *codeDecompiled);
}; };
class R2DecDecompiler: public Decompiler class JSDecDecompiler: public Decompiler
{ {
Q_OBJECT Q_OBJECT
@ -45,7 +45,7 @@ private:
RizinCmdTask *task; RizinCmdTask *task;
public: public:
explicit R2DecDecompiler(QObject *parent = nullptr); explicit JSDecDecompiler(QObject *parent = nullptr);
void decompileAt(RVA addr) override; void decompileAt(RVA addr) override;
bool isRunning() override { return task != nullptr; } bool isRunning() override { return task != nullptr; }

View File

@ -67,7 +67,7 @@ public:
/** /**
* @brief send a command to Rizin asynchronously * @brief send a command to Rizin asynchronously
* @param str the command you want to execute * @param str the command you want to execute
* @param task a shared pointer that will be returned with the R2 command task * @param task a shared pointer that will be returned with the Rizin command task
* @note connect to the &RizinTask::finished signal to add your own logic once * @note connect to the &RizinTask::finished signal to add your own logic once
* the command is finished. Use task->getResult()/getResultJson() for the * the command is finished. Use task->getResult()/getResultJson() for the
* return value. * return value.
@ -124,7 +124,7 @@ public:
/** /**
* @brief send a command to Rizin and check for ESIL errors * @brief send a command to Rizin and check for ESIL errors
* @param command the command you want to execute * @param command the command you want to execute
* @param task a shared pointer that will be returned with the R2 command task * @param task a shared pointer that will be returned with the Rizin command task
* @note connect to the &RizinTask::finished signal to add your own logic once * @note connect to the &RizinTask::finished signal to add your own logic once
* the command is finished. Use task->getResult()/getResultJson() for the * the command is finished. Use task->getResult()/getResultJson() for the
* return value. * return value.