Compare commits

...
112 Commits
Author SHA1 Message Date
pancake 4a8ee1df1a Use asm.cmt.col = 60 by default 2021-04-27 10:19:36 +02:00
pancake 3c0efeeb7e Update translations submodule 2021-04-27 10:14:47 +02:00
pancake 0bdcf1330b Release 5.2.2 - update release scripts to simplify maintainance 2021-04-27 10:13:41 +02:00
pancake 6e669c73df Fix installation and loading translations from system-wide path using make 2021-04-27 10:06:43 +02:00
pancake eacb49c19d Add agave font and don't use files with spaces in the name 2021-04-27 09:35:39 +02:00
pancake f91c721c29 Update metadatas 2021-04-27 09:35:19 +02:00
pancake 359e9e99c2 Fix #40 - setStackSize is only available on Qt >= 5.10 2021-04-27 09:19:34 +02:00
Levente Polyak 84849b76df Fix python bindings compilation after rebranding (#41) 2021-04-27 07:45:35 +02:00
pancake aec953b014 Update r2 submodule 2021-04-21 22:18:36 +02:00
pancake 495cd1a4e0 More CI updates for r2-5.2.1 2021-04-21 22:10:18 +02:00
pancake ce8bbfb897 Add autogen.sh script 2021-04-21 22:09:02 +02:00
pancake e2802599f9 Improve r2-w64 installation script for the CI 2021-04-21 22:04:31 +02:00
pancake 68ff0ad687 Prepare for the 5.2.1 release 2021-04-21 20:46:12 +02:00
pancake 9e42554405 Use the new dbg.wrap 2021-04-21 11:58:59 +02:00
pancake ea975ecdd8 pdc dblfree fix and 520 api compat 2021-04-21 08:28:23 +02:00
pancake e448b3d8b6 Update radare2 submodule 2021-04-21 00:31:12 +02:00
pancake ef913fcc12 Darker green in the navigation bar 2021-04-21 00:26:58 +02:00
pancake face9ca63c Fix for latest RCodeMeta api change in r2-5.2.1 2021-04-21 00:18:21 +02:00
pancake 0aa97752a4 Fix memory leaks by depending on r2-5.2.1 2021-04-19 13:49:26 +02:00
pancake 97bee62c32 Handle null deref after r_codemeta_in 2021-04-18 19:12:53 +02:00
pancake 91b2dcbe84 Minor code cleanup 2021-04-18 17:49:19 +02:00
pancake 4567054dde Add logo with solid background for the README 2021-04-18 13:44:09 +02:00
pancake 16c1f5d928 Enumerate debug IO plugins too 2021-04-18 01:47:59 +02:00
pancake 14afa872e2 Fix loading io plugin list from oLj new output 2021-04-18 01:47:08 +02:00
pancake 827e86b6a6 Fix cutter -> iaito commandline flag reference 2021-04-18 01:46:26 +02:00
defragger 02a130e1c9 Fix #30 - Fix segfault in ImportsModel::rowCount 2021-04-17 09:45:16 +02:00
xambroz 36c245f3cb Some files were renamed only in build scripts (#35)
* Rename Cutter.astylerc to Iaito.astylerc

* Rename CutterConfig.h.meson.in to IaitoConfig.h.meson.in

* Rename CutterSamplePlugin.cpp to IaitoSamplePlugin.cpp

* Rename CutterSamplePlugin.h to IaitoSamplePlugin.h

* Rename CutterSamplePlugin.pro to IaitoSamplePlugin.pro
2021-04-17 08:55:35 +02:00
xambroz 9ce1029970 Add manpage, install appdata.xml (#33) 2021-04-16 22:19:14 +02:00
PHPoenX f4572ebd3a Updated link to issues in debugger (#32) 2021-04-16 20:04:18 +02:00
pancake 5f5ea915c3 Add bluy theme and sort them alphabetically 2021-04-16 19:24:07 +02:00
xambroz c414d25949 Tweak desktop launcher (#31)
* Rename org.radare.r2cutter.appdata.xml to org.radare.iaito.appdata.xml

r2cutter -> iaito

* Rename org.radare.r2cutter.desktop to org.radare.iaito.desktop

r2cutter -> iaito

* version changed to 5.2.0

* The icon installed by meson is the iaito-o

* Update the desktop file with search keywords

Keywords are used for example by the Gnome activities. Now typing r2 in activities would allow finding the iaiato as relevant application.
I have also added the tool to relevant categories for the same reason.
2021-04-16 17:27:58 +02:00
pancake 90745685b8 Fix #27 - Fix inconsistent docklock state on startup 2021-04-16 00:34:52 +02:00
pancake 07407f2603 Update README for debian/ubuntu instructions 2021-04-16 00:34:36 +02:00
pancake e33170f1fe Bump version for 5.2.1 2021-04-15 23:50:46 +02:00
pancake d29ecb9832 Update r2 submodule... is this really used? :D 2021-04-15 17:53:36 +02:00
pancake 5c34c270e8 Simplify the NewFile Dialog a little bit and add dummy IO submenus 2021-04-15 03:12:23 +02:00
pancake 14166f17af Allow to set comment and color and fix flag dialog typos and use C api instead of cmds 2021-04-15 01:18:03 +02:00
pancake 836f06f624 Simplified github issue templates 2021-04-12 11:17:31 +02:00
pancake e296df6661 Release 5.2.0 2021-04-12 01:39:07 +02:00
pancake 81fa1a5f53 Update translations submodule 2021-04-12 01:20:56 +02:00
pancake 05fd2eb752 Add bin.cache in the Initial Options Dialog 2021-04-12 00:28:43 +02:00
pancake 320d63a9a7 Fix double Quit issue 2021-04-12 00:28:33 +02:00
pancake b8040a7c7f Workaround translation issue on macos 2021-04-11 23:41:34 +02:00
pancake e307129c51 Improve light theme tab widget background color 2021-04-11 23:35:43 +02:00
pancake 37611551a6 Force build the translations on install if not found 2021-04-11 23:23:37 +02:00
pancake a60fb8ef89 CI Build issues 2021-04-11 23:04:54 +02:00
pancake 6936121560 More Iaito rebranding and cmake fixes 2021-04-11 22:52:05 +02:00
pancake e1b3d54199 winfix 2021-04-11 22:12:37 +02:00
pancake 037ebe09d2 Use latest 5.2.0 release 2021-04-11 21:56:39 +02:00
pancake 3146a1ec93 Fix build 2021-04-08 15:31:56 +02:00
pancake d6655ee136 Drop the gradient in the midnight QDockWidgets 2021-04-08 04:25:20 +02:00
pancake 4387a28f28 Update the README 2021-04-08 02:29:53 +02:00
pancake 1000025fd1 Dont use the travis, github actions is enough 2021-04-08 02:26:13 +02:00
pancake 46db1266c0 Update README 2021-04-08 02:25:42 +02:00
pancake 217724f3a8 Fix crash and also load locales from qtdir 2021-04-08 02:16:57 +02:00
pancake 5b99f55bd4 Fix submodule path 2021-04-08 02:05:43 +02:00
pancake 6c45fc8897 Update translation submodule 2021-04-08 02:01:48 +02:00
pancake 5b198d7cfe Fix application icon 2021-04-08 01:59:02 +02:00
pancake 1d3bf7ddca Update r2 submodule 2021-04-08 01:53:14 +02:00
pancake 3e6fdd8a18 Add Esperanto, Galician, Basque and Tokipona 2021-04-08 01:48:10 +02:00
pancake 865487d444 Load languages from user's home too 2021-04-08 00:31:39 +02:00
pancake ce820ba391 Use iaito-translations instead of cutter-translations 2021-04-07 23:12:44 +02:00
pancake db8736c102 Enable emu.str by default 2021-04-07 22:57:41 +02:00
pancake 72b89ceecb Add r2git ci jobs 2021-04-07 11:39:04 +02:00
pancake 8ab448ea3e Rebranding from r2cutter back to iaito 2021-04-07 11:28:04 +02:00
pancake c557a4653f Fix brace comment 2021-04-04 18:05:58 +02:00
pancake 625dc13077 Add more r2 themes for light and dark modes 2021-04-04 01:42:49 +02:00
pancake 1eaa9223be Bump version to be in sync with r2 2021-04-04 01:14:51 +02:00
pancake f3cde628f1 Fix re-install in macOS 2021-04-04 01:13:26 +02:00
pancake ca8588191f Add r2retdec decompiler plugin, autodetected from r2 2021-04-04 01:08:42 +02:00
pancake 8400eb4cce Increase stack size on the thread running r2
* Fix crashes when analyzing big functions
2021-04-04 00:58:15 +02:00
xambroz e927ce77fe cutter -> re2cutter renaming (#23) 2021-04-03 02:51:15 +02:00
pancake a373bcbb2e Add support for the 'pdc decompiler' 2021-04-01 03:05:03 +02:00
pancake 061633e157 prj.simple doesnt exist anymore 2021-04-01 02:00:37 +02:00
Begasus 5310b73d01 Fix build for Haiku which doesn't have O_ASYNC yet (#2485) 2021-03-30 03:32:16 +02:00
pancake 368c37d519 Update radare2 module 2021-03-30 02:01:13 +02:00
pancake 5b1ae7f435 Implement R2GhidraCmd decompiler inline plugin
* Uses the pdg command directly
2021-03-30 01:52:51 +02:00
pancake 9a5a63b29b Fix dupe makeWarning symbol 2021-03-30 01:37:14 +02:00
pancake 5e797fa380 Update r2 submodule again 2021-03-30 00:54:38 +02:00
pancake d71e659b0e Fix build with latest r2 from git 2021-03-30 00:54:06 +02:00
pancake 94291239dd Update r2 submodule 2021-03-29 19:19:16 +02:00
pancake b2429b241f Aim to fix the hidden magic behind the silent make calls 2021-03-29 19:18:49 +02:00
xambroz 942219f371 Overview of the Linux package versions (#21) 2021-03-29 18:48:45 +02:00
pancake 3d17c96ddc Remove the buggy transition settings code and fix hang on projects save 2021-03-29 17:29:31 +02:00
pancake 14cbc4448b Fix for the macOS packaging 2021-03-29 16:53:32 +02:00
pancake 0b9dbf2c6d Make improvements 2021-03-29 14:47:00 +02:00
pancakeandpancake 7eccea7693 Fix warning (#18)
Co-authored-by: pancake <[email protected]>
2021-03-29 11:55:23 +02:00
pancakeandpancake caa778b89f Update translations submodule (#16)
Co-authored-by: pancake <[email protected]>
2021-03-29 01:23:01 +02:00
pancake 4505d9c2f2 Fix remaining warnings 2021-03-29 01:20:57 +02:00
pancake d77ae74e96 asm.var.sub -> asm.sub.var 2021-03-29 01:03:42 +02:00
pancake 193320e5dd Fix C++ Warnings 2021-03-29 01:02:07 +02:00
pancake be383c3826 Fix Linux CI build 2021-03-29 00:47:44 +02:00
pancake b68b0feb24 Rollback the crap 2021-03-26 14:26:29 +01:00
pancake a016642441 Safer make check 2021-03-26 12:39:28 +01:00
pancake 0a24a2575e Build and warning fixes 2021-03-26 12:33:56 +01:00
pancake 9b2af5399f More warnings fixed related to references QJsonValue 2021-03-26 03:00:32 +01:00
pancake aa525c04cb Fix all warnings in Cutter.cpp 2021-03-26 02:53:54 +01:00
pancake 9871d3b0fc asm.bb.line -> asm.lines.bb 2021-03-26 02:49:11 +01:00
pancake 85811cb18d Update radare2 submodule 2021-03-26 02:39:08 +01:00
pancake 53df3aeb33 Fix for pkg-config 2021-03-26 02:36:12 +01:00
pancake 01bb0ab306 Initial work towards supporting Qt6 and C++17 2021-03-26 02:36:07 +01:00
xambroz 7496b8255b Unhandled result of the pipe function (#11)
Added handling of the failed call to pipe function.

Related to https://github.com/radareorg/r2cutter/issues/10

[ 58%] Building CXX object CMakeFiles/r2cutter.dir/widgets/ProcessesWidget.cpp.o
/usr/lib64/ccache/g++ -DCUTTER_ENABLE_GRAPHVIZ -DCUTTER_ENABLE_KSYNTAXHIGHLIGHTING -DCUTTER_SOURCE_BUILD -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_SVG_LIB -DQT_WIDGETS_LIB -Dr2cutter_EXPORTS -I/home/mambroz/rpmbuild/BUILD/r2cutter-0.1.1/x86_64-redhat-linux-gnu -I/home/mambroz/rpmbuild/BUILD/r2cutter-0.1.1/src -I/home/mambroz/rpmbuild/BUILD/r2cutter-0.1.1/x86_64-redhat-linux-gnu/r2cutter_autogen/include -I/home/mambroz/rpmbuild/BUILD/r2cutter-0.1.1/src/core -I/home/mambroz/rpmbuild/BUILD/r2cutter-0.1.1/src/widgets -I/home/mambroz/rpmbuild/BUILD/r2cutter-0.1.1/src/common -I/home/mambroz/rpmbuild/BUILD/r2cutter-0.1.1/src/plugins -I/home/mambroz/rpmbuild/BUILD/r2cutter-0.1.1/src/menus -I/home/mambroz/rpmbuild/BUILD/r2cutter-0.1.1/src/. -isystem /usr/include/graphviz -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtCore -isystem /usr/lib64/qt5/mkspecs/linux-g++ -isystem /usr/include/qt5/QtWidgets -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtSvg -isystem /usr/include/qt5/QtNetwork -isystem /usr/include/libr -isystem /usr/include/libr/sdb -isystem /usr/include/capstone -isystem /usr/include/KF5/KSyntaxHighlighting -isystem /usr/include/KF5 -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fvisibility=hidden   -Wall -Wextra -fPIC -std=gnu++11 -o CMakeFiles/r2cutter.dir/widgets/ProcessesWidget.cpp.o -c /home/mambroz/rpmbuild/BUILD/r2cutter-0.1.1/src/widgets/ProcessesWidget.cpp
/home/mambroz/rpmbuild/BUILD/r2cutter-0.1.1/src/widgets/ConsoleWidget.cpp: In member function 'void ConsoleWidget::redirectOutput()':
/home/mambroz/rpmbuild/BUILD/r2cutter-0.1.1/src/widgets/ConsoleWidget.cpp:468:9: warning: ignoring return value of 'int pipe(int*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  468 |     pipe(redirectPipeFds);
      |     ~~~~^~~~~~~~~~~~~~~~~
[ 60%] Building CXX object CMakeFiles/r2cutter.dir/dialogs/MapFileDialog.cpp.o
[ 60%] Building CXX object CMakeFiles/r2cutter.dir/widgets/BacktraceWidget.cpp.o
[ 60%] Building CXX object CMakeFiles/r2cutter.dir/common/CommandTask.cpp.o
2021-03-21 03:01:22 +01:00
xambroz 8cbe8f2975 Avoid warning about uninitialized menu (#12)
Avoid warning message about potentially uninitialized variable "menu".
It is initialized in if/else so just nulling it on the beginning should do the trick.

[ 36%] Building CXX object CMakeFiles/r2cutter.dir/widgets/DisassemblyWidget.cpp.o
/usr/lib64/ccache/g++ -DCUTTER_ENABLE_GRAPHVIZ -DCUTTER_ENABLE_KSYNTAXHIGHLIGHTING -DCUTTER_SOURCE_BUILD -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_SVG_LIB -DQT_WIDGETS_LIB -Dr2cutter_EXPORTS -IBUILD/r2cutter-0.1.1/x86_64-redhat-linux-gnu -IBUILD/r2cutter-0.1.1/src -IBUILD/r2cutter-0.1.1/x86_64-redhat-linux-gnu/r2cutter_autogen/include -IBUILD/r2cutter-0.1.1/src/core -IBUILD/r2cutter-0.1.1/src/widgets -IBUILD/r2cutter-0.1.1/src/common -IBUILD/r2cutter-0.1.1/src/plugins -IBUILD/r2cutter-0.1.1/src/menus -IBUILD/r2cutter-0.1.1/src/. -isystem /usr/include/graphviz -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtCore -isystem /usr/lib64/qt5/mkspecs/linux-g++ -isystem /usr/include/qt5/QtWidgets -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtSvg -isystem /usr/include/qt5/QtNetwork -isystem /usr/include/libr -isystem /usr/include/libr/sdb -isystem /usr/include/capstone -isystem /usr/include/KF5/KSyntaxHighlighting -isystem /usr/include/KF5 -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fvisibility=hidden   -Wall -Wextra -fPIC -std=gnu++11 -o CMakeFiles/r2cutter.dir/widgets/DisassemblyWidget.cpp.o -c BUILD/r2cutter-0.1.1/src/widgets/DisassemblyWidget.cpp
BUILD/r2cutter-0.1.1/src/menus/DecompilerContextMenu.cpp: In member function 'DecompilerContextMenu::updateTargetMenuActions()':
BUILD/r2cutter-0.1.1/src/menus/DecompilerContextMenu.cpp:575:24: warning: 'menu' may be used uninitialized in this function [-Wmaybe-uninitialized]
  575 |         action->setMenu(menu);
      |         ~~~~~~~~~~~~~~~^~~~~~
2021-03-21 03:01:08 +01:00
pancake 3e34672e7e Fix #10 - check return value of write API call 2021-03-19 10:58:02 +01:00
pancake 7d9729bbff Fix #8 - do not define the same enum twice 2021-03-19 10:54:23 +01:00
pancake 19435220bf Fix #9 - move unused variable into commented code block 2021-03-19 10:50:52 +01:00
pancake 86ee0a9cae Release 0.1.1 - second beta release 2021-02-02 15:48:51 +01:00
pancake b8c74e073d Dont touch the dir.plugins, so system plugins work again 2021-02-02 14:04:22 +01:00
pancake f73ad3216a Dont check version when no gittap available 2021-02-02 13:28:14 +01:00
pancake 8f773e9c14 Remove empty line 2021-02-02 12:58:07 +01:00
pancake baf2c363d5 Fix macOS package versioning 2021-02-01 16:39:50 +01:00
pancake 82b2351954 Fix CI namings and versionings 2021-01-31 02:55:43 +01:00
403 changed files with 3522 additions and 2870 deletions

No files matched your search

+7 -7
View File
@@ -35,7 +35,7 @@ environment:
install:
- ps: $env:path = ($env:path -split ";").Where({!($_ -like "*Microsoft SQL Server*")}) -join ";"
- cmd: C:\msys64\usr\bin\bash -lc "cd $APPVEYOR_BUILD_FOLDER && scripts/fetch_deps.sh"
- cmd: set "CUTTER_DEPS_DIR=%APPVEYOR_BUILD_FOLDER%\cutter-deps"
- cmd: set "IAITO_DEPS_DIR=%APPVEYOR_BUILD_FOLDER%\cutter-deps"
- cmd: set "PATH=%CD%;%PYTHON%;%PATH%"
- cmd: call "%VSVARSALLPATH%" %ARCH%
- cmd: if "%USE_APPVEYOR_QT%" == "false" ( set "QTPATH=%APPVEYOR_BUILD_FOLDER%\%QTPATH%" )
@@ -45,7 +45,7 @@ install:
- cmd: where meson.exe
- cmd: powershell -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; wget %NINJA_URL% -OutFile ninja.zip; Expand-Archive .\ninja.zip -DestinationPath ."
# Artifacts
- cmd: set "ARTIFACT_NAME=Cutter-v1.12.0-%ARCH%.Windows"
- cmd: set "ARTIFACT_NAME=Iaito-v1.12.0-%ARCH%.Windows"
- cmd: if defined MESON ( set "ARTIFACT_PATH=dist_%ARCH%" ) else ( set "ARTIFACT_PATH=build_%ARCH%\cutter" )
before_build:
@@ -56,7 +56,7 @@ before_build:
build_script:
- cmd: if defined QMAKE ( call prepare_r2.bat )
- cmd: if defined QMAKE ( C:\msys64\usr\bin\bash -lc "export PATH=\"/c/msys64/usr/bin:$PATH\" && cd \"$APPVEYOR_BUILD_FOLDER\" && scripts/appveyor_r2ghidra.sh" )
- cmd: if defined QMAKE ( call build.bat CUTTER_APPVEYOR_R2DEC=true CUTTER_R2GHIDRA_STATIC=true R2GHIDRA_SOURCE="%APPVEYOR_BUILD_FOLDER%/r2ghidra" R2GHIDRA_INSTALL_PATH="%APPVEYOR_BUILD_FOLDER%/r2_dist/lib/plugins" CUTTER_ENABLE_CRASH_REPORTS=true CUTTER_ENABLE_PYTHON=true CUTTER_ENABLE_PYTHON_BINDINGS=true CUTTER_DEPS_DIR="%CUTTER_DEPS_DIR%" )
- cmd: if defined QMAKE ( call build.bat IAITO_APPVEYOR_R2DEC=true IAITO_R2GHIDRA_STATIC=true R2GHIDRA_SOURCE="%APPVEYOR_BUILD_FOLDER%/r2ghidra" R2GHIDRA_INSTALL_PATH="%APPVEYOR_BUILD_FOLDER%/r2_dist/lib/plugins" IAITO_ENABLE_CRASH_REPORTS=true IAITO_ENABLE_PYTHON=true IAITO_ENABLE_PYTHON_BINDINGS=true IAITO_DEPS_DIR="%IAITO_DEPS_DIR%" )
- cmd: if defined MESON ( python meson.py --release --dist=%ARTIFACT_PATH% --backend=%BACKEND% --python )
after_build:
@@ -64,9 +64,9 @@ after_build:
#- cmd: if defined QMAKE ( C:\msys64\usr\bin\bash -lc "export PATH=\"/c/msys64/usr/bin:$PATH\" && cd \"$APPVEYOR_BUILD_FOLDER\" && scripts/appveyor_r2ghidra.sh" )
#- cmd: powershell scripts\bundle_openssl.ps1 %ARCH% "%CD%\%ARTIFACT_PATH%"
- cmd: powershell scripts\bundle_python.ps1 %ARCH% "%CD%\%ARTIFACT_PATH%"
- cmd: xcopy "%CUTTER_DEPS_DIR%\pyside\lib\site-packages" "%ARTIFACT_PATH%\python36\site-packages" /e /i /h
- cmd: copy "%CUTTER_DEPS_DIR%\pyside\bin\shiboken2.abi3.dll" "%ARTIFACT_PATH%\"
- cmd: copy "%CUTTER_DEPS_DIR%\pyside\bin\pyside2.abi3.dll" "%ARTIFACT_PATH%\"
- cmd: xcopy "%IAITO_DEPS_DIR%\pyside\lib\site-packages" "%ARTIFACT_PATH%\python36\site-packages" /e /i /h
- cmd: copy "%IAITO_DEPS_DIR%\pyside\bin\shiboken2.abi3.dll" "%ARTIFACT_PATH%\"
- cmd: copy "%IAITO_DEPS_DIR%\pyside\bin\pyside2.abi3.dll" "%ARTIFACT_PATH%\"
# Tests
test: off
@@ -77,7 +77,7 @@ artifacts:
name: "%ARTIFACT_NAME%"
deploy:
description: 'Cutter binaries'
description: 'Iaito binaries'
provider: GitHub
auth_token:
secure: 2SmsqS2RaX2N5c9UwUcfBwNmMX64FfPAZFShLyxIkZXiC8vLaYCHToWxBYEuWRSk
+11 -30
View File
@@ -4,37 +4,18 @@ about: Create a report to help us improve
---
**Environment information**
* Operating System:
* Cutter version:
* Obtained from:
- [x] Built from source
- [ ] Downloaded release from Cutter website or GitHub
- [ ] Distribution repository
* File format:
## Environment Details
**Describe the bug**
Despite we only fix issues reproducible in git-master branch, it's fine to report issues found in releases. And those will be closed when a new release comes out.
<!-- A clear and concise description of what the bug is. -->
```sh
# copypaste this script into your shell and replace it with the output
iaito -v
date
r2 -v
uname -ms
```
**To Reproduce**
## Description
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
<!-- A clear and concise description of what you expected to happen. -->
**Screenshots**
<!-- If applicable, add screenshots to help explain your problem. -->
**Additional context**
<!-- Add any other context about the problem here. -->
<!-- Explain what's the issue, how to repro and what you expect, we love screenshots -->
+5 -5
View File
@@ -2,9 +2,9 @@ blank_issues_enabled: false
contact_links:
- name: Questions Telegram
url: https://t.me/r2cutter
about: Please ask questions about Cutter here or one of the other community channels, not in the issue tracker.
url: https://t.me/radare
about: Please ask questions about Iaito in the radare telegram or IRC chat
- name: Questions IRC
url: https://webchat.freenode.net/#cutter
about: "#cutter on irc.freenode.net"
- name: Questions Discord
url: https://discord.gg/MgEdxrMnqx
about: "Official Discord server"
+2 -15
View File
@@ -4,19 +4,6 @@ about: Suggest an idea for this project
---
**Is your feature request related to a problem? Please describe.**
**Feature Request Description**
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
**Describe the solution you'd like**
<!-- A clear and concise description of what you want to happen.
For UI requests, don't hesitate to post some draws. -->
**Describe alternatives you've considered**
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
**Additional context**
<!-- Add any other context or screenshots about the feature request here. -->
<!-- Describe your feature request for iaito only using ascii and jpegs only -->
+64 -33
View File
@@ -1,4 +1,4 @@
name: r2cutter CI
name: iaito CI
on:
push:
@@ -9,6 +9,36 @@ on:
- master
jobs:
acr-linux-r2git:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
with:
submodules: true # 'recursive' 'true' or 'false'
persist-credentials: false
- uses: actions/setup-python@v1
with:
python-version: 3.7.x
- name: apt dependencies
run: |
sudo apt-get update
sudo apt-get install libgraphviz-dev mesa-common-dev ninja-build
sudo apt-get install qt5-default libqt5svg5-dev qttools5-dev qttools5-dev-tools
- name: install r2
run: |
git clone --depth=1 https://github.com/radareorg/radare2 r2git
cd r2git && sys/install.sh
- name: build iaito
run: |
./configure --prefix=/usr
make -j4
- name: packaging
run: |
make -C dist/debian
- uses: actions/upload-artifact@v2
with:
name: iaito-amd64.deb
path: dist/debian/*/*.deb
acr-linux:
runs-on: ubuntu-20.04
steps:
@@ -26,10 +56,10 @@ jobs:
sudo apt-get install qt5-default libqt5svg5-dev qttools5-dev qttools5-dev-tools
- name: install r2
run: |
wget -q https://github.com/radareorg/radare2/releases/download/5.1.0/radare2_5.1.0_amd64.deb
wget -q https://github.com/radareorg/radare2/releases/download/5.1.0/radare2-dev_5.1.0_amd64.deb
wget -q https://github.com/radareorg/radare2/releases/download/5.2.1/radare2_5.2.1_amd64.deb
wget -q https://github.com/radareorg/radare2/releases/download/5.2.1/radare2-dev_5.2.1_amd64.deb
sudo dpkg -i *.deb
- name: build r2cutter
- name: build iaito
run: |
./configure --prefix=/usr
make -j4
@@ -38,6 +68,7 @@ jobs:
make -C dist/debian
- uses: actions/upload-artifact@v2
with:
name: iaito-amd64.deb
path: dist/debian/*/*.deb
acr-macos:
runs-on: macos-latest
@@ -57,20 +88,20 @@ jobs:
pip3 install meson
- name: install r2
run: |
wget -q https://github.com/radareorg/radare2/releases/download/5.1.0/radare2-5.1.0.pkg
wget -q https://github.com/radareorg/radare2/releases/download/5.2.1/radare2-5.2.1.pkg
sudo installer -pkg *.pkg -target /
- name: build r2cutter
- name: build iaito
run: |
# export PATH="/usr/local/opt/qt/bin:$PATH" # doesnt seems to be necessary
./configure --prefix=/usr
./configure
make -j4
- name: packaging
run: |
make -C dist/macos
- uses: actions/upload-artifact@v2
with:
name: r2cutter-5.1.0_macos.pkg
path: dist/macos/macos-pkg/*.pkg
name: iaito-mac.pkg
path: dist/macos/macos-pkg/iaito*.pkg
build:
runs-on: ${{ matrix.os }}
strategy:
@@ -115,7 +146,7 @@ jobs:
- uses: actions/upload-artifact@v2
if: contains(matrix.os, 'ubuntu')
with:
name: r2cutter-5.1.0_amd64.deb
name: iaito_amd64.deb
path: dist/debian/*/*.deb
- name: cmake ubuntu
if: contains(matrix.os, 'ubuntu')
@@ -144,19 +175,19 @@ jobs:
cmake \
-G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCUTTER_ENABLE_PYTHON=ON \
-DIAITO_ENABLE_PYTHON=ON \
-DPYTHON_LIBRARY="$CUTTER_DEPS_PYTHON_PREFIX/lib/libpython3.6m.so.1.0" \
-DPYTHON_INCLUDE_DIR="$CUTTER_DEPS_PYTHON_PREFIX/include/python3.6m" \
-DPYTHON_EXECUTABLE="$CUTTER_DEPS_PYTHON_PREFIX/bin/python3" \
-DCUTTER_ENABLE_PYTHON_BINDINGS=OFF \
-DCUTTER_ENABLE_CRASH_REPORTS=ON \
-DCUTTER_USE_BUNDLED_RADARE2=ON \
-DIAITO_ENABLE_PYTHON_BINDINGS=OFF \
-DIAITO_ENABLE_CRASH_REPORTS=ON \
-DIAITO_USE_BUNDLED_RADARE2=ON \
../src
else
cmake \
-G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCUTTER_USE_BUNDLED_RADARE2=ON \
-DIAITO_USE_BUNDLED_RADARE2=ON \
../src
fi
ninja
@@ -167,7 +198,7 @@ jobs:
scripts/fetch_deps.sh
source cutter-deps/env.sh
set -euo pipefail
wget -q https://github.com/radareorg/radare2/releases/download/5.1.0/radare2-5.1.0.pkg
wget -q https://github.com/radareorg/radare2/releases/download/5.2.1/radare2-5.2.1.pkg
sudo installer -pkg *.pkg -target /
export PATH=/usr/local/opt/llvm/bin:$PATH
source scripts/prepare_breakpad_macos.sh
@@ -178,24 +209,24 @@ jobs:
-DPYTHON_LIBRARY="$CUTTER_DEPS_PYTHON_PREFIX/lib/libpython3.6m.dylib" \
-DPYTHON_INCLUDE_DIR="$CUTTER_DEPS_PYTHON_PREFIX/include/python3.6m" \
-DPYTHON_EXECUTABLE="$CUTTER_DEPS_PYTHON_PREFIX/bin/python3" \
-DCUTTER_ENABLE_PYTHON=ON \
-DCUTTER_ENABLE_PYTHON_BINDINGS=ON \
-DCUTTER_ENABLE_CRASH_REPORTS=ON \
-DCUTTER_USE_BUNDLED_RADARE2=ON \
-DCUTTER_ENABLE_PACKAGING=ON \
-DCUTTER_PACKAGE_DEPENDENCIES=ON \
-DCUTTER_ENABLE_DEPENDENCY_DOWNLOADS=ON \
-DIAITO_ENABLE_PYTHON=ON \
-DIAITO_ENABLE_PYTHON_BINDINGS=OFF \
-DIAITO_ENABLE_CRASH_REPORTS=ON \
-DIAITO_USE_BUNDLED_RADARE2=ON \
-DIAITO_ENABLE_PACKAGING=ON \
-DIAITO_PACKAGE_DEPENDENCIES=ON \
-DIAITO_ENABLE_DEPENDENCY_DOWNLOADS=ON \
-DCMAKE_FRAMEWORK_PATH="$BREAKPAD_FRAMEWORK_DIR" \
../src && \
make -j4;
make package
export CUTTER_VERSION=$(python3 ../scripts/get_version.py)
echo PACKAGE_NAME=r2cutter-${CUTTER_VERSION}-Darwin.tar.gz >> $GITHUB_ENV
export IAITO_VERSION=$(python3 ../scripts/get_version.py)
echo PACKAGE_NAME=iaito-mac.tar.gz >> $GITHUB_ENV
cd .. && make -C dist/macos
- uses: actions/upload-artifact@v2
if: contains(matrix.os, 'macos')
with:
name: r2cutter-5.1.0_macos.pkg
name: iaito-mac.pkg
path: dist/macos/macos-pkg/*.pkg
- name: windows dependencies
if: contains(matrix.os, 'windows-latest')
@@ -209,7 +240,7 @@ jobs:
shell: cmd
run: |
set ARCH=x64
set CUTTER_DEPS=%CD%\cutter-deps
set IAITO_DEPS=%CD%\cutter-deps
set PATH=%CD%\cutter-deps\qt\bin;%CD%\r2_dist\bin;%PATH%
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
move radare2 radare2_git
@@ -218,12 +249,12 @@ jobs:
cd
mkdir build
cd build
set PACKAGE_NAME=r2cutter-git-x64.Windows
set PACKAGE_NAME=iaito-w64
cmake ^
-DCMAKE_BUILD_TYPE=Release ^
-DCUTTER_PACKAGE_DEPENDENCIES=ON ^
-DCUTTER_ENABLE_DEPENDENCY_DOWNLOADS=ON ^
-DCUTTER_ENABLE_CRASH_REPORTS=ON ^
-DIAITO_PACKAGE_DEPENDENCIES=ON ^
-DIAITO_ENABLE_DEPENDENCY_DOWNLOADS=ON ^
-DIAITO_ENABLE_CRASH_REPORTS=ON ^
-DCMAKE_PREFIX_PATH="%CUTTER_DEPS%\pyside" ^
-DCPACK_PACKAGE_FILE_NAME=%PACKAGE_NAME% ^
-G Ninja ^
@@ -231,8 +262,8 @@ jobs:
cmake --build . --config Release
cmake --build . --config Release --target package
echo PACKAGE_NAME=%PACKAGE_NAME%.zip >> %GITHUB_ENV%
# -DCUTTER_ENABLE_PYTHON=ON ^
# -DCUTTER_ENABLE_PYTHON_BINDINGS=ON ^
# -DIAITO_ENABLE_PYTHON=ON ^
# -DIAITO_ENABLE_PYTHON_BINDINGS=ON ^
- uses: actions/upload-artifact@v2
if: env.PACKAGE_NAME != null
with:
+2 -2
View File
@@ -41,7 +41,7 @@ jobs:
export LD_LIBRARY_PATH="`llvm-config --libdir`:$LD_LIBRARY_PATH"
mkdir build
cd build
cmake -DCUTTER_USE_BUNDLED_RADARE2=ON ../src
cmake -DIAITO_USE_BUNDLED_RADARE2=ON ../src
- name: Build with cov-build
run: |
@@ -59,7 +59,7 @@ jobs:
--form [email protected] \
--form [email protected] \
--form version=trunk \
--form description="Cutter" \
--form description="Iaito" \
https://scan.coverity.com/builds?project=radareorg%2Fcutter
env:
TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
+1 -1
View File
@@ -3,4 +3,4 @@
url = https://github.com/radareorg/radare2
[submodule "src/translations"]
path = src/translations
url = https://github.com/radareorg/cutter-translations
url = https://github.com/radareorg/iaito-translations
-297
View File
@@ -1,297 +0,0 @@
language: cpp
cache: ccache
branches:
only:
- master
- debug
- /^v\d.*$/
- /^deploy-test(-.*)?$/
matrix:
include:
- name: Linux QMake
os: linux
dist: xenial
env: BUILD_SYSTEM=qmake
addons:
apt:
packages:
- mesa-common-dev
- libgl1-mesa-glx
- libgl1-mesa-dev
- libxkbcommon-x11-dev
- ninja-build/xenial-backports
- name: Linux CMake
os: linux
env: BUILD_SYSTEM=cmake_nodep
before_install:
- ls $(pyenv root)/versions
- pyenv global 3.7
- pip3 install meson
addons:
apt:
packages:
- mesa-common-dev
- ninja-build
- libgraphviz-dev
- qt5-default
- libqt5svg5-dev
- qttools5-dev
- name: Linux CMake + Deploy
os: linux
env: BUILD_SYSTEM=cmake DEPLOY=1
dist: xenial
addons:
apt:
packages:
- mesa-common-dev
- libgl1-mesa-glx
- libgl1-mesa-dev
- libxkbcommon-x11-dev
- ninja-build/xenial-backports
#- name: Linux Ubuntu 16.04 # test that Cutter can be built on an old distro using system libraries
# os: linux
# env: BUILD_SYSTEM=cmake_nodep PATH="/usr/bin:$PATH"
# dist: xenial
# addons:
# apt:
# packages:
# - ninja-build
# - libgraphviz-dev
# - qt5-default
# - libqt5svg5-dev
# - qttools5-dev
# - qttools5-dev-tools
# - cmake
# before_install:
# - pyenv install 3.5.2
# - pyenv global 3.5.2
# - pip install meson==0.52.1
- name: macOS QMake + Deploy
os: osx
osx_image: xcode11
env: BUILD_SYSTEM=qmake DEPLOY=1
before_install: ~
- name: macOS CMake
os: osx
osx_image: xcode11
env: BUILD_SYSTEM=cmake
before_install: ~
addons:
homebrew:
brewfile: scripts/Brewfile
update: true # updating brew to get slightly newer meson, 0.54 doesn't work on macOS.
- name: Documentation + Translations + Deploy
os: linux
cache: ~
addons:
apt:
packages:
- doxygen
- libgraphviz-dev
before_install:
- pyenv global 3.7
- pip3 install -U sphinx
- pip3 install -U breathe
- pip3 install -U sphinx-rtd-theme
- pip3 install -U recommonmark
install: ~
before_script: ~
after_success: ~
script:
- cd docs
- make html
before_deploy:
- cd "$TRAVIS_BUILD_DIR"
- openssl aes-256-cbc -K $encrypted_bd0ed4c1fd75_key -iv $encrypted_bd0ed4c1fd75_iv -in scripts/deploy_docs_rsa.enc -out scripts/deploy_docs_rsa -d
- openssl aes-256-cbc -K $encrypted_df6d16737705c_key -iv $encrypted_df6d16737705c_iv -in scripts/deploy_translations_rsa.enc -out scripts/deploy_translations_rsa -d
- chmod 600 scripts/deploy_docs_rsa
- chmod 600 scripts/deploy_translations_rsa
- export GIT_SSH_COMMAND="/usr/bin/ssh -i $TRAVIS_BUILD_DIR/scripts/deploy_docs_rsa"
- git config --global user.name "Travis CI"
- git config --global user.email "[email protected]"
deploy:
skip_cleanup: true
provider: script
script: bash -c "./scripts/deploy_docs.sh; ./scripts/deploy_translations.sh"
on:
repo: radareorg/cutter
branch: translate
sudo: required
dist: bionic
addons:
homebrew:
brewfile: scripts/Brewfile
# update: true
before_install:
- ls $(pyenv root)/versions
- pyenv global 3.7.1
- pip3 install meson
install:
- if [[ "$BUILD_SYSTEM" != "cmake_nodep" ]]; then
scripts/fetch_deps.sh;
source cutter-deps/env.sh;
fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
export PATH=/usr/local/opt/llvm/bin:$PATH;
source scripts/prepare_breakpad_macos.sh;
fi
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
export LD_LIBRARY_PATH="`llvm-config --libdir`:$LD_LIBRARY_PATH";
source scripts/prepare_breakpad_linux.sh;
fi
before_script:
- cd radare2
- if [[ "$BUILD_SYSTEM" == "qmake" ]] || ([[ "$BUILD_SYSTEM" == "cmake" ]] && [[ "$TRAVIS_OS_NAME" == "linux" ]]) ; then
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
INSTALL_TARGET=install sys/install.sh /usr;
else
LDFLAGS=-headerpad_max_install_names INSTALL_TARGET=install sys/install.sh;
fi
fi
- cd ..
script:
- mkdir build
- cd build
- export PKG_CONFIG_PATH="$CUSTOM_BREAKPAD_PREFIX/lib/pkgconfig:$CUSTOM_PYTHON_PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH"
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
if [[ "$BUILD_SYSTEM" == "qmake" ]]; then
qmake
CUTTER_ENABLE_PYTHON=true
CUTTER_ENABLE_PYTHON_BINDINGS=true
CUTTER_ENABLE_CRASH_REPORTS=true
PREFIX=/usr
../src &&
make -j4;
elif [[ "$BUILD_SYSTEM" == "cmake" ]]; then
cmake
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_PREFIX_PATH="$Qt5_ROOT"
-DPYTHON_LIBRARY="$CUTTER_DEPS_PYTHON_PREFIX/lib/libpython3.6m.so.1.0"
-DPYTHON_INCLUDE_DIR="$CUTTER_DEPS_PYTHON_PREFIX/include/python3.6m"
-DPYTHON_EXECUTABLE="$CUTTER_DEPS_PYTHON_PREFIX/bin/python3"
-DCUTTER_ENABLE_PYTHON=ON
-DCUTTER_ENABLE_PYTHON_BINDINGS=ON
-DCUTTER_ENABLE_CRASH_REPORTS=ON
-DCUTTER_USE_BUNDLED_RADARE2=OFF
-DCUTTER_APPIMAGE_BUILD=ON
-DCMAKE_INSTALL_PREFIX=appdir/usr
../src &&
make -j4;
elif [[ "$BUILD_SYSTEM" == "cmake_nodep" ]]; then
cmake
-DCMAKE_BUILD_TYPE=Release
-DCUTTER_USE_BUNDLED_RADARE2=ON
../src &&
make -j4;
fi
elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
if [[ "$BUILD_SYSTEM" == "qmake" ]]; then
qmake
CUTTER_ENABLE_PYTHON=true
CUTTER_ENABLE_PYTHON_BINDINGS=true
SHIBOKEN_EXTRA_OPTIONS=-isystem/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include
CUTTER_BUNDLE_R2_APPBUNDLE=true
CUTTER_ENABLE_CRASH_REPORTS=true
PYTHON_FRAMEWORK_DIR=$CUTTER_DEPS_PYTHON_FRAMEWORK_DIR
BREAKPAD_FRAMEWORK_DIR=$BREAKPAD_FRAMEWORK_DIR
../src &&
make -j4;
elif [[ "$BUILD_SYSTEM" == "cmake" ]]; then
cmake
-DCMAKE_BUILD_TYPE=Release
-DPYTHON_LIBRARY="$CUTTER_DEPS_PYTHON_PREFIX/lib/libpython3.6m.dylib"
-DPYTHON_INCLUDE_DIR="$CUTTER_DEPS_PYTHON_PREFIX/include/python3.6m"
-DPYTHON_EXECUTABLE="$CUTTER_DEPS_PYTHON_PREFIX/bin/python3"
-DCUTTER_ENABLE_PYTHON=ON
-DCUTTER_ENABLE_PYTHON_BINDINGS=ON
-DSHIBOKEN_EXTRA_OPTIONS=-isystem/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include
-DCUTTER_ENABLE_CRASH_REPORTS=ON
-DCUTTER_USE_BUNDLED_RADARE2=ON
-DBREAKPAD_FRAMEWORK_DIR="$BREAKPAD_FRAMEWORK_DIR"
../src &&
make -j4;
fi
fi
after_success:
# Do the release
- export CUTTER_VERSION=$(python ../scripts/get_version.py)
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
lrelease ../src/Cutter.pro &&
mkdir -p Cutter.app/Contents/Resources/translations &&
cp ../src/translations/*.qm Cutter.app/Contents/Resources/translations/ &&
macdeployqt Cutter.app -executable=Cutter.app/Contents/MacOS/Cutter -libpath="../Frameworks" &&
macdeployqt Cutter.app -executable=Cutter.app/Contents/MacOS/Cutter -libpath="../Frameworks" &&
cp -a "$QTDIR/lib/QtDBus.framework" "$QTDIR/lib/QtPrintSupport.framework" Cutter.app/Contents/Frameworks &&
cp -a "$BREAKPAD_FRAMEWORK_DIR/Breakpad.framework" Cutter.app/Contents/Frameworks &&
"$TRAVIS_BUILD_DIR/scripts/appbundle_embed_python.sh" "$CUTTER_DEPS_PYTHON_FRAMEWORK_DIR/Python.framework" Cutter.app Cutter.app/Contents/MacOS/Cutter &&
mv Cutter.app/Contents/MacOS/Cutter Cutter.app/Contents/MacOS/Cutter.bin &&
cp ../src/macos/Cutter.sh Cutter.app/Contents/MacOS/Cutter &&
chmod +x Cutter.app/Contents/MacOS/Cutter &&
mkdir -p Cutter.app/Contents/Resources/r2/share &&
cp -a /usr/local/share/radare2 Cutter.app/Contents/Resources/r2/share/ &&
"$TRAVIS_BUILD_DIR/scripts/r2ghidra.sh" -DCMAKE_INSTALL_PREFIX="`pwd`/Cutter.app/Contents/Resources/r2" -DBUILD_CUTTER_PLUGIN=ON -DCUTTER_INSTALL_PLUGDIR="`pwd`/Cutter.app/Contents/Resources/plugins/native" -DCUTTER_SOURCE_DIR="$TRAVIS_BUILD_DIR" &&
"$TRAVIS_BUILD_DIR/scripts/r2dec.sh" --prefix="`pwd`/Cutter.app/Contents/Resources/r2" &&
mkdir image && cp -a Cutter.app image/ &&
export VOL_NAME="Cutter v${CUTTER_VERSION}" &&
export DMG_TMP_FILE="Cutter-v$CUTTER_VERSION-x64.macOS-tmp.dmg" &&
export DMG_FILE="Cutter-v$CUTTER_VERSION-x64.macOS.dmg" &&
export SIZE=`du -sh "image" | sed 's/\([0-9\.]*\)M\(.*\)/\1/'` &&
export SIZE=`echo "${SIZE} + 10.0" | bc | awk '{print int($1+0.5)}'` &&
hdiutil create -srcfolder image -volname "${VOL_NAME}" -fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDRW -size ${SIZE}M "$DMG_TMP_FILE" &&
export DEVICE=$(hdiutil attach -readwrite -noverify "${DMG_TMP_FILE}" | egrep '^/dev/' | sed 1q | awk '{print $1}') &&
sleep 2 &&
../scripts/prepare_package_ui_macos.sh "Cutter" "${PWD}/../src/macos/cutter_mac_app.png" "${VOL_NAME}" &&
hdiutil detach "${DEVICE}" &&
hdiutil convert "${DMG_TMP_FILE}" -format UDZO -imagekey zlib-level=9 -o "${DMG_FILE}" &&
export FILE_TO_UPLOAD="$DMG_FILE"
; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ $DEPLOY == 1 ]]; then
export VERSION=$CUTTER_VERSION &&
make install &&
cp -r /usr/share/radare2 appdir/usr/share/ &&
"$TRAVIS_BUILD_DIR/scripts/appimage_embed_python.sh" appdir &&
"$TRAVIS_BUILD_DIR/scripts/r2ghidra.sh" -DCMAKE_INSTALL_PREFIX="`pwd`/appdir/usr" -DBUILD_CUTTER_PLUGIN=ON -DCUTTER_SOURCE_DIR="$TRAVIS_BUILD_DIR" &&
"$TRAVIS_BUILD_DIR/scripts/r2dec.sh" --prefix=`pwd`/appdir/usr &&
wget -c "https://github.com/probonopd/linuxdeployqt/releases/download/6/linuxdeployqt-6-x86_64.AppImage" &&
chmod a+x linuxdeployqt*.AppImage &&
rm -fv "$TRAVIS_BUILD_DIR/cutter-deps/qt/plugins/imageformats/libqjp2.so" &&
./linuxdeployqt*.AppImage ./appdir/usr/share/applications/*.desktop -executable=./appdir/usr/bin/python3 -bundle-non-qt-libs -no-strip -exclude-libs=libnss3.so,libnssutil3.so,libqjp2.so -ignore-glob=usr/lib/python3.6/**/* -verbose=2 &&
./linuxdeployqt*.AppImage ./appdir/usr/share/applications/*.desktop -executable=./appdir/usr/bin/python3 -appimage -no-strip -exclude-libs=libnss3.so,libnssutil3.so,libqjp2.so -ignore-glob=usr/lib/python3.6/**/* -verbose=2 &&
find ./appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq &&
export APPIMAGE_FILE="Cutter-v$CUTTER_VERSION-x64.Linux.AppImage" &&
mv Cutter-*-x86_64.AppImage "$APPIMAGE_FILE" &&
export FILE_TO_UPLOAD="$APPIMAGE_FILE"
; fi
deploy:
skip_cleanup: true
provider: releases
draft: true
prerelease: true
tag_name: $TRAVIS_TAG
api_key:
secure: ZXuSX8JXyL0HlJvSIda3ftMkvYsrxoWDcWm2LxO+f0uNFghCHNnISuH/btdipn2mjCBaBQl6/1IK5cg/AZ5OSkiaVsJJqY8kkPsZvR8K+k4oarsr2ApetlLZiZWtydC3J+UyNhsgCt4iuYPsvusANFPZBpVmqT+A5CHS7aPIqP00awbkJYG1uOENe2XVZ0vyotBqU0E7A9f8UO5ps0+qysS8W+NDB+CGLgKLeBfCk3U+IYKGYXcv66xCmSSZ5f7IVIXEjG4voFHGp9XLRY2R/iJgiKQKDbu519vUB3iKPzmLTB/Q9bNz4VMZCREa4SHaLDen730fMHbfm6ZhGZDzXg1DgZoh6RHptWf0WjcHTr1ch8ajpnBMxh/qmoRpaS00FJQMraMT3Il38ekYd+hOhsP58Bj1Db2vjBKopGEHGmVyFQZKuynrdKmpmY+kRNUT3QerIsiAHwHV2QXnMARHYXJrM0T7LNACa2mhiwQD2vNIqLRieIbHbSWgDUrTVTDeII23AAHCzD0YxcCAjSExjun/rc9dJjevgCoBpTM/NHPLCW4big1myx+vRQGPNdlf+dI7igm6bPVWB7znp5uXlI8q5irvqTVtRSvKbcaeDWOz/ki7QgOzaxmGFtaw30hxeY0wFlnSMXc8m42udWLkp/l0b4L0hcoaMTc1TvVU0i4=
file:
- "${FILE_TO_UPLOAD}"
on:
tags: true
condition: $DEPLOY = 1
+2 -2
View File
@@ -1,6 +1,6 @@
{
"cmake.sourceDirectory": "${workspaceFolder}/src",
"cmake.configureSettings": {
"CUTTER_USE_BUNDLED_RADARE2": "ON"
"IAITO_USE_BUNDLED_RADARE2": "ON"
}
}
}
+7 -7
View File
@@ -1,25 +1,25 @@
# Contributing to r2cutter
# Contributing to iaito
There are different ways you can help contributing to Cutter:
There are different ways you can help contributing to Iaito:
## Opening an issue
Make a clear description of the bug/feature, use screenshots, send binaries, etc.
This will help us improve the software for you.
You can create an issue by clicking on [this link](https://github.com/radareorg/r2cutter/issues/new/choose).
You can create an issue by clicking on [this link](https://github.com/radareorg/iaito/issues/new/choose).
## Submit a Pull Request
Note that cutter is still under development and many parts of the code are to be improved.
The best way is to check the opened issues [here](https://github.com/radareorg/r2cutter/issues) or discuss with radareorg team.
The best way is to check the opened issues [here](https://github.com/radareorg/iaito/issues) or discuss with radareorg team.
Please follow our contribution guidelines: https://cutter.re/docs/contributing.html
## Write Some Documentation
The documentation is something important for newcomers. As of today the documentation can be found [here](https://cutter.re/docs/) and it stands in the [docs](https://github.com/radareorg/r2cutter/tree/master/docs) folder.
The documentation is something important for newcomers. As of today the documentation can be found [here](https://cutter.re/docs/) and it stands in the [docs](https://github.com/radareorg/iaito/tree/master/docs) folder.
The API Reference is automatically generated from the source code, so it is strongly advised to document your code.
Check issues marked as "Documentation" on our issues [list](https://github.com/radareorg/r2cutter/issues?q=is%3Aissue+is%3Aopen+label%3ADocumentation).
Check issues marked as "Documentation" on our issues [list](https://github.com/radareorg/iaito/issues?q=is%3Aissue+is%3Aopen+label%3ADocumentation).
## Translations
You can help Cutter by adding translations to the project! We use the [Crowdin](https://crowdin.com/project/r2cutter) platform to help us share translations. Feel free to contribute and add translations to the project. If you need to add a language, ask any radareorg developer.
You can help Iaito by adding translations to the project! We use the [Crowdin](https://crowdin.com/project/iaito) platform to help us share translations. Feel free to contribute and add translations to the project. If you need to add a language, ask any radareorg developer.
+38 -24
View File
@@ -1,72 +1,86 @@
include config.mk
ifeq ($(shell uname),Darwin)
BIN=build/r2cutter.app/Contents/MacOS/r2cutter
BIN=build/iaito.app/Contents/MacOS/iaito
else
BIN=build/r2cutter
BIN=build/iaito
endif
# linux or win
CUTTER_OS=macos
CUTTER_DEPS_URL=https://github.com/rizinorg/cutter-deps/releases/download/v13/cutter-deps-$(CUTTER_OS).tar.gz
IAITO_OS=macos
IAITO_DEPS_URL=https://github.com/rizinorg/cutter-deps/releases/download/v13/cutter-deps-$(IAITO_OS).tar.gz
ifeq ($(WANT_PYTHON),1)
QMAKE_FLAGS+=CUTTER_ENABLE_PYTHON=true
QMAKE_FLAGS+=IAITO_ENABLE_PYTHON=true
# cutter deps should provide deps.mk
CMAKE_FLAGS+=-DPYTHON_LIBRARY="$(CUTTER_DEPS)/python/lib/libpython3.6m.so.1.0"
CMAKE_FLAGS+=-DPYTHON_INCLUDE_DIR="$(CUTTER_DEPS)/include/python3.6m"
CMAKE_FLAGS+=-DPYTHON_EXECUTABLE="$(CUTTER_DEPS)/bin/python3"
CMAKE_FLAGS+=-DCUTTER_ENABLE_PYTHON=ON
CMAKE_FLAGS+=-DCUTTER_ENABLE_PYTHON_BINDINGS=ON
CMAKE_FLAGS+=-DPYTHON_LIBRARY="$(IAITO_DEPS)/python/lib/libpython3.6m.so.1.0"
CMAKE_FLAGS+=-DPYTHON_INCLUDE_DIR="$(IAITO_DEPS)/include/python3.6m"
CMAKE_FLAGS+=-DPYTHON_EXECUTABLE="$(IAITO_DEPS)/bin/python3"
CMAKE_FLAGS+=-DIAITO_ENABLE_PYTHON=ON
CMAKE_FLAGS+=-DIAITO_ENABLE_PYTHON_BINDINGS=ON
endif
ifeq ($(WANT_PYTHON_BINDINGS),1)
QMAKE_FLAGS+=CUTTER_ENABLE_PYTHON_BINDINGS=true
QMAKE_FLAGS+=IAITO_ENABLE_PYTHON_BINDINGS=true
endif
ifeq ($(WANT_CRASH_REPORTS),1)
QMAKE_FLAGS+=CUTTER_ENABLE_CRASH_REPORTS=true
QMAKE_FLAGS+=IAITO_ENABLE_CRASH_REPORTS=true
endif
all: r2cutter
all: iaito
cbuild:
mkdir -p cbuild
cd cbuild && cmake $(CMAKE_FLAGS) \
-DCMAKE_BUILD_TYPE=Release \
-DCUTTER_ENABLE_CRASH_REPORTS=ON \
-DCUTTER_USE_BUNDLED_RADARE2=OFF \
-DCUTTER_APPIMAGE_BUILD=ON \
-DIAITO_ENABLE_CRASH_REPORTS=ON \
-DIAITO_USE_BUNDLED_RADARE2=OFF \
-DIAITO_APPIMAGE_BUILD=ON \
-DCMAKE_INSTALL_PREFIX=appdir/usr \
../src
.PHONY: cmake
clean:
mrproper: clean
rm -rf build
.PHONY: cmake install build run user-install clean mrproper translations
cmake: cbuild
$(MAKE)
r2cutter: translations
iaito: translations
$(MAKE) -C build -j4
translations: build src/translations/README.md
lrelease src/Cutter.pro
$(MAKE) -C src/translations
# lrelease src/Iaito.pro
src/translations/README.md:
git submodule update --init
# qmake build
# force qt5 build when QtCreator is installed in user's home
ifeq ($(shell test -x ~/Qt/5.12.3/clang_64/bin/qmake || echo err),)
QMAKE=~/Qt/5.12.3/clang_64/bin/qmake
endif
build:
mkdir -p build
cd build && $(QMAKE) ../src/Cutter.pro $(QMAKE_FLAGS)
cd build && $(QMAKE) ../src/Iaito.pro $(QMAKE_FLAGS)
install:
install: translations
ifeq ($(shell uname),Darwin)
rm -rf $(DESTDIR)/Applications/iaito.app
mkdir -p $(DESTDIR)/Applications
cp -rf build/r2cutter.app $(DESTDIR)/Applications/r2cutter.app
cp -rf build/iaito.app $(DESTDIR)/Applications/iaito.app
mkdir -p $(DESTDIR)/usr/local/bin
ln -fs '/Applications/r2cutter.app/Contents/MacOS/r2cutter' $(DESTDIR)'/usr/local/bin/r2cutter'
ln -fs '/Applications/iaito.app/Contents/MacOS/iaito' $(DESTDIR)'/usr/local/bin/iaito'
else
$(MAKE) -C build install INSTALL_ROOT=$(DESTDIR)
endif
$(MAKE) -C src/translations install
mkdir -p "$(DESTDIR)/$(PREFIX)/share/iaito/translations"
cp -f src/translations/build/*.qm "$(DESTDIR)/$(PREFIX)/share/iaito/translations"
user-install:
+24 -20
View File
@@ -1,32 +1,39 @@
<img width="150" height="150" align="left" style="float: left; margin: 0 10px 0 0;" alt="Cutter logo" src="https://raw.githubusercontent.com/radareorg/r2cutter/master/src/img/r2cutter.svg?sanitize=true">
<img width="150" height="150" align="left" style="float: left; margin: 0 10px 0 0;" alt="Iaito logo" src="https://raw.githubusercontent.com/radareorg/iaito/master/src/img/iaito-circle.svg?sanitize=true">
# r2cutter
# iaito
r2cutter is the continuation of [Cutter](https://cutter.re) before the fork to keep [radare2](https://github.com/radareorg/radare2) as backend.
iaito is the official graphical interface for radare2 written in Qt/C++.
* Focus on supporting latest version of radare2
* Recommend the use of system installed
* Closer integration between r2 and the UI
It is the continuation of [Cutter](https://cutter.re) before the [fork](https://github.com/rizinorg/cutter) to keep [radare2](https://github.com/radareorg/radare2) as backend.
[![r2cutter CI](https://github.com/radareorg/r2cutter/workflows/r2cutter%20CI/badge.svg)](https://github.com/radareorg/r2cutter/actions)
* Iaito was the original name of this GUI before being forked as Cutter.
* Support latest versions and features of radare2
* Use r2 plugins (f.ex: no need for r2ghidra-iaito plugin if r2ghidra is installed)
* Focus on parity of commands and r2-style workflows.
* Translations are in the early steps, please [contribute](https://crowdin.com/project/iaito)!
![Screenshot](https://raw.githubusercontent.com/radareorg/r2cutter/master/docs/source/images/screenshot.png)
[![Crowdin](https://badges.crowdin.net/iaito/localized.svg)](https://crowdin.com/project/iaito)
[![iaito CI](https://github.com/radareorg/iaito/workflows/iaito%20CI/badge.svg)](https://github.com/radareorg/iaito/actions)
[![Linux packages](https://repology.org/badge/vertical-allrepos/iaito.svg?columns=4)](https://repology.org/project/iaito/versions)
![Screenshot](https://raw.githubusercontent.com/radareorg/iaito/master/docs/source/images/screenshot.png)
## Downloading a release
r2cutter is available for Linux, macOS and Windows.
Get the builds from the [releases](https://github.com/radareorg/r2cutter/releases) page in Github.
iaito is available for Linux, macOS and Windows.
Get the builds from the [releases](https://github.com/radareorg/iaito/releases) page in Github.
## Installing dependencies
r2cutter depends on r2, you should install it
iaito depends on r2, and you should install it from git:
```
$ git clone https://github.com/radareorg/radare2
$ cd radare2 ; sys/install.sh
```
Extra dependencies are needed for macOS
Extra dependencies are needed for macOS, see the .github/workflows/ci.yml for more details
```
brew install qt5
@@ -35,7 +42,7 @@ brew install qt5
On Ubuntu/Debian
```
sudo apt install qttools5-dev-tools make
sudo apt install qttools5-dev-tools qt5-default libqt5svg5-dev make
```
## Building from sources
@@ -45,22 +52,19 @@ sudo apt install qttools5-dev-tools make
make
make run
```
## Docker
To deploy *cutter* using a pre-built `Dockerfile`, it's possible to use the [provided configuration](docker). The corresponding `README.md` file also contains instructions on how to get started using the docker image with minimal effort.
To install the app and the translations in your home:
```
make -C docker
make install
```
## Plugins
r2cutter supports both Python and Native C++ plugins. For now the api is compatible with Cutter. Read the [Plugins](https://cutter.re/docs/plugins) section on their documentation.
iaito supports both Python and Native C++ plugins. For now the api is compatible with Iaito. Read the [Plugins](https://cutter.re/docs/plugins) section on their documentation.
## Help
Get help, updates, meet the community or discuss about development in these channels:
- **Telegram:** https://t.me/radare
- **IRC:** #radare and #cutter on irc.freenode.net
- **IRC:** #radare on irc.freenode.net
- **Twitter:** [@radareorg](https://twitter.com/radareorg)
Executable
+40
View File
@@ -0,0 +1,40 @@
#!/bin/sh
#
# Look for the 'acr' tool here: https://github.com/radare/acr
# Clone last version of ACR from here:
# git clone https://github.com/radare/acr
#
# -- pancake
r2pm -h >/dev/null 2>&1
if [ $? = 0 ]; then
echo "Installing the last version of 'acr'..."
r2pm -i acr > /dev/null
r2pm -r acr -h > /dev/null 2>&1
if [ $? = 0 ]; then
echo "Running 'acr -p'..."
r2pm -r acr -p
else
echo "Cannot find 'acr' in PATH"
fi
else
echo "Running acr..."
acr -p
fi
. configure
sed \
-e "s,^IAITO_VERSION_MAJOR.*,IAITO_VERSION_MAJOR = ${VERSION_MAJOR}," \
-e "s,^IAITO_VERSION_MINOR.*,IAITO_VERSION_MINOR = ${VERSION_MINOR}," \
-e "s,^IAITO_VERSION_PATCH.*,IAITO_VERSION_PATCH = ${VERSION_PATCH}," \
< src/Iaito.pro > src/Iaito.pro.sed
mv src/Iaito.pro.sed src/Iaito.pro
#V=`./configure -qV | cut -d - -f -1`
# meson rewrite kwargs set project / version "$V"
# if [ -n "$1" ]; then
# echo "./configure $*"
# ./configure $*
#fi
+3 -3
View File
@@ -23,12 +23,12 @@ FOR %%i in (src\translations\*.ts) DO lrelease %%i
CD %BUILDDIR%
IF NOT DEFINED CUTTER_ENABLE_CRASH_REPORTS (
SET "CUTTER_ENABLE_CRASH_REPORTS=false"
IF NOT DEFINED IAITO_ENABLE_CRASH_REPORTS (
SET "IAITO_ENABLE_CRASH_REPORTS=false"
)
ECHO Building cutter
qmake BREAKPAD_SOURCE_DIR=%BREAKPAD_SOURCE_DIR% CUTTER_ENABLE_CRASH_REPORTS=%CUTTER_ENABLE_CRASH_REPORTS% %* ..\src\cutter.pro -config release
qmake BREAKPAD_SOURCE_DIR=%BREAKPAD_SOURCE_DIR% IAITO_ENABLE_CRASH_REPORTS=%IAITO_ENABLE_CRASH_REPORTS% %* ..\src\cutter.pro -config release
IF !ERRORLEVEL! NEQ 0 EXIT /B 1
nmake
IF !ERRORLEVEL! NEQ 0 EXIT /B 1
+10 -10
View File
@@ -29,7 +29,7 @@ find_qmake() {
qmakepath=$(command -v qmake)
fi
if [ -z "$qmakepath" ]; then
echo "You need qmake to build Cutter."
echo "You need qmake to build Iaito."
echo "Please make sure qmake is in your PATH environment variable."
exit 1
fi
@@ -42,7 +42,7 @@ find_lrelease() {
lreleasepath=$(command -v lrelease)
fi
if [ -z "$lreleasepath" ]; then
echo "You need lrelease to build Cutter."
echo "You need lrelease to build Iaito."
echo "Please make sure lrelease is in your PATH environment variable."
exit 1
fi
@@ -57,7 +57,7 @@ find_gmake() {
${gmakepath} --help 2>&1 | grep -q gnu
if [ $? != 0 ]; then
echo "You need GNU make to build Cutter."
echo "You need GNU make to build Iaito."
echo "Please make sure gmake is in your PATH environment variable."
exit 1
fi
@@ -99,15 +99,15 @@ else
fi
# Create translations
$(find_lrelease) ./src/Cutter.pro
$(find_lrelease) ./src/Iaito.pro
# Build
if [ "${QMAKE_CONF#*CUTTER_ENABLE_CRASH_REPORTS=true}" != "$QMAKE_CONF" ]; then
if [ "${QMAKE_CONF#*IAITO_ENABLE_CRASH_REPORTS=true}" != "$QMAKE_CONF" ]; then
prepare_breakpad
fi
mkdir -p "$BUILD"
cd "$BUILD" || exit 1
$(find_qmake) ../src/Cutter.pro "$QMAKE_CONF"
$(find_qmake) ../src/Iaito.pro "$QMAKE_CONF"
$(find_gmake) -j4
ERR=$((ERR+$?))
@@ -122,15 +122,15 @@ if [ ${ERR} -gt 0 ]; then
echo "Something went wrong!"
else
echo "Build complete."
printf "This build of Cutter will be installed. Do you agree? [Y/n] "
printf "This build of Iaito will be installed. Do you agree? [Y/n] "
read -r answer
if [ -z "$answer" ] || [ "$answer" = "Y" ] || [ "$answer" = "y" ]; then
$(find_gmake) install
else
echo "Binary available at $BUILD/r2cutter"
echo "Binary available at $BUILD/iaito"
fi
if [ -x '/usr/local/bin/r2cutter.app/Contents/MacOS/r2cutter' ]; then
ln -fs '/usr/local/bin/r2cutter.app/Contents/MacOS/r2cutter' '/usr/local/bin/r2cutter'
if [ -x '/usr/local/bin/iaito.app/Contents/MacOS/iaito' ]; then
ln -fs '/usr/local/bin/iaito.app/Contents/MacOS/iaito' '/usr/local/bin/iaito'
fi
fi
Vendored
+17 -11
View File
@@ -84,6 +84,7 @@ CROSSBUILD=0
BUILD=`guess_os`
HOST="${BUILD}"
TARGET="${HOST}"
ETCDIR="/etc"
SYSCONFDIR=""
create_environ() {
@@ -91,14 +92,14 @@ create_environ() {
: ${SPREFIX:="${PREFIX}"}
: ${BINDIR:="${SPREFIX}/bin"}
: ${SBINDIR:="${PREFIX}/sbin"}
: ${SYSCONFDIR:="${SPREFIX}/etc"}
: ${ETCDIR:="${SPREFIX}/etc"}
: ${LIBDIR:="${SPREFIX}/lib"}
: ${LIBEXECDIR:="${SPREFIX}/libexec"}
: ${INCLUDEDIR:="${SPREFIX}/include"}
: ${DATADIR:="${SPREFIX}/share"}
: ${INFODIR:="${DATADIR}/info"}
: ${MANDIR:="${DATADIR}/man"}
: ${DOCDIR:="${DATADIR}/doc/r2cutter"}
: ${DOCDIR:="${DATADIR}/doc/iaito"}
: ${LOCALSTATEDIR:="${SPREFIX}/var"}
for A in `echo ${PATH} | sed -e 's,:, ,g'` ; do
[ -e "$A"/ginstall ] && : ${INSTALL:="$A"/ginstall} && break
@@ -111,12 +112,12 @@ done
: ${INSTALL_PROGRAM_STRIP:=${INSTALL} -m 755 -s}
: ${INSTALL_MAN:=${INSTALL} -m 444}
: ${INSTALL_LIB:=${INSTALL} -m 755 -c}
PKGNAME='r2cutter' ; VERSION='0.1.0' ; VERSION_MAJOR=0; VERSION_MINOR=1; VERSION_PATCH=0; VERSION_NUMBER=00100; CONTACT_MAIL="[email protected]" ; CONTACT_NAME="pancake" ; CONTACT="pancake <[email protected]>" ;
PKGNAME='iaito' ; VERSION='5.2.2' ; VERSION_MAJOR=5; VERSION_MINOR=2; VERSION_PATCH=2; VERSION_NUMBER=50202; CONTACT_MAIL="[email protected]" ; CONTACT_NAME="pancake" ; CONTACT="pancake <[email protected]>" ;
}
show_usage() {
cat <<EOF2
'configure' configures r2cutter-0.1.0 to adapt to many kinds of systems.
'configure' configures iaito-5.2.2 to adapt to many kinds of systems.
Usage: ./configure [OPTION]... [VAR=VALUE]...
@@ -139,7 +140,7 @@ Installation directories:
Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--datadir=DIR read-only architecture-independent data [PREFIX/share]
--docdir=DIR documentation directory [DATADIR/doc/r2cutter]
--docdir=DIR documentation directory [DATADIR/doc/iaito]
--includedir=DIR C header files [PREFIX/include]
--infodir=DIR info documentation [DATADIR/info]
--libexecdir=DIR program executables [EPREFIX/libexec]
@@ -148,6 +149,7 @@ Fine tuning of the installation directories:
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--mandir=DIR man documentation [DATADIR/man]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--etcdir=DIR same as --sysconfdir (/etc)
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
@@ -194,10 +196,10 @@ ocho() {
show_version() {
if [ "$QUIET" = 1 ]; then
echo "0.1.0"
echo "5.2.2"
exit 0
fi
echo "r2cutter-0.1.0 configuration script done with acr v1.9.8.
echo "iaito-5.2.2 configuration script done with acr v1.9.8.
The 'Free Software Foundation' message is only for autodetection.
Originally written by pancake <nopcode.org>."
exit 0
@@ -225,8 +227,8 @@ case $flag in
-V|-version|--version)
show_version ; ;;
-r|--r|--report)
echo "PKGNAME: r2cutter"
echo "VERSION: 0.1.0"
echo "PKGNAME: iaito"
echo "VERSION: 5.2.2"
echo "LANGS: c++"
echo "PKG-CONFIG: r_core"
echo "FLAGS: --with-python --with-python-bindings --with-crash-reports"
@@ -259,7 +261,11 @@ echo "FLAGS: --with-python --with-python-bindings --with-crash-reports"
--datadir)
DATADIR="$value"; ;;
--sysconfdir)
SYSCONFDIR="$value"; ;;
SYSCONFDIR="$value"
ETCDIR="$value"; ;;
--etcdir)
SYSCONFDIR="$value"
ETCDIR="$value"; ;;
--sharedstatedir)
SHAREDSTATEDIR="$value"; ;;
--localstatedir)
@@ -295,7 +301,7 @@ parse_options "$1"
shift
done
ENVWORDS="MANDIR INFODIR LIBDIR INCLUDEDIR LOCALSTATEDIR 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 PKGNAME VPATH CONTACT CONTACT_NAME CONTACT_MAIL CXX CXXFLAGS LDFLAGS HAVE_LANG_CXX CPP PKGCONFIG HAVE_R2 R2 R2_CFLAGS R2_LDFLAGS HAVE_PKGCFG_R_CORE HAVE_QMAKE QMAKE HAVE_LRELEASE LRELEASE WANT_PYTHON WANT_PYTHON_BINDINGS WANT_CRASH_REPORTS"
ENVWORDS="MANDIR 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 PKGNAME VPATH CONTACT CONTACT_NAME CONTACT_MAIL CXX CXXFLAGS LDFLAGS HAVE_LANG_CXX CPP PKGCONFIG HAVE_R2 R2 R2_CFLAGS R2_LDFLAGS HAVE_PKGCFG_R_CORE HAVE_QMAKE QMAKE HAVE_LRELEASE LRELEASE WANT_PYTHON WANT_PYTHON_BINDINGS WANT_CRASH_REPORTS"
create_environ
+2 -2
View File
@@ -1,5 +1,5 @@
PKGNAME r2cutter
VERSION 0.1.0
PKGNAME iaito
VERSION 5.2.2
CONTACT pancake ; [email protected]
LANG_CXX!
+18 -18
View File
@@ -1,4 +1,4 @@
set(CUTTER_DEPS "${CMAKE_CURRENT_SOURCE_DIR}/../cutter-deps")
set(IAITO_DEPS "${CMAKE_CURRENT_SOURCE_DIR}/../cutter-deps")
unset(RZ_GHIDRA_PREFIX_PATH)
################################################
@@ -9,18 +9,18 @@ if(WIN32)
set(CPACK_GENERATOR "ZIP")
set(RIZIN_INSTALL_PLUGDIR "lib/plugins")
if (CUTTER_PACKAGE_DEPENDENCIES)
if (CUTTER_ENABLE_PYTHON)
if (CUTTER_ENABLE_DEPENDENCY_DOWNLOADS)
if (IAITO_PACKAGE_DEPENDENCIES)
if (IAITO_ENABLE_PYTHON)
if (IAITO_ENABLE_DEPENDENCY_DOWNLOADS)
set(CPACK_INSTALL_SCRIPTS ${CMAKE_CURRENT_SOURCE_DIR}/WindowsBundlePython.cmake)
endif()
find_package(PythonInterp REQUIRED)
install(DIRECTORY ${CUTTER_DEPS}/pyside/lib/site-packages DESTINATION "python${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}")
install(FILES ${CUTTER_DEPS}/pyside/bin/shiboken2.abi3.dll ${CUTTER_DEPS}/pyside/bin/pyside2.abi3.dll DESTINATION .)
install(DIRECTORY ${IAITO_DEPS}/pyside/lib/site-packages DESTINATION "python${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}")
install(FILES ${IAITO_DEPS}/pyside/bin/shiboken2.abi3.dll ${IAITO_DEPS}/pyside/bin/pyside2.abi3.dll DESTINATION .)
endif()
install(SCRIPT WindowsBundleQt.cmake)
endif()
if (CUTTER_PACKAGE_R2DEC AND CUTTER_ENABLE_DEPENDENCY_DOWNLOADS)
if (IAITO_PACKAGE_R2DEC AND IAITO_ENABLE_DEPENDENCY_DOWNLOADS)
install(CODE "
set(ENV{RZ_ALT_SRC_DIR} 1)
set(ENV{PATH} \"\${CMAKE_INSTALL_PREFIX};\$ENV{PATH}\")
@@ -40,8 +40,8 @@ endif()
if(APPLE)
set(CPACK_GENERATOR "Bundle")
set(CPACK_BUNDLE_NAME "r2cutter")
set(ICON "r2cutter")
set(CPACK_BUNDLE_NAME "iaito")
set(ICON "iaito")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/macos/Info.plist.in" "${CMAKE_CURRENT_BINARY_DIR}/macos/Info.plist")
set(CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_BINARY_DIR}/macos/Info.plist")
set(CPACK_BUNDLE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/macos/cutter.icns")
@@ -59,10 +59,10 @@ if(APPLE)
list(APPEND ADJUST_RIZIN_LIBS "${RIZIN_INSTALL_DIR}/lib/lib${_lib}.dylib")
endforeach()
if(CUTTER_PACKAGE_DEPENDENCIES AND CUTTER_ENABLE_PYTHON)
if(IAITO_PACKAGE_DEPENDENCIES AND IAITO_ENABLE_PYTHON)
set(EMBED_PYTHON_SH "${CMAKE_CURRENT_SOURCE_DIR}/appbundle_embed_python.sh")
set(PYTHON_FRAMEWORK_DIR "${CUTTER_DEPS}/python/Python.framework")
set(PYSIDE_PREFIX "${CUTTER_DEPS}/pyside")
set(PYTHON_FRAMEWORK_DIR "${IAITO_DEPS}/python/Python.framework")
set(PYSIDE_PREFIX "${IAITO_DEPS}/pyside")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/MacOSBundlePython.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/MacOSBundlePython.cmake" @ONLY)
install(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/MacOSBundlePython.cmake")
@@ -83,12 +83,12 @@ endif()
# rz-ghidra
################################################
if(CUTTER_PACKAGE_RZ_GHIDRA)
if(CUTTER_ENABLE_DEPENDENCY_DOWNLOADS)
if(IAITO_PACKAGE_RZ_GHIDRA)
if(IAITO_ENABLE_DEPENDENCY_DOWNLOADS)
# Currently using external project only for downloading source
# It neeeds to link against compiled cutter so for now build it using custom install script.
# That way rz-ghidra build process is the same as with any other external plugin built against
# installed Cutter.
# installed Iaito.
ExternalProject_Add(rz-ghidra
GIT_REPOSITORY https://github.com/rizinorg/rz-ghidra
GIT_TAG master
@@ -100,11 +100,11 @@ if(CUTTER_PACKAGE_RZ_GHIDRA)
if (WIN32)
set (GHIDRA_OPTIONS "
\"-DRIZIN_INSTALL_PLUGDIR=\${CMAKE_INSTALL_PREFIX}/${RIZIN_INSTALL_PLUGDIR}\"
-DCUTTER_INSTALL_PLUGDIR=plugins/native")
-DIAITO_INSTALL_PLUGDIR=plugins/native")
elseif (APPLE)
set (GHIDRA_OPTIONS "
\"-DRIZIN_INSTALL_PLUGDIR=\${CMAKE_INSTALL_PREFIX}/${RIZIN_INSTALL_PLUGDIR}\"
-DCUTTER_INSTALL_PLUGDIR=plugins/native")
-DIAITO_INSTALL_PLUGDIR=plugins/native")
else()
set (GHIDRA_OPTIONS "")
endif()
@@ -118,7 +118,7 @@ if(CUTTER_PACKAGE_RZ_GHIDRA)
\"-DCMAKE_PREFIX_PATH=\${CMAKE_INSTALL_PREFIX};\${CMAKE_INSTALL_PREFIX}/include/librz;\${CMAKE_INSTALL_PREFIX}/include/librz/sdb;${RZ_GHIDRA_PREFIX_PATH}\"
-DCMAKE_INSTALL_PREFIX=\${CMAKE_INSTALL_PREFIX}
${GHIDRA_OPTIONS}
-DBUILD_CUTTER_PLUGIN=ON
-DBUILD_IAITO_PLUGIN=ON
-DBUILD_SLEIGH_PLUGIN=OFF
-G Ninja
)
+1 -1
View File
@@ -12,7 +12,7 @@ execute_process(COMMAND
"${EMBED_PYTHON_SH}"
"${PYTHON_FRAMEWORK_DIR}"
"${BUNDLE_PATH}"
"${BUNDLE_PATH}/Contents/MacOS/Cutter"
"${BUNDLE_PATH}/Contents/MacOS/Iaito"
RESULT_VARIABLE SCRIPT_RESULT)
if(SCRIPT_RESULT)
message(FATAL_ERROR "Failed to bundle python")
+9 -9
View File
@@ -3,10 +3,10 @@ include(BundleUtilities)
set(MACDEPLOYQT_PATH "@MACDEPLOYQT_PATH@")
set(INFO_PLIST_PATH "@CPACK_BUNDLE_PLIST@")
set(ADJUST_RIZIN_LIBS "@ADJUST_RIZIN_LIBS@")
set(CUTTER_ENABLE_CRASH_REPORTS "@CUTTER_ENABLE_CRASH_REPORTS@")
set(IAITO_ENABLE_CRASH_REPORTS "@IAITO_ENABLE_CRASH_REPORTS@")
set(Breakpad_LINK_LIBRARIES "@Breakpad_LINK_LIBRARIES@")
set(CUTTER_PACKAGE_DEPENDENCIES "@CUTTER_PACKAGE_DEPENDENCIES@")
set(CUTTER_ENABLE_PYTHON "@CUTTER_ENABLE_PYTHON@")
set(IAITO_PACKAGE_DEPENDENCIES "@IAITO_PACKAGE_DEPENDENCIES@")
set(IAITO_ENABLE_PYTHON "@IAITO_ENABLE_PYTHON@")
macro(run_or_die)
execute_process(${ARGV} RESULT_VARIABLE PROC_RESULT)
@@ -36,10 +36,10 @@ endforeach()
foreach(_lib ${ADJUST_RIZIN_LIBS})
get_filename_component(_lib "${_lib}" REALPATH)
get_filename_component(_name "${_lib}" NAME)
# Cutter reference to lib
# Iaito reference to lib
run_or_die(COMMAND install_name_tool
-change "${_lib}" "@rpath/${_name}"
"${EXECUTABLE_DIR}/Cutter")
"${EXECUTABLE_DIR}/Iaito")
# lib LC_ID_DYLIB
run_or_die(COMMAND install_name_tool
-id "@rpath/${_name}"
@@ -57,15 +57,15 @@ endforeach()
# Add rpaths because macdeployqt fails to do that properly
run_or_die(COMMAND install_name_tool
-add_rpath "@executable_path/../Frameworks"
"${EXECUTABLE_DIR}/Cutter")
"${EXECUTABLE_DIR}/Iaito")
run_or_die(COMMAND install_name_tool
-add_rpath "@executable_path/../Resources/lib"
"${EXECUTABLE_DIR}/Cutter")
"${EXECUTABLE_DIR}/Iaito")
set(MACDEPLOYQT_COMMAND "${MACDEPLOYQT_PATH}" "${BUNDLE_PATH}" "-verbose=2" "-libpath=${CMAKE_INSTALL_PREFIX}/lib")
message("Running macdeployqt \"${MACDEPLOYQT_COMMAND}\"")
run_or_die(COMMAND ${MACDEPLOYQT_COMMAND}) # First run
if (CUTTER_PACKAGE_DEPENDENCIES AND CUTTER_ENABLE_PYTHON)
if (IAITO_PACKAGE_DEPENDENCIES AND IAITO_ENABLE_PYTHON)
file(REAL_PATH "${FRAMEWORK_DIR}/Python.framework/Python" _python_lib_path)
message("Python lib ${_python_lib_path}")
list(APPEND MACDEPLOYQT_COMMAND "-executable=${_python_lib_path}")
@@ -81,7 +81,7 @@ foreach(_lib ${ADJUST_RIZIN_LIBS})
file(REMOVE "${BUNDLE_PATH}/Contents/Frameworks/${_name}")
endforeach()
if (CUTTER_ENABLE_CRASH_REPORTS)
if (IAITO_ENABLE_CRASH_REPORTS)
message("Copying Breakpad ${Breakpad_LINK_LIBRARIES}")
set(_breakpad_lib "Versions/A/Breakpad")
copy_resolved_framework_into_bundle("${Breakpad_LINK_LIBRARIES}/${_breakpad_lib}" "${FRAMEWORK_DIR}/Breakpad.framework/${_breakpad_lib}")
+6 -2
View File
@@ -1,7 +1,11 @@
NAME=r2cutter
NAME=iaito
SECTION=editors
PRIORITY=optional
DEPENDS=qt5-default libqt5svg5
MAINTAINER=pancake <[email protected]>
ARCH?=amd64
VERSION?=$(shell r2 -qv)
VERSION=$(shell ../../../configure -qV)
ifeq ($(VERSION),)
error:
@echo Cannot retrieve version number from r2
endif
+3 -3
View File
@@ -1,8 +1,8 @@
all:
make -C r2cutter
make -C iaito
clean:
make -C r2cutter clean
make -C iaito clean
mrproper:
make -C r2cutter mrproper
make -C iaito mrproper
+1 -1
View File
@@ -1,3 +1,3 @@
PACKAGE=r2cutter
PACKAGE=iaito
include ../CONFIG
+2
View File
@@ -0,0 +1,2 @@
QT frontend for radare2
This is the continuation of Iaito after the project forked out so it keeps using radare2 as backend.
@@ -19,7 +19,7 @@ all:
$(MAKE) deb
root:
cd ../../.. && $(MAKE) && $(MAKE) install PREFIX=/usr DESTDIR=/tmp/r2cutter-deb
mv /tmp/r2cutter-deb root
cd ../../.. && $(MAKE) && $(MAKE) install PREFIX=/usr DESTDIR=/tmp/iaito-deb
mv /tmp/iaito-deb root
include ../deb_hand.mak
-3
View File
@@ -1,3 +0,0 @@
QT frontend for radare2
This is the continuation of Cutter after the project forked out so it keeps using radare2 as backend.
+6 -6
View File
@@ -2,7 +2,7 @@
<installer-gui-script minSpecVersion="2">
<title>Radare</title>
<license file="COPYING.LESSER" mime-type="text/plain"/>
<pkg-ref id="org.radare.r2cutter">
<pkg-ref id="org.radare.iaito">
<bundle-version/>
</pkg-ref>
<options customize="never" require-scripts="false" hostArchitectures="i386,x86_64,arm64"/>
@@ -13,14 +13,14 @@
</volume-check>
<choices-outline>
<line choice="default">
<line choice="org.radare.r2cutter"/>
<line choice="org.radare.iaito"/>
</line>
</choices-outline>
<choice id="default" customLocation="usr"/>
<choice id="org.radare.r2cutter" visible="false">
<pkg-ref id="org.radare.r2cutter"/>
<choice id="org.radare.iaito" visible="false">
<pkg-ref id="org.radare.iaito"/>
</choice>
<pkg-ref id="org.radare.r2cutter" version="0" onConclusion="none" installKBytes="51182">#r2cutter.pkg</pkg-ref>
<pkg-ref id="org.radare.iaito" version="0" onConclusion="none" installKBytes="51182">#iaito.pkg</pkg-ref>
<welcome file="welcome.rtf" mime-type="text/enriched"/>
<background file="r2cutter.png" mime-type="image/png" alignment="bottomleft"/>
<background file="iaito-o.png" mime-type="image/png" alignment="bottomleft"/>
</installer-gui-script>
Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

+13 -9
View File
@@ -4,16 +4,16 @@
# http://blog.coolaj86.com/articles/how-to-unpackage-and-repackage-pkg-macos.html
# to uninstall:
# sudo pkgutil --forget org.radare.r2cutter
# sudo pkgutil --forget org.radare.iaito
SRC=/tmp/r2cutter-macos
SRC=/tmp/iaito-macos
PREFIX=/usr/local
DST="$(pwd)/macos-pkg/r2cutter.unpkg"
DST="$(pwd)/macos-pkg/iaito.unpkg"
if [ -n "$1" ]; then
VERSION="$1"
else
VERSION="`./configure -qv`"
[ -z "${VERSION}" ] && VERSION=5.1.0
VERSION="`../../configure -qV`"
[ -z "${VERSION}" ] && VERSION=5.2.2
fi
[ -z "${MAKE}" ] && MAKE=make
@@ -25,11 +25,15 @@ done
[ ! -x "$PWD/configure" ] && exit 1
rm -rf "${SRC}"
${MAKE} mrproper 2>/dev/null
pwd
if [ ! -d build/iaito.app ]; then
rm -rf "${SRC}"
${MAKE} mrproper 2>/dev/null
# ${MAKE} -j4 || exit 1
fi
export CFLAGS=-O2
./configure --prefix="${PREFIX}" || exit 1
# ${MAKE} -j4 || exit 1
make -C .. translations
${MAKE} install PREFIX="${PREFIX}" DESTDIR=${SRC} || exit 1
mkdir -p "${DST}"
if [ -d "${SRC}" ]; then
@@ -39,7 +43,7 @@ if [ -d "${SRC}" ]; then
)
mkbom ${SRC} "${DST}/Bom"
# Repackage
pkgutil --flatten "${DST}" "${DST}/../r2cutter-${VERSION}.pkg"
pkgutil --flatten "${DST}" "${DST}/../iaito-${VERSION}.pkg"
else
echo "Failed install. DESTDIR is empty"
exit 1
+3 -3
View File
@@ -20,11 +20,11 @@ RUN apk add --no-cache \
unzip \
wget
# Get, compile and test Cutter from master branch
# Get, compile and test Iaito from master branch
RUN git clone --recurse-submodules https://github.com/radareorg/cutter.git /opt/cutter
RUN cd /opt/cutter && \
yes | bash build.sh && \
bash -c 'if [[ ! -x "/opt/cutter/build/Cutter" ]]; then exit -1; fi'
bash -c 'if [[ ! -x "/opt/cutter/build/Iaito" ]]; then exit -1; fi'
FROM alpine:latest AS runner
@@ -38,7 +38,7 @@ RUN apk add --no-cache \
shadow \
su-exec
# Get the compiled Cutter, r2 libs and bins from the builder
# Get the compiled Iaito, r2 libs and bins from the builder
COPY --from=builder /opt/cutter /opt/cutter
COPY --from=builder /usr/lib /usr/lib
COPY --from=builder /usr/share/radare2 /usr/share/radare2
+2 -2
View File
@@ -34,7 +34,7 @@ COPY scripts /opt/cutter/scripts
COPY src /opt/cutter/src
RUN bash build_cutter.sh && \
bash -c 'if [[ ! -x "/opt/cutter/build/Cutter" ]]; then exit -1; fi'
bash -c 'if [[ ! -x "/opt/cutter/build/Iaito" ]]; then exit -1; fi'
FROM alpine:latest AS runner
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
@@ -61,7 +61,7 @@ RUN mkdir /var/sharedFolder && \
COPY ./docker/entrypoint.sh /usr/local/bin/entrypoint.sh
# Get the compiled Cutter, r2 libs and bins from the builder
# Get the compiled Iaito, r2 libs and bins from the builder
COPY --from=builder /opt/cutter /opt/cutter
COPY --from=builder /usr/lib /usr/lib
COPY --from=builder /usr/share/radare2 /usr/share/radare2
+2 -2
View File
@@ -37,7 +37,7 @@ build-nc: ## Build the container without caching
run: ## Run container
XSOCK=/tmp/.X11-unix && \
XAUTH=$(shell mktemp /tmp/r2cutter_tmp.XXX.xauth) && \
XAUTH=$(shell mktemp /tmp/iaito_tmp.XXX.xauth) && \
xauth nlist $$DISPLAY | sed -e 's/^..../ffff/' | xauth -f $$XAUTH nmerge - && \
chmod 644 $$XAUTH && \
touch $(DIR)/radare2rc && \
@@ -60,7 +60,7 @@ run: ## Run container
$(IMAGE_NAME):$(VERSION) $(RUNFLAGS) && \
rm $$XAUTH
get: ## Get the latest Cutter image
get: ## Get the latest Iaito image
sudo docker pull $(IMAGE_NAME):$(VERSION)
stop: ## Stop a running container
+4 -4
View File
@@ -1,6 +1,6 @@
# Docker Configuration for Cutter
# Docker Configuration for Iaito
These files provide an easy way to deploy *Cutter* in a Docker container. After additional configuration you may want to apply to the `Makefile`, execute `make run`. By default, the *Cutter* image on [Docker Hub](https://hub.docker.com/r/radareorg/cutter/) will be used along with additional UID, capability, X and mount settings:
These files provide an easy way to deploy *Iaito* in a Docker container. After additional configuration you may want to apply to the `Makefile`, execute `make run`. By default, the *Iaito* image on [Docker Hub](https://hub.docker.com/r/radareorg/cutter/) will be used along with additional UID, capability, X and mount settings:
- Xauthority settings which avoid using potentially insecure `xhost` directives. The settings have been adapted from [this post](https://stackoverflow.com/questions/16296753/can-you-run-gui-apps-in-a-docker-container/25280523#25280523).
- Mount directives to mount a shared folder and radare2 configuration files.
@@ -8,11 +8,11 @@ These files provide an easy way to deploy *Cutter* in a Docker container. After
## Using Local Files
To deploy *Cutter* using local files rather than those in the Master branch set LOCAL_DEV to 'y' when executing `make build` or `make build-nc`, e.g. `make LOCAL_DEV=y build`. This will tell *make* to use `Dockerfile-dev` rather than `Dockerfile` which will copy local files into the container rather than cloning from Git.
To deploy *Iaito* using local files rather than those in the Master branch set LOCAL_DEV to 'y' when executing `make build` or `make build-nc`, e.g. `make LOCAL_DEV=y build`. This will tell *make* to use `Dockerfile-dev` rather than `Dockerfile` which will copy local files into the container rather than cloning from Git.
## Mounting and Using a Specific Binary
The `Makefile` allows mounting a single binary file as read-only, which will also be used as an input for *Cutter*. To use this feature, execute `make run BINARY=/absolute/path/to/binary`.
The `Makefile` allows mounting a single binary file as read-only, which will also be used as an input for *Iaito*. To use this feature, execute `make run BINARY=/absolute/path/to/binary`.
## Additional Notes
+8 -8
View File
@@ -16,7 +16,7 @@ find_qmake() {
qmakepath=$(command -v qmake)
fi
if [ -z "$qmakepath" ]; then
echo "You need qmake to build Cutter."
echo "You need qmake to build Iaito."
echo "Please make sure qmake is in your PATH environment variable."
exit 1
fi
@@ -29,7 +29,7 @@ find_lrelease() {
lreleasepath=$(command -v lrelease)
fi
if [ -z "$lreleasepath" ]; then
echo "You need lrelease to build Cutter."
echo "You need lrelease to build Iaito."
echo "Please make sure lrelease is in your PATH environment variable."
exit 1
fi
@@ -44,7 +44,7 @@ find_gmake() {
${gmakepath} --help 2>&1 | grep -q gnu
if [ $? != 0 ]; then
echo "You need GNU make to build Cutter."
echo "You need GNU make to build Iaito."
echo "Please make sure gmake is in your PATH environment variable."
exit 1
fi
@@ -67,15 +67,15 @@ prepare_breakpad() {
}
# Create translations
$(find_lrelease) ./src/Cutter.pro
$(find_lrelease) ./src/Iaito.pro
# Build
if [ "${QMAKE_CONF#*CUTTER_ENABLE_CRASH_REPORTS=true}" != "$QMAKE_CONF" ]; then
if [ "${QMAKE_CONF#*IAITO_ENABLE_CRASH_REPORTS=true}" != "$QMAKE_CONF" ]; then
prepare_breakpad
fi
mkdir -p "$BUILD"
cd "$BUILD" || exit 1
$(find_qmake) ../src/Cutter.pro "$QMAKE_CONF"
$(find_qmake) ../src/Iaito.pro "$QMAKE_CONF"
$(find_gmake) -j4
ERR=$((ERR+$?))
@@ -90,12 +90,12 @@ if [ ${ERR} -gt 0 ]; then
echo "Something went wrong!"
else
echo "Build complete."
printf "This build of Cutter will be installed. Do you agree? [Y/n] "
printf "This build of Iaito will be installed. Do you agree? [Y/n] "
read -r answer
if [ -z "$answer" ] || [ "$answer" = "Y" ] || [ "$answer" = "y" ]; then
$(find_gmake) install
else
echo "Binary available at $BUILD/Cutter"
echo "Binary available at $BUILD/Iaito"
fi
fi
+2 -2
View File
@@ -1,9 +1,9 @@
#!/bin/bash
USERNAME="r2"
echo "Cutter: Starting with UID:GID $LOCAL_USER_ID:$LOCAL_GROUP_ID"
echo "Iaito: Starting with UID:GID $LOCAL_USER_ID:$LOCAL_GROUP_ID"
usermod -u $LOCAL_USER_ID $USERNAME
usermod -g $LOCAL_GROUP_ID $USERNAME
export HOME=/home/$USERNAME
exec su-exec $USERNAME "/opt/cutter/build/Cutter" $@
exec su-exec $USERNAME "/opt/cutter/build/Iaito" $@
+1 -1
View File
@@ -32,7 +32,7 @@ DOXYFILE_ENCODING = UTF-8
# title of most generated pages and in a few other places.
# The default value is: My Project.
PROJECT_NAME = "r2cutter"
PROJECT_NAME = "iaito"
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
# could be handy for archiving the generated documentation or if some version
@@ -22,7 +22,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Cutter graph export</dc:title>
<dc:title>Iaito graph export</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
@@ -54,7 +54,7 @@
inkscape:current-layer="svg1246"
units="px" />
<title
id="title2">Cutter graph export</title>
id="title2">Iaito graph export</title>
<desc
id="desc4">Generated with Qt</desc>
<defs

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 58 KiB

+47 -47
View File
@@ -3,7 +3,7 @@ Building
.. note::
If you just want to use the latest Release version of r2cutter, please note
If you just want to use the latest Release version of iaito, please note
that we provide pre-compiled binaries for Windows, Linux and macOS on
our `release page. <https://github.com/radareorg/cutter/releases/latest>`_
@@ -17,15 +17,15 @@ Make sure you've ``git`` installed in your system (`Installation guide <https://
git clone --recurse-submodules https://github.com/radareorg/cutter
This will clone the r2cutter source and it's dependencies(radare2, etc.)
This will clone the iaito source and it's dependencies(radare2, etc.)
under **cutter** and you should see the following dir structure:
.. code-block:: sh
cutter/-|
|-docs/ # r2cutter Documentation
|-docs/ # iaito Documentation
|-radare2/ # radare2 submodule
|-src/ # r2cutter Source Code
|-src/ # iaito Source Code
Following sections assume that **cutter** is your working dir. (if not, do ``cd cutter``)
@@ -52,7 +52,7 @@ On Linux, you will need:
`*` Recommended while building with ``make``/``Cmake``.
`**` Optional. If present, these add extra features to r2cutter. See `CMake Building Options`_.
`**` Optional. If present, these add extra features to iaito. See `CMake Building Options`_.
On Debian-based Linux distributions, all of these essential packages can be installed with this single command:
@@ -72,37 +72,37 @@ On Arch-based Linux distributions:
Building Steps
~~~~~~~~~~~~~~
The recommended way to build r2cutter on Linux is by using CMake. Simply invoke CMake to build r2cutter and its dependency radare2.
The recommended way to build iaito on Linux is by using CMake. Simply invoke CMake to build iaito and its dependency radare2.
.. code:: sh
mkdir build && cd build
cmake -DCUTTER_USE_BUNDLED_RADARE2=ON ../src
cmake -DIAITO_USE_BUNDLED_RADARE2=ON ../src
cmake --build .
If your operating system has a newer version of CMake (> v3.12) you can use this cleaner solution:
.. code:: sh
cmake -S src -B build -DCUTTER_USE_BUNDLED_RADARE2=ON
cmake -S src -B build -DIAITO_USE_BUNDLED_RADARE2=ON
cmake --build build
.. note::
If you want to use r2cutter with another version of radare2 you can omit ``-DCUTTER_USE_BUNDLED_RADARE2=ON``. Note that using a version of radare2 which isn't the version r2cutter is using can cause issues and the compilation might fail.
If you want to use iaito with another version of radare2 you can omit ``-DIAITO_USE_BUNDLED_RADARE2=ON``. Note that using a version of radare2 which isn't the version iaito is using can cause issues and the compilation might fail.
.. note::
If you are interested in building r2cutter with support for Python plugins,
If you are interested in building iaito with support for Python plugins,
Syntax Highlighting, Crash Reporting and more,
please look at the full list of `CMake Building Options`_.
After the build process is complete, you should have the ``r2cutter`` executable in the **build** dir.
You can now execute r2cutter like this:
After the build process is complete, you should have the ``iaito`` executable in the **build** dir.
You can now execute iaito like this:
.. code:: sh
./build/r2cutter
./build/iaito
Building on Windows
@@ -111,8 +111,8 @@ Building on Windows
Requirements
~~~~~~~~~~~~
r2cutter works on Windows 7 or newer.
To compile r2cutter it is necessary to have the following installed:
iaito works on Windows 7 or newer.
To compile iaito it is necessary to have the following installed:
* A version of Visual Studio (2015, 2017 and 2019 are supported)
* CMake
@@ -121,7 +121,7 @@ To compile r2cutter it is necessary to have the following installed:
Recommended Way
~~~~~~~~~~~~~~~
To build r2cutter on Windows machines using CMake,
To build iaito on Windows machines using CMake,
you will have to make sure that the executables are available
in your ``%PATH%`` environment variable.
@@ -138,13 +138,13 @@ Note that the paths below may vary depending on your version of Qt and Visual St
Click ``Configure`` and select your version of Visual Studio from the list,
for example ``Visual Studio 14 2015``.
After the configuration is done, click ``Generate`` and you can open
``r2cutter.sln`` to compile the code as usual.
``iaito.sln`` to compile the code as usual.
Building with Meson
~~~~~~~~~~~~~~~~~~~
There is another way to compile r2cutter on Windows if the one above does
There is another way to compile iaito on Windows if the one above does
not work or does not suit your needs.
Additional requirements:
@@ -153,7 +153,7 @@ Additional requirements:
- Meson build system
Download and unpack
`Ninja <https://github.com/ninja-build/ninja/releases>`__ to the r2cutter
`Ninja <https://github.com/ninja-build/ninja/releases>`__ to the iaito
source root directory (ie. **cutter** - working dir).
Note that in the below steps, the paths may vary depending on your version of Qt and Visual Studio.
@@ -175,7 +175,7 @@ Install Meson:
python -m pip install meson
To compile r2cutter, run:
To compile iaito, run:
.. code:: batch
@@ -193,7 +193,7 @@ Using QtCreator
One standard way is to simply load the project inside QtCreator.
To do so, open QtCreator and on the welcome screen click on "Open Project",
and finally select the ``cutter/src/r2cutter.pro`` file.
and finally select the ``cutter/src/iaito.pro`` file.
QtCreator will then allow you to directly edit the source code and build the project.
.. note::
@@ -205,7 +205,7 @@ Compiling on Linux / macOS
~~~~~~~~~~~~~~~~~~~~~~~~~~
The easiest way, but not the one we recommend, is to simply run ``./build.sh`` from the root directory,
and let the magic happen. The script will use ``qmake`` to build r2cutter.
and let the magic happen. The script will use ``qmake`` to build iaito.
The ``build.sh`` script is meant to be deprecated and will be deleted in the future.
If you want to manually use qmake, follow these steps:
@@ -213,7 +213,7 @@ If you want to manually use qmake, follow these steps:
.. code:: sh
mkdir build; cd build
qmake ../src/r2cutter.pro
qmake ../src/iaito.pro
make
cd ..
@@ -224,8 +224,8 @@ On macOS you will also have to copy the launcher bash script:
.. code:: sh
mv r2cutter.app/Contents/MacOS/r2cutter r2cutter.app/Contents/MacOS/r2cutter.bin
cp ../src/macos/r2cutter r2cutter.app/Contents/MacOS/r2cutter && chmod +x r2cutter.app/Contents/MacOS/r2cutter
mv iaito.app/Contents/MacOS/iaito iaito.app/Contents/MacOS/iaito.bin
cp ../src/macos/iaito iaito.app/Contents/MacOS/iaito && chmod +x iaito.app/Contents/MacOS/iaito
--------------
@@ -235,41 +235,41 @@ CMake Building Options
Note that there are some major building options available:
* ``CUTTER_USE_BUNDLED_RADARE2`` automatically compile Radare2 from submodule.
* ``CUTTER_ENABLE_PYTHON`` compile with Python support.
* ``CUTTER_ENABLE_PYTHON_BINDINGS`` automatically generate Python Bindings with Shiboken2, required for Python plugins!
* ``CUTTER_ENABLE_KSYNTAXHIGHLIGHTING`` use KSyntaxHighlighting for code highlighting.
* ``CUTTER_ENABLE_GRAPHVIZ`` enable Graphviz for graph layouts.
* ``CUTTER_EXTRA_PLUGIN_DIRS`` List of addition plugin locations. Useful when preparing package for Linux distros that have strict package layout rules.
* ``IAITO_USE_BUNDLED_RADARE2`` automatically compile Radare2 from submodule.
* ``IAITO_ENABLE_PYTHON`` compile with Python support.
* ``IAITO_ENABLE_PYTHON_BINDINGS`` automatically generate Python Bindings with Shiboken2, required for Python plugins!
* ``IAITO_ENABLE_KSYNTAXHIGHLIGHTING`` use KSyntaxHighlighting for code highlighting.
* ``IAITO_ENABLE_GRAPHVIZ`` enable Graphviz for graph layouts.
* ``IAITO_EXTRA_PLUGIN_DIRS`` List of addition plugin locations. Useful when preparing package for Linux distros that have strict package layout rules.
r2cutter binary release options, not needed for most users and might not work easily outside CI environment:
iaito binary release options, not needed for most users and might not work easily outside CI environment:
* ``CUTTER_ENABLE_CRASH_REPORTS`` is used to compile r2cutter with crash handling system enabled (Breakpad).
* ``CUTTER_ENABLE_DEPENDENCY_DOWNLOADS`` Enable downloading of dependencies. Setting to OFF doesn't affect any downloads done by r2 build. This option is used for preparing r2cutter binary release packges. Turned off by default.
* ``CUTTER_PACKAGE_DEPENDENCIES`` During install step include the third party dependencies. This option is used for preparing r2cutter binary release packges.
* ``IAITO_ENABLE_CRASH_REPORTS`` is used to compile iaito with crash handling system enabled (Breakpad).
* ``IAITO_ENABLE_DEPENDENCY_DOWNLOADS`` Enable downloading of dependencies. Setting to OFF doesn't affect any downloads done by r2 build. This option is used for preparing iaito binary release packges. Turned off by default.
* ``IAITO_PACKAGE_DEPENDENCIES`` During install step include the third party dependencies. This option is used for preparing iaito binary release packges.
These options can be enabled or disabled from the command line arguments passed to CMake.
For example, to build r2cutter with support for Python plugins, you can run this command:
For example, to build iaito with support for Python plugins, you can run this command:
::
cmake -B build -DCUTTER_ENABLE_PYTHON=ON -DCUTTER_ENABLE_PYTHON_BINDINGS=ON
cmake -B build -DIAITO_ENABLE_PYTHON=ON -DIAITO_ENABLE_PYTHON_BINDINGS=ON
Or if one wants to explicitly disable an option:
::
cmake -B build -DCUTTER_ENABLE_PYTHON=OFF
cmake -B build -DIAITO_ENABLE_PYTHON=OFF
--------------
Compiling r2cutter with Breakpad Support
Compiling iaito with Breakpad Support
--------------------------------------
If you want to build r2cutter with crash handling system, you will want to first prepare Breakpad.
For this, simply run one of the scripts (according to your OS) from root r2cutter directory:
If you want to build iaito with crash handling system, you will want to first prepare Breakpad.
For this, simply run one of the scripts (according to your OS) from root iaito directory:
.. code:: sh
@@ -306,12 +306,12 @@ containing bin/, lib/, include/, etc.) and specify it to CMake using
rm CMakeCache.txt # the cache may be polluted with unwanted libraries found before
cmake -DCMAKE_PREFIX_PATH=/opt/Qt/5.9.1/gcc_64 ..
* **Radare2's libr_*.so cannot be found when running r2cutter**
* **Radare2's libr_*.so cannot be found when running iaito**
./r2cutter: error while loading shared libraries: libr_lang.so: cannot open shared object file: No such file or directory
./iaito: error while loading shared libraries: libr_lang.so: cannot open shared object file: No such file or directory
The exact r2 .so file that cannot be found may vary. On some systems, the linker by default uses RUNPATH instead of RPATH which is incompatible with the way r2 is currently compiled. It results in some of the r2 libraries not being found when running cutter. You can verify if this is the problem by running `ldd ./r2cutter`. If all the r2 libraries are missing you have a different problem.
The workaround is to either add the `--disable-new-dtags` linker flag when compiling r2cutter or add the r2 installation path to LD_LIBRARY_PATH environment variable.
The exact r2 .so file that cannot be found may vary. On some systems, the linker by default uses RUNPATH instead of RPATH which is incompatible with the way r2 is currently compiled. It results in some of the r2 libraries not being found when running cutter. You can verify if this is the problem by running `ldd ./iaito`. If all the r2 libraries are missing you have a different problem.
The workaround is to either add the `--disable-new-dtags` linker flag when compiling iaito or add the r2 installation path to LD_LIBRARY_PATH environment variable.
::
@@ -322,7 +322,7 @@ The workaround is to either add the `--disable-new-dtags` linker flag when compi
r_util/r_annotated_code.h: No such file or directory
If you face an error where some header file starting with ``r_`` is missing, you should check the **radare2** submodule and
make sure it is in sync with upstream **r2cutter** repo. Simply run:
make sure it is in sync with upstream **iaito** repo. Simply run:
::
@@ -363,7 +363,7 @@ installed with brew. Run this command to work around the issue:
sudo mv /usr/local/lib/libjpeg.dylib /usr/local/lib/libjpeg.dylib.not-found
* **LSOpenURLsWithRole() failed with error -10810**
On macOS High Sierra r2cutter crashes due to the absence of ``gettext`` library. To fix this problem, simply install the missing package:
On macOS High Sierra iaito crashes due to the absence of ``gettext`` library. To fix this problem, simply install the missing package:
::
+9 -9
View File
@@ -19,9 +19,9 @@
# -- Project information -----------------------------------------------------
project = 'Cutter'
copyright = '2020, The Cutter Developers'
author = 'The Cutter Developers'
project = 'Iaito'
copyright = '2020, The Iaito Developers'
author = 'The Iaito Developers'
# The short X.Y version
version = '1.12'
@@ -129,7 +129,7 @@ html_sidebars = {
# -- Options for HTMLHelp output ---------------------------------------------
# Output file base name for HTML help builder.
htmlhelp_basename = 'CutterDoc'
htmlhelp_basename = 'IaitoDoc'
# -- Options for LaTeX output ------------------------------------------------
@@ -156,8 +156,8 @@ latex_elements = {
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'Cutter.tex', 'Cutter Documentation',
'The Cutter Developers', 'manual'),
(master_doc, 'Iaito.tex', 'Iaito Documentation',
'The Iaito Developers', 'manual'),
]
@@ -166,7 +166,7 @@ latex_documents = [
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'cutter', 'Cutter Documentation',
(master_doc, 'cutter', 'Iaito Documentation',
[author], 1)
]
@@ -177,8 +177,8 @@ man_pages = [
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'Cutter', 'Cutter Documentation',
author, 'Cutter', 'One line description of project.',
(master_doc, 'Iaito', 'Iaito Documentation',
author, 'Iaito', 'One line description of project.',
'Miscellaneous'),
]
+3 -3
View File
@@ -1,12 +1,12 @@
Contributing to Cutter
Contributing to Iaito
=======================
So you like Cutter and want to get involved? Great! This part of the documentation will help and guide you through everything you need to know when contributing to Cutter. Welcome, we're delighted to see you!
So you like Iaito and want to get involved? Great! This part of the documentation will help and guide you through everything you need to know when contributing to Iaito. Welcome, we're delighted to see you!
.. tip::
**Need help?** Our community strives to be friendly, open, and accessible for new contributors. If you have any difficulties getting involved or finding answers to you questions, please `come and ask your questions on our Telegram or IRC groups <https://cutter.re/#community>`_.
We know that set up to work on Cutter and finding issues that are a good fit for your skills can be a challenge. We're always looking for ways to improve this process: making Cutter more open, accessible, and easier to participate with. If you're having any trouble following this documentation or hit a barrier you can't get around, please contact us.
We know that set up to work on Iaito and finding issues that are a good fit for your skills can be a challenge. We're always looking for ways to improve this process: making Iaito more open, accessible, and easier to participate with. If you're having any trouble following this documentation or hit a barrier you can't get around, please contact us.
.. rubric:: How do you want to help?
+1 -1
View File
@@ -2,7 +2,7 @@ Developer Documentation
=======================
.. note::
New to Cutter development? Check out our :doc:`tutorial for new developers <code/getting-started>`.
New to Iaito development? Check out our :doc:`tutorial for new developers <code/getting-started>`.
.. toctree::
:maxdepth: 2
@@ -1,11 +1,11 @@
Crash Handling System
=====================
Cutter uses `Breakpad <https://github.com/google/breakpad>`__ as a backend
Iaito uses `Breakpad <https://github.com/google/breakpad>`__ as a backend
for crash handling.
Crash Handling System is disabled by default to not interfere with developers while debugging.
To enable this system, set the ``CUTTER_ENABLE_CRASH_REPORTS`` build option.
To enable this system, set the ``IAITO_ENABLE_CRASH_REPORTS`` build option.
Solution Description
--------------------
@@ -16,7 +16,7 @@ There are only 2 source files:
* ``CrashHandler.cpp``
And the API is very simple: One function, ``initCrashHandler()``, enables the Crash Handling System if
``CUTTER_ENABLE_CRASH_REPORTS`` is true, otherwise it does nothing.
``IAITO_ENABLE_CRASH_REPORTS`` is true, otherwise it does nothing.
As soon as a signal is raised, ``crashHandler(int signum)`` is called with the signal's code as an argument.
This function first writes a crash dump to the operating system's temporary directory to catch core and
@@ -1,15 +1,15 @@
Cutter Development Guidelines
Iaito Development Guidelines
===============================
.. note::
New to Cutter development? Check out our :doc:`tutorial for new developers <getting-started>`.
New to Iaito development? Check out our :doc:`tutorial for new developers <getting-started>`.
Common Usage
--------------
CutterCore Class
IaitoCore Class
~~~~~~~~~~~~~~~~
This is the main class where every link with r2 is made. It is *unique*
@@ -26,17 +26,17 @@ Calling a radare2 Command
There are multiple ways to call a radare2 command:
- ``CutterCore::cmdj(<command>)`` - To be used with json commands like ``cmdj("agj")`` or ``cmdj("aflj")``.
- ``IaitoCore::cmdj(<command>)`` - To be used with json commands like ``cmdj("agj")`` or ``cmdj("aflj")``.
This is the command we used to fetch structured data from radare2.
- ``CutterCore::cmdRaw(<command>)`` - Executes a single radare2 command
- ``IaitoCore::cmdRaw(<command>)`` - Executes a single radare2 command
without going through radare2 shell functionality like output redirects, grep, and multiple command parsing.
The command then returns its output. This should be used when a command doesn't have output or the output should be handled as-is. If possible, using the JSON variation with ``cmdj`` is always preferred.
- ``CutterCore::cmdRawAt(<command>, <address>)`` - Executes a single radare2 command in a given address and returns the output. This helps avoiding weird strings concatenation like ``cmd("ph " + hash + " @ " + QString::num(address))``.
- ``IaitoCore::cmdRawAt(<command>, <address>)`` - Executes a single radare2 command in a given address and returns the output. This helps avoiding weird strings concatenation like ``cmd("ph " + hash + " @ " + QString::num(address))``.
- ``CutterCore::cmd()`` - *(Discouraged)* Only use it when ``cmdj`` or ``cmdRaw`` cannot be used. This is used for complex commands using concatenation of several commands (``px 5; pd 7; afl;``), for grepping (``pd 5~call``). for commands inside commands (``?e `afn.```) and so on.
- ``IaitoCore::cmd()`` - *(Discouraged)* Only use it when ``cmdj`` or ``cmdRaw`` cannot be used. This is used for complex commands using concatenation of several commands (``px 5; pd 7; afl;``), for grepping (``pd 5~call``). for commands inside commands (``?e `afn.```) and so on.
This is also used when the output is complex and is not parsed correctly in ``cmdRaw``.
Make sure to carefully sanitize user-controlled variables that are passed to the command, to avoid unexpected command injections.
@@ -52,9 +52,9 @@ Example:
Seek the Current File
~~~~~~~~~~~~~~~~~~~~~
To modify radare2 seek use ``CutterCore::seek(const RVA offset)``. This
To modify radare2 seek use ``IaitoCore::seek(const RVA offset)``. This
is important because it will emit a
``CutterCore::seekChanged(RVA offset)`` signal. Never ever call
``IaitoCore::seekChanged(RVA offset)`` signal. Never ever call
``cmd("s offset")``;
Example:
@@ -65,13 +65,13 @@ Example:
.. note::
Cutter also supports a silent seek which doesn't trigger the ``seekChanged`` event and doesn't add new entries to the seek history.
Iaito also supports a silent seek which doesn't trigger the ``seekChanged`` event and doesn't add new entries to the seek history.
Creating a Widget
~~~~~~~~~~~~~~~~~
Make sure to connect the ``CutterCore::seekChanged(RVA offset)`` signal
Make sure to connect the ``IaitoCore::seekChanged(RVA offset)`` signal
so your widget refreshes its output when radare2 seek is modified
(switching to another function, etc.).
@@ -86,9 +86,9 @@ to the style is:
.. code:: bash
astyle --project=src/Cutter.astylerc src/filename.cpp
astyle --project=src/Iaito.astylerc src/filename.cpp
In contrast to the official guidelines of Qt, in Cutter we always use curly braces in conditional statements, even if the body of a conditional statement contains only one line.
In contrast to the official guidelines of Qt, in Iaito we always use curly braces in conditional statements, even if the body of a conditional statement contains only one line.
.. code:: cpp
@@ -224,12 +224,12 @@ You can find the class documentation in the API Reference menu item.
Updating the Git Submodules
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Git submodules play a major part in Cutter. This, because Cutter is powered
Git submodules play a major part in Iaito. This, because Iaito is powered
by radare2, its parent project, and it tries to stay up-to-date with its
recent version, which allows us to implement new features, and enjoy bug
fixes and performance improvements on radare2. Often, we need to update
the radare2 submodule or the others, to push their most recent
version to Cutter.
version to Iaito.
You can view the list of all the submodules from the cutter root folder with:
@@ -1,35 +1,35 @@
Contributing code to Cutter
Contributing code to Iaito
============================
Thank you so much for your interest in contributing to Cutter! Contributors like you are a treasured resource for Cutter and their contributions have made the project what it is. And so, we appreciate everyone who gives the community the gift of their time <3.
Thank you so much for your interest in contributing to Iaito! Contributors like you are a treasured resource for Iaito and their contributions have made the project what it is. And so, we appreciate everyone who gives the community the gift of their time <3.
The following section in our documentation is *not* intended to be comprehensive but rather a quick guide to walk you through the basic flow of contributing to Cutter. For more thorough documentation, follow the links on this page and read our Development Guidelines.
The following section in our documentation is *not* intended to be comprehensive but rather a quick guide to walk you through the basic flow of contributing to Iaito. For more thorough documentation, follow the links on this page and read our Development Guidelines.
Clone and compile Cutter
Clone and compile Iaito
-------------------------
The first step before starting to add code to Cutter is to build it on your environment. Whether it is Linux, Windows, or macOS, we have you covered and detailed the instructions to compile Cutter on our :doc:`/building`. Once you are done and Cutter is built successfully, test that it works correctly and continue to the next steps.
The first step before starting to add code to Iaito is to build it on your environment. Whether it is Linux, Windows, or macOS, we have you covered and detailed the instructions to compile Iaito on our :doc:`/building`. Once you are done and Iaito is built successfully, test that it works correctly and continue to the next steps.
.. tip::
If you are facing issues with building Cutter on your environment, make sure you didn't miss anything in the documentation. Specifically, check the :ref:`Building:Troubleshooting` section.
If you are facing issues with building Iaito on your environment, make sure you didn't miss anything in the documentation. Specifically, check the :ref:`Building:Troubleshooting` section.
.. tip::
If you need help configuring your development environment, make sure to read our :doc:`instructions, recommendations and tips <ide-setup>` for setting up a Cutter development environment for popular IDEs.
If you need help configuring your development environment, make sure to read our :doc:`instructions, recommendations and tips <ide-setup>` for setting up a Iaito development environment for popular IDEs.
Find something to work on
--------------------------
Some will reach this page with a clear idea of what issue they want to fix or what feature they wish to implement. But some would simply want to help Cutter getting better while doing open-source, without having a specific thing in mind. If you already have something in mind - great! Move forward to the next section. If you don't have anything specific, stick with us a little bit more.
Some will reach this page with a clear idea of what issue they want to fix or what feature they wish to implement. But some would simply want to help Iaito getting better while doing open-source, without having a specific thing in mind. If you already have something in mind - great! Move forward to the next section. If you don't have anything specific, stick with us a little bit more.
The issues and the feature-requests of Cutter are listed and tracked on our `Github Issues <https://github.com/radareorg/cutter/issues>`_ page. Don't get scared by the number of issues open, we will learn how to filter them to find those which fit you best.
The issues and the feature-requests of Iaito are listed and tracked on our `Github Issues <https://github.com/radareorg/cutter/issues>`_ page. Don't get scared by the number of issues open, we will learn how to filter them to find those which fit you best.
.. tip::
**Fix your pet peeve!** Anything specific that annoys you about Cutter? Fantastic! This can be a great place to start.
**Fix your pet peeve!** Anything specific that annoys you about Iaito? Fantastic! This can be a great place to start.
Organizing issues
*******************
In order to organize the hundreds of Issues opened on Cutter, we use several features of Github for project management. Get yourself familiar with the following features, it will help you filter the issues.
In order to organize the hundreds of Issues opened on Iaito, we use several features of Github for project management. Get yourself familiar with the following features, it will help you filter the issues.
Labels
^^^^^^^^
@@ -37,7 +37,7 @@ Tagging issues and pull requests with labels allows us to quickly search for the
Projects
^^^^^^^^^^
We use `project boards <https://github.com/radareorg/cutter/projects>`_ to gather together tasks and issues for specific features or problems. For example, we have dedicated project boards for Debugger, Hexdump widget, Decompiler widget, and High DPI support. If you are interested to take part in developing a major feature, or you want to get a broader look at a progress of a specific part in Cutter, this can be a good place to visit.
We use `project boards <https://github.com/radareorg/cutter/projects>`_ to gather together tasks and issues for specific features or problems. For example, we have dedicated project boards for Debugger, Hexdump widget, Decompiler widget, and High DPI support. If you are interested to take part in developing a major feature, or you want to get a broader look at a progress of a specific part in Iaito, this can be a good place to visit.
Milestones
^^^^^^^^^^^^
@@ -55,7 +55,7 @@ Before choosing an issue to work on, make sure it is not assigned to anyone. If
Get familiar with the current situation
----------------------------------------
Run Cutter and get familiar with how the functionality you want to modify works currently. For example, if it is a dialog, make sure you understand its role and how our users are using it. If it is a bug, try to repeat it using the instructions from the bug report.
Run Iaito and get familiar with how the functionality you want to modify works currently. For example, if it is a dialog, make sure you understand its role and how our users are using it. If it is a bug, try to repeat it using the instructions from the bug report.
.. tip::
If you are inexperienced with binary analysis tasks, you can always ask other developers in the team about the feature and how it should be used. The team and the community will be happy to help and instruct you with everything you need to know.
@@ -85,12 +85,12 @@ In the Pull Request template you will be required to add a "Test plan". For exam
Repeat
-------
**Thank you!** You've made your very first contribution, and Cutter is better for it. But don't stop now. Go back to the first steps, as there is plenty more to do. A mentor or other developers might suggest a new issue for you to work on.
**Thank you!** You've made your very first contribution, and Iaito is better for it. But don't stop now. Go back to the first steps, as there is plenty more to do. A mentor or other developers might suggest a new issue for you to work on.
More Information
-----------------
.. important::
We're always in the process of improving the information on this page for newcomers to the Cutter. Please help us by suggesting improvements and tell us about the information that this page lacks.
We're always in the process of improving the information on this page for newcomers to the Iaito. Please help us by suggesting improvements and tell us about the information that this page lacks.
+21 -21
View File
@@ -1,39 +1,39 @@
Development environment setup
=============================
This page contains recommendations and tips on how to better setup different IDEs for Cutter development.
This page contains recommendations and tips on how to better setup different IDEs for Iaito development.
General advice
--------------
Everyone has their own preferences for their favorite IDE or code editor.
There are no strict requirements for using a specific one for Cutter development.
There are no strict requirements for using a specific one for Iaito development.
Any IDE with good CMake integration should work well.
For most development builds, unless you are working on packaging issues, it is recommended to use ``CUTTER_USE_BUNDLED_RADARE2=ON`` Cmake option. It is the easiest way to ensure that a compatible r2 version is used, and helps you deal with different versions of radare2 when working with multiple Cutter branches. On Linux, in case you have multiple r2 versions without ``CUTTER_USE_BUNDLED_RADARE2``, the ``PKG_CONFIG_PATH`` environment variable can be used to select the desired radare2 installation.
For most development builds, unless you are working on packaging issues, it is recommended to use ``IAITO_USE_BUNDLED_RADARE2=ON`` Cmake option. It is the easiest way to ensure that a compatible r2 version is used, and helps you deal with different versions of radare2 when working with multiple Iaito branches. On Linux, in case you have multiple r2 versions without ``IAITO_USE_BUNDLED_RADARE2``, the ``PKG_CONFIG_PATH`` environment variable can be used to select the desired radare2 installation.
While `Qt Creator`_ has a builtin visual form and widget editor, not having it in other IDEs is not a major problem. It is also available as a standalone tool called Qt Designer and you can configure the file associations so that ``.ui`` files are opened using it. Depending on the ``.ui`` file and changes you want to make, it is sometimes easier to perform them by editing the ``.ui`` file as a text file. Essentially, ``.ui`` files are XML files. Most code editors should have some support for XML highlighting and possibly block folding.
The following instructions and recommendations assume that you have already download Cutter source and obtained required dependencies as described in :doc:`/building`.
The following instructions and recommendations assume that you have already download Iaito source and obtained required dependencies as described in :doc:`/building`.
Linux
-----
On a rolling-release distribution or a somewhat recent version of traditional distributions like Ubuntu 18.04, it should be possible to get all the dependencies from the official repository. There might be some problems with PySide2 and Shiboken2 but it can be easily disabled and isn't necessary for most work on Cutter. Don't try to install PySide using pip.
On a rolling-release distribution or a somewhat recent version of traditional distributions like Ubuntu 18.04, it should be possible to get all the dependencies from the official repository. There might be some problems with PySide2 and Shiboken2 but it can be easily disabled and isn't necessary for most work on Iaito. Don't try to install PySide using pip.
Windows
-------
Assuming you have a sufficiently powerful computer, a nice way of getting and configuring Qt for Cutter is to use `vcpkg <https://github.com/Microsoft/vcpkg>`_.
For a quick test, the exact versions of libraries used by Cutter release packages can be obtained from `cutter-deps <https://github.com/radareorg/cutter-deps/releases>`_ but they don't contain debug
versions of libraries so they are not suitable for more serious Cutter development on Windows.
Assuming you have a sufficiently powerful computer, a nice way of getting and configuring Qt for Iaito is to use `vcpkg <https://github.com/Microsoft/vcpkg>`_.
For a quick test, the exact versions of libraries used by Iaito release packages can be obtained from `cutter-deps <https://github.com/radareorg/cutter-deps/releases>`_ but they don't contain debug
versions of libraries so they are not suitable for more serious Iaito development on Windows.
Qt Creator
----------
QT Creator is an open-source IDE made by the same developers as Qt.
Even though Cutter has qmake project cutter.pro it is recommended to use the CMake project in QTCreator.
QTCreator support for CMake is as good as qmake one but not all Cutter project configuration options are available in qmake project and in future Cutter qmake project might be removed.
Even though Iaito has qmake project cutter.pro it is recommended to use the CMake project in QTCreator.
QTCreator support for CMake is as good as qmake one but not all Iaito project configuration options are available in qmake project and in future Iaito qmake project might be removed.
Pros and Cons
~~~~~~~~~~~~~
@@ -53,12 +53,12 @@ The following instructions were made based on version 4.12.4 of Qt Creator. The
- Configuration step might fail due to r2 not being found, that's normal
- Click :guilabel:`Projects` button with wrench icon on the left side of the screen
- Click :menuselection:`Add --> Boolean` in the CMake section
- Enter ``CUTTER_USE_BUNDLED_RADARE2`` as a key name and change the value to ON. In earlier Qt Creator versions it is necessary to do this during the initial kit selection and configuration step.
- Enter ``IAITO_USE_BUNDLED_RADARE2`` as a key name and change the value to ON. In earlier Qt Creator versions it is necessary to do this during the initial kit selection and configuration step.
- Click :guilabel:`Apply Configuration Changes`:. The configuration should succeed now. In case of errors inspect the output log.
Either in :menuselection:`Projects --> Code Style --> C++` or :menuselection:`Tools --> Options --> C++ --> Code Style` select :guilabel:`Qt [built-in]`. It should be selected by default unless you have used Qt Creator for other projects. Cutter Coding style is almost identical to Qt one. This will help with using correct indentation type and basic formatting without running code formatter.
Either in :menuselection:`Projects --> Code Style --> C++` or :menuselection:`Tools --> Options --> C++ --> Code Style` select :guilabel:`Qt [built-in]`. It should be selected by default unless you have used Qt Creator for other projects. Iaito Coding style is almost identical to Qt one. This will help with using correct indentation type and basic formatting without running code formatter.
To configure AStyle for formatting a file go to :menuselection:`Tools --> Options --> Beautifier --> Artistic Style`. If necessary, specify the path to astyle executable. The :guilabel:`Use file \*.astylerc defined in project files` option doesn't seem to be working reliably so it is necessary to use :guilabel:`Use specific config file` option. Cutter astyle configuration is stored in :file:`cutter/src/Cutter.astylerc`.
To configure AStyle for formatting a file go to :menuselection:`Tools --> Options --> Beautifier --> Artistic Style`. If necessary, specify the path to astyle executable. The :guilabel:`Use file \*.astylerc defined in project files` option doesn't seem to be working reliably so it is necessary to use :guilabel:`Use specific config file` option. Iaito astyle configuration is stored in :file:`cutter/src/Iaito.astylerc`.
Changing CMake configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -86,7 +86,7 @@ Recommended plugins
Project setup
~~~~~~~~~~~~~
- :menuselection:`File --> Open Folder...` and select the folder in which you cloned Cutter
- :menuselection:`File --> Open Folder...` and select the folder in which you cloned Iaito
- Install the recommended plugins.
- Once the `CMake Tools` plugin is installed, in the corner you will see a popup asking you "Would you like to configure project 'cutter'? Source: CMake Tools (Extension)". Click Yes.
- In the kit selection popup, choose :guilabel:`[Unspecified]` unless you have more specific needs.
@@ -94,10 +94,10 @@ Project setup
Changing CMake configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
After the first configuration :kbd:`Ctrl-Shift-P`/:guilabel:`CMake: Edit CMake Cache` opens a text editor with all CMake options. Cutter specific ones mostly start with "CUTTER".
After the first configuration :kbd:`Ctrl-Shift-P`/:guilabel:`CMake: Edit CMake Cache` opens a text editor with all CMake options. Iaito specific ones mostly start with "CUTTER".
.. note::
``CUTTER_USE_BUNDLED_RADARE2`` option is also defined in ``.vscode/settings.json`` file and it will be overridden from there. It is set to ``ON`` by default as it is recommended during development.
``IAITO_USE_BUNDLED_RADARE2`` option is also defined in ``.vscode/settings.json`` file and it will be overridden from there. It is set to ``ON`` by default as it is recommended during development.
.. _vscode-debug-setup:
@@ -139,8 +139,8 @@ Pros and Cons
Project setup
~~~~~~~~~~~~~
- Go to :menuselection:`File --> Open` and select the folder in which you cloned Cutter
- Go to :menuselection:`File --> Settings --> Build, Execution, Deployment --> CMake`. In the :guilabel:`CMake Options` field enter ``-DCUTTER_USE_BUNDLED_RADARE2=ON``
- Go to :menuselection:`File --> Open` and select the folder in which you cloned Iaito
- Go to :menuselection:`File --> Settings --> Build, Execution, Deployment --> CMake`. In the :guilabel:`CMake Options` field enter ``-DIAITO_USE_BUNDLED_RADARE2=ON``
- Open :file:`cutter/src/CMakeLists.txt` using the project file list on the left side of the screen
- A yellow bar with a message :guilabel:`CMake project is not loaded` should appear, click :guilabel:`Load CMake project`
@@ -181,9 +181,9 @@ Pros and Cons
Project setup
~~~~~~~~~~~~~
- Open folder in which you cloned Cutter source using Visual Studio
- Open folder in which you cloned Iaito source using Visual Studio
- Open CMake settings configurator using either :menuselection:`Project --> CMake Settings` or by clicking :guilabel:`Open the CMake Settings Editor` in the overview page.
- Check ``CUTTER_USE_BUNDLED_RADARE2`` option
- Check ``IAITO_USE_BUNDLED_RADARE2`` option
- If you are using vcpkg, Visual Studio should detect it automatically. The list of CMake options in the configurator should have some referring to vcpkg. If they are not there, specify the path to vcpkg toolchain file in the :guilabel:`CMake toolchain file` field.
- If you are not using vcpkg, configure the path to Qt as mentioned in :ref:`windows CMake instructions<building:Building on Windows>`. You can specify the CMake flag in :guilabel:`CMake command arguments:` field.
- To Ensure that VS debugger can display Qt types in a readable way, it is recommended to install `Qt Visual Studio Tools <https://marketplace.visualstudio.com/items?itemName=TheQtCompany.QtVisualStudioTools2019>`_ plugin. It will create a :file:`Documents/Visual Studio 2019/Visualizers/qt5.natvis` file. Once :file:`qt5.natvis` has been created you can uninstall the plugin.
@@ -196,5 +196,5 @@ Editing Qt .ui files and Qt integration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
By default Visual Studio will open ``.ui`` files as XML text documents. You can configure to open it using Qt Designer by right-clicking and selecting :guilabel:`Open With...`.
There is a Qt plugin for Visual Studio from Qt. It isn't very useful for Cutter development since it is aimed more at helping with Qt integration into Visual Studio projects.
There is a Qt plugin for Visual Studio from Qt. It isn't very useful for Iaito development since it is aimed more at helping with Qt integration into Visual Studio projects.
It doesn't do much for CMake based projects. The biggest benefit is that it automatically installs :file:`qt5.natvis` file for more readable displaying of Qt types in the debugger.
@@ -1,17 +1,17 @@
Release Procedure
=================
1. Update translations submodule `https://github.com/radareorg/cutter-translations`_
1. The latest archive from Crowdin should already be in the repository, if not make sure to merge any automated Pull Request from Crowdin (e.g. https://github.com/radareorg/cutter-translations/pull/9)
2. Update submodule in cutter
1. Update translations submodule `https://github.com/radareorg/iaito-translations`_
1. The latest archive from Crowdin should already be in the repository, if not make sure to merge any automated Pull Request from Crowdin (e.g. https://github.com/radareorg/iaito-translations/pull/9)
2. Update submodule in iaito
2. If there is a desire to keep working in the master branch, create branch for the release and do all the following work there.
3. Lock r2ghidra and r2dec versions downloaded by packaging scripts. Specify a tag or commit hash.
4. Update version
#. appveyor.yml
#. docs/sourc/conf.py
#. docs/source/index.rst
#. Cutter.pro
#. Cutter.appdata.xml
#. Iaito.pro
#. Iaito.appdata.xml
#. To be safe, search the code base for the previous version number.
5. Create a tag for the release candidate. For example, for the `v1.11.0` release you'd do something like this:
#. ``git tag v1.11.0-rc1``
@@ -56,4 +56,4 @@ If it makes sense repeat the step multiple times at different offsets and click
* Start debugging
* Go to main using function widget, make sure relocation was done correctly and you see code instead of unmapped memory and breakpoint is where you placed
* Click continue until you hit breakpoint in main
* Delete cutter settings file, and test that clean start works and layout isn't broken
* Delete iaito settings file, and test that clean start works and layout isn't broken
@@ -1,7 +1,7 @@
Building docs
=======================
This page explains the steps that are needed to build Cutter's documentation.
This page explains the steps that are needed to build Iaito's documentation.
Requirements
------------
@@ -1,35 +1,35 @@
Contributing documentation to Cutter
Contributing documentation to Iaito
=======================================
If you reached this place you were probably looking to help and improve Cutter's documentation - Fantastic, welcome aboard!
If you reached this place you were probably looking to help and improve Iaito's documentation - Fantastic, welcome aboard!
As many other young projects, Cutter has a problem - it lacks comprehensive documentation and written content. Thankfully, contributing to Cutter's documentation doesn’t require you to have a deep knowledge about the internals of the project. Writing, reviewing, and editing the documentation are great ways to learn about Cutter.
As many other young projects, Iaito has a problem - it lacks comprehensive documentation and written content. Thankfully, contributing to Iaito's documentation doesn’t require you to have a deep knowledge about the internals of the project. Writing, reviewing, and editing the documentation are great ways to learn about Iaito.
Don’t like the way something reads? Discover some information that wasn’t documented? Your pull request will be gleefully embraced.
.. note::
The documentation of Cutter is written using `Sphinx and reStructuredText <https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html>`_. The syntax is quite straight forward and very similar to Markdown. In the future, we hope to move completely to Markdown as it is more popular.
The documentation of Iaito is written using `Sphinx and reStructuredText <https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html>`_. The syntax is quite straight forward and very similar to Markdown. In the future, we hope to move completely to Markdown as it is more popular.
How can you help?
-----------------
The following sections suggest ways you can contribute to Cutter's documentation. The list isn't complete as the possibilities are limitless.
The following sections suggest ways you can contribute to Iaito's documentation. The list isn't complete as the possibilities are limitless.
The source for this documentation is available in the `docs directory <https://github.com/radareorg/cutter/tree/master/docs>`_ on Cutter's repository. This source can be generated according to the steps described in the :ref:`building docs page<contributing/docs/building-docs:Building docs>`. When the docs are updated, they are generated and pushed directly to the website at <https://cutter.re/docs>. The source for the website and blog are available on the `cutter.re's repository <https://github.com/radareorg/cutter.re>`_ and are served from the ``gh-pages`` branch.
The source for this documentation is available in the `docs directory <https://github.com/radareorg/cutter/tree/master/docs>`_ on Iaito's repository. This source can be generated according to the steps described in the :ref:`building docs page<contributing/docs/building-docs:Building docs>`. When the docs are updated, they are generated and pushed directly to the website at <https://cutter.re/docs>. The source for the website and blog are available on the `cutter.re's repository <https://github.com/radareorg/cutter.re>`_ and are served from the ``gh-pages`` branch.
.. tip::
Document what you wished to see. If you are a user of Cutter, try to think what things you would want to see documented when you started using the project. Sometimes, the best contributions are coming from your own needs.
Document what you wished to see. If you are a user of Iaito, try to think what things you would want to see documented when you started using the project. Sometimes, the best contributions are coming from your own needs.
User documentation
^^^^^^^^^^^^^^^^^^^
The documentation for users describes how to use Cutter and what the different features in Cutter do. The possibilities for contributing are endless since there are so many features that weren't even described on our docs yet. To contribute to our user documentation, all you need to do is pick a subject, widget, or functionality and document it. Describe the different visual components, how to use them, and what this feature even does.
The documentation for users describes how to use Iaito and what the different features in Iaito do. The possibilities for contributing are endless since there are so many features that weren't even described on our docs yet. To contribute to our user documentation, all you need to do is pick a subject, widget, or functionality and document it. Describe the different visual components, how to use them, and what this feature even does.
Common Errors and Troubleshooting
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
As our community gets bigger, more and more people are using, installing or building Cutter on different setups. Naturally, different environments might cause different issues. The :ref:`common issues<user-docs/common-issues:Common Issues>` section in our docs aims to go over the most popular issues that you might face while using Cutter and the :ref:`building errors troubleshooting<building:Troubleshooting>` section goes over common errors that you might face while building Cutter from sources. These docs sections also explain what causes these issues and how to solve them.
As our community gets bigger, more and more people are using, installing or building Iaito on different setups. Naturally, different environments might cause different issues. The :ref:`common issues<user-docs/common-issues:Common Issues>` section in our docs aims to go over the most popular issues that you might face while using Iaito and the :ref:`building errors troubleshooting<building:Troubleshooting>` section goes over common errors that you might face while building Iaito from sources. These docs sections also explain what causes these issues and how to solve them.
If you know of such a common issue, whether you faced it yourself or noticed it on our community chats, it will be very helpful if you could document it and possible solutions for it.
@@ -37,15 +37,15 @@ If you know of such a common issue, whether you faced it yourself or noticed it
Developers documentation
^^^^^^^^^^^^^^^^^^^^^^^^^
The documentation for Cutter developers aims to instruct new contributors on how to get started with developing to Cutter's codebase. It also describes best practices and development guidelines for all developers in the project. Think you have something to add to the developers' docs? We would love you to contribute.
The documentation for Iaito developers aims to instruct new contributors on how to get started with developing to Iaito's codebase. It also describes best practices and development guidelines for all developers in the project. Think you have something to add to the developers' docs? We would love you to contribute.
API documentation
^^^^^^^^^^^^^^^^^^
The documentation for Cutter's API is an important reference for Cutter developers as well as Plugin developers. It thoroughly describes for developers how some functions and features work. While some of the functions are thoroughly documented, most of them aren't. Any help with improving these documentations will be blessed.
The documentation for Iaito's API is an important reference for Iaito developers as well as Plugin developers. It thoroughly describes for developers how some functions and features work. While some of the functions are thoroughly documented, most of them aren't. Any help with improving these documentations will be blessed.
Blog posts
^^^^^^^^^^^^^
We would love to see people writing and sharing their experiences with Cutter. Whether you are solving CTF challenges with Cutter, analyzing malware, finding vulnerabilities, or working on personal projects - we would love to see these published. If you have a personal blog, we would be proud to share and retweet your Cutter-related publications on our profiles, bringing you more engagement and followers. If you don't have a personal blog, we would love to host your publication on our community blog over at https://cutter.re/blog.
We would love to see people writing and sharing their experiences with Iaito. Whether you are solving CTF challenges with Iaito, analyzing malware, finding vulnerabilities, or working on personal projects - we would love to see these published. If you have a personal blog, we would be proud to share and retweet your Iaito-related publications on our profiles, bringing you more engagement and followers. If you don't have a personal blog, we would love to host your publication on our community blog over at https://cutter.re/blog.
@@ -1,7 +1,7 @@
Getting Started with Python Plugins
===================================
This article provides a step-by-step guide on how to write a simple Python plugin for Cutter.
This article provides a step-by-step guide on how to write a simple Python plugin for Iaito.
Create a python file, called ``myplugin.py`` for example, and add the following contents:
@@ -9,7 +9,7 @@ Create a python file, called ``myplugin.py`` for example, and add the following
import cutter
class MyCutterPlugin(cutter.CutterPlugin):
class MyIaitoPlugin(cutter.IaitoPlugin):
name = "My Plugin"
description = "This plugin does awesome things!"
version = "1.0"
@@ -25,26 +25,26 @@ Create a python file, called ``myplugin.py`` for example, and add the following
pass
def create_cutter_plugin():
return MyCutterPlugin()
return MyIaitoPlugin()
This is the most basic code that makes up a plugin.
Python plugins in Cutter are regular Python modules that are imported automatically on startup.
In order to load the plugin, Cutter will call the function ``create_cutter_plugin()`` located
in the root of the module and expects it to return an instance of ``cutter.CutterPlugin``.
Python plugins in Iaito are regular Python modules that are imported automatically on startup.
In order to load the plugin, Iaito will call the function ``create_cutter_plugin()`` located
in the root of the module and expects it to return an instance of ``cutter.IaitoPlugin``.
Normally, you shouldn't have to do anything else in this function.
.. note::
The Cutter API is exposed through the ``cutter`` module.
The Iaito API is exposed through the ``cutter`` module.
This consists mostly of direct bindings of the original C++ classes, generated with Shiboken2.
For more detail about this API, see the Cutter C++ code or :ref:`api`.
For more detail about this API, see the Iaito C++ code or :ref:`api`.
The ``CutterPlugin`` subclass contains some meta-info and two callback methods:
The ``IaitoPlugin`` subclass contains some meta-info and two callback methods:
* ``setupPlugin()`` is called right after the plugin is loaded and can be used to initialize the plugin itself.
* ``setupInterface()`` is called with the instance of MainWindow as an argument and should create and register any UI components.
* ``terminate()`` is called on shutdown and should clean up any resources used by the plugin.
Copy this file into the ``python`` subdirectory located under the plugins directory of Cutter and start the application.
Copy this file into the ``python`` subdirectory located under the plugins directory of Iaito and start the application.
You should see an entry for your plugin in the list under Edit -> Preferences -> Plugins.
Here, the absolute path to the plugins directory is shown too if you are unsure where to put your plugin:
@@ -71,7 +71,7 @@ Next, we are going to add a simple dock widget. Extend the code as follows:
from PySide2.QtWidgets import QAction, QLabel
class MyDockWidget(cutter.CutterDockWidget):
class MyDockWidget(cutter.IaitoDockWidget):
def __init__(self, parent, action):
super(MyDockWidget, self).__init__(parent, action)
self.setObjectName("MyDockWidget")
@@ -81,7 +81,7 @@ Next, we are going to add a simple dock widget. Extend the code as follows:
self.setWidget(label)
label.setText("Hello World")
class MyCutterPlugin(cutter.CutterPlugin):
class MyIaitoPlugin(cutter.IaitoPlugin):
# ...
def setupInterface(self, main):
@@ -92,7 +92,7 @@ Next, we are going to add a simple dock widget. Extend the code as follows:
# ...
We are subclassing ``cutter.CutterDockWidget``, which is the base class for all dock widgets in Cutter,
We are subclassing ``cutter.IaitoDockWidget``, which is the base class for all dock widgets in Iaito,
and adding a label to it.
.. note::
@@ -103,7 +103,7 @@ In our ``setupInterface()`` method, we create an instance of our dock widget and
added to the menu for showing and hiding the widget.
MainWindow provides a helper method called ``addPluginDockWidget()`` to easily register these.
When running Cutter now, you should see the widget:
When running Iaito now, you should see the widget:
.. image:: mydockwidget.png
@@ -123,7 +123,7 @@ Extend the code as follows:
# ...
class MyDockWidget(cutter.CutterDockWidget):
class MyDockWidget(cutter.IaitoDockWidget):
def __init__(self, parent, action):
# ...
@@ -155,7 +155,7 @@ In our case, we use the two commands ``pd`` (Print Disassembly) and ``pdj`` (Pri
with a parameter of 1 to fetch a single line of disassembly.
.. note::
To try out commands, you can use the Console widget in Cutter. Almost all commands support a ``?`` suffix, like in
To try out commands, you can use the Console widget in Iaito. Almost all commands support a ``?`` suffix, like in
``pd?``, to show help and available sub-commands.
To get a general overview, enter a single ``?``.
@@ -181,7 +181,7 @@ This can be done like the following:
# ...
class MyDockWidget(cutter.CutterDockWidget):
class MyDockWidget(cutter.IaitoDockWidget):
def __init__(self, parent, action):
# ...
@@ -201,7 +201,7 @@ This can be done like the following:
First, we move the update code to a separate method.
Then we call ``cutter.core()``, which returns the global instance of ``CutterCore``.
Then we call ``cutter.core()``, which returns the global instance of ``IaitoCore``.
This class provides the Qt signal ``seekChanged(RVA)``, which is emitted every time the current seek changes.
We can simply connect this signal to our method and our widget will update as we expect it to:
@@ -219,7 +219,7 @@ Full Code
from PySide2.QtCore import QObject, SIGNAL
from PySide2.QtWidgets import QAction, QLabel
class MyDockWidget(cutter.CutterDockWidget):
class MyDockWidget(cutter.IaitoDockWidget):
def __init__(self, parent, action):
super(MyDockWidget, self).__init__(parent, action)
self.setObjectName("MyDockWidget")
@@ -240,7 +240,7 @@ Full Code
self._label.setText("Current disassembly:\n{}\nwith size {}".format(disasm, size))
class MyCutterPlugin(cutter.CutterPlugin):
class MyIaitoPlugin(cutter.IaitoPlugin):
name = "My Plugin"
description = "This plugin does awesome things!"
version = "1.0"
@@ -259,4 +259,4 @@ Full Code
pass
def create_cutter_plugin():
return MyCutterPlugin()
return MyIaitoPlugin()
@@ -1,9 +1,9 @@
Translate Cutter
Translate Iaito
==================
Help Cutter by adding translations to the project!
Help Iaito by adding translations to the project!
Cutter is a global project with users from all around the world. We believe that Cutter should be as accessible as possible, and want our users to feel comfortable while using its interface. Providing our community an interface with their own language makes the experience of using Cutter better. Thus, Cutter supports a translation and localization mechanism powered by the `Crowdin <https://crowdin.com/project/cutter>`_ platform. We invite you to contribute and add translations to the project.
Iaito is a global project with users from all around the world. We believe that Iaito should be as accessible as possible, and want our users to feel comfortable while using its interface. Providing our community an interface with their own language makes the experience of using Iaito better. Thus, Iaito supports a translation and localization mechanism powered by the `Crowdin <https://crowdin.com/project/cutter>`_ platform. We invite you to contribute and add translations to the project.
.. important::
+10 -10
View File
@@ -1,18 +1,18 @@
Cutter
Iaito
======
Cutter is a Qt and C++ GUI for radare2. Its goal is to provide an advanced,
Iaito is a Qt and C++ GUI for radare2. Its goal is to provide an advanced,
customizable and FOSS reverse-engineering platform while keeping the
user experience in mind. Cutter was created by reverse engineers for
user experience in mind. Iaito was created by reverse engineers for
reverse engineers.
.. image:: images/screenshot.png
Getting Cutter
Getting Iaito
--------------
Cutter is available for all major platforms. You can
Iaito is available for all major platforms. You can
download the latest release from
`here <https://github.com/radareorg/cutter/releases>`__.
@@ -22,27 +22,27 @@ download the latest release from
::
chmod +x Cutter*.AppImage
chmod +x Iaito*.AppImage
Building from Sources
---------------------
To build Cutter on your machine, please follow this guide: :doc:`Building from Source </building>`.
To build Iaito on your machine, please follow this guide: :doc:`Building from Source </building>`.
Need help?
----------
You can contact the *Cutter* developers and community on:
You can contact the *Iaito* developers and community on:
- Telegram: https://t.me/r2cutter
- Telegram: https://t.me/iaito
- #cutter on irc.freenode.net
- Twitter: https://twitter.com/r2gui
Want to help the project?
-------------------------
If you want to contribute to Cutter, take a look at our :doc:`Contribution Guidelines </contributing>` to learn how you can help improve the project!
If you want to contribute to Iaito, take a look at our :doc:`Contribution Guidelines </contributing>` to learn how you can help improve the project!
.. toctree::
:caption: Contents:
+5 -5
View File
@@ -1,11 +1,11 @@
Plugins
=======
Cutter supports writing plugins in both C++ and Python.
Iaito supports writing plugins in both C++ and Python.
If you are unsure of which language to choose, starting with Python is strongly suggested as
it provides a faster and simpler workflow.
If you plan to implement support for a new file format or architecture, Cutter plugins are not the correct approach.
If you plan to implement support for a new file format or architecture, Iaito plugins are not the correct approach.
Instead, you will want to implement a radare2 plugin, which is documented `here <https://radare.gitbooks.io/radare2book/plugins/intro.html>`_.
@@ -18,11 +18,11 @@ To get the location of this directory and a list of currently loaded plugins, na
.. image:: contributing/plugins/preferences-plugins.png
The plugins directory contains two subdirectories, ``native`` and ``python`` for C++ and Python plugins respectively,
which will be created automatically by Cutter.
which will be created automatically by Iaito.
.. note::
The support for Python plugins is only available if Cutter was built with the options ``CUTTER_ENABLE_PYTHON``
and ``CUTTER_ENABLE_PYTHON_BINDINGS`` enabled.
The support for Python plugins is only available if Iaito was built with the options ``IAITO_ENABLE_PYTHON``
and ``IAITO_ENABLE_PYTHON_BINDINGS`` enabled.
This is the case for all official builds from GitHub Releases starting with version 1.8.0.
+3 -3
View File
@@ -1,10 +1,10 @@
User Documentation
=======================
This page contains information about the different menus in Cutter.
This page contains information about the different menus in Iaito.
Cutter is an advanced reverse engineering platform powered by radare2.
This user's guide provides detailed information on how to use Cutter.
Iaito is an advanced reverse engineering platform powered by radare2.
This user's guide provides detailed information on how to use Iaito.
The documentation for users is still on its early stages and will be improved over time.
+1 -1
View File
@@ -4,7 +4,7 @@ Command-line Options
Synopsis
--------
**Cutter** [*options*] [<*filename*>]
**Iaito** [*options*] [<*filename*>]
Options
+2 -2
View File
@@ -18,10 +18,10 @@ the Xorg layout is wrong. You can check it with: ``setxkbmap -query``
Most of the time using ``setxkbmap us`` solves the issue, but it might
not be enough and require a more advanced Xorg configuration.
Initial Analysis takes a long time or Cutter UI freezes
Initial Analysis takes a long time or Iaito UI freezes
-------------------------------------------------------
Cutter and radare2 currently don't work very well with large and very large binaries.
Iaito and radare2 currently don't work very well with large and very large binaries.
The exact limits depend on the content of the binary, but roughly a few MB can be considered large
and may take a few minutes to analyze. More than 100MB is very large,
analysis with default settings will likely take a very long time and it might occasionally
+5 -5
View File
@@ -1,19 +1,19 @@
Features
=============
This section in the user docs gives a more detailed information about different features in Cutter. These are the different
This section in the user docs gives a more detailed information about different features in Iaito. These are the different
utilities and views that can be used and controlled by you during your session. As more familiar and comfort you feel with the
different features in Cutter, the more efficient and effective you are during your reverse-engineering experience.
different features in Iaito, the more efficient and effective you are during your reverse-engineering experience.
Decompiler
-------------
A decompiler is a program that will analyze binaries and attempt to create a high-level representation of the machine code in it. In other words, it tries to reconstruct the source code from which the binary was compiled in the first place.
Here's an image that compares one of the decompiler Cutter supports with the Cutter's disassembler.
Here's an image that compares one of the decompiler Iaito supports with the Iaito's disassembler.
.. 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/radareorg/cutter-plugins#decompilers>`_ section on our Plugins repository to know more about the decompilers we support.
Iaito 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/radareorg/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 R2Ghidra. :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 Iaito is R2Ghidra. :doc:`Click here <menus/decompiler-context-menu>` to learn more about the functionalities we provide in the decompiler.
+1 -1
View File
@@ -1,7 +1,7 @@
Menus
======
This part of the user documentation will provide the reader with information about the different menus and context menu items they can find on Cutter. Each item has a description that explains about its actions, as well as how to reach this feature from the UI and a keyboard shortcut if one assigned to the feature.
This part of the user documentation will provide the reader with information about the different menus and context menu items they can find on Iaito. Each item has a description that explains about its actions, as well as how to reach this feature from the UI and a keyboard shortcut if one assigned to the feature.
.. toctree::
@@ -90,7 +90,7 @@ Edit Local Variables and Arguments
Show Cross References
----------------------------------------
**Description:** Show X-Refs to the reference under the cursor. This option will open Cutter's X-Refs dialog in which you will be able to see a list of X-Refs from and to the address of the reference. You can also see a preview of each cross-reference to quickly inspect the different usages. Note that references refer to function names, global variables, and constant variables with an address.
**Description:** Show X-Refs to the reference under the cursor. This option will open Iaito's X-Refs dialog in which you will be able to see a list of X-Refs from and to the address of the reference. You can also see a preview of each cross-reference to quickly inspect the different usages. Note that references refer to function names, global variables, and constant variables with an address.
**Steps:** Right-click on a reference and choose ``Show X-Refs``
@@ -124,6 +124,6 @@ Continue Until Line
Set Program Counter (PC)
----------------------------------------
**Description:** Set the Program Counter of the debugger to the current offset. For example, on an Intel 64bit program, Cutter will set the value of the RIP register to the current address. *This option is only available on Debug or Emulation modes*.
**Description:** Set the Program Counter of the debugger to the current offset. For example, on an Intel 64bit program, Iaito will set the value of the RIP register to the current address. *This option is only available on Debug or Emulation modes*.
**Steps:** While in Debug or Emulation modes, right-click on a line of code and choose :menuselection:`Debug --> Set PC`.
@@ -91,7 +91,7 @@ Undefine a Function
Define a function
----------------------------------------
**Description:** Define a function starting from the current location. Cutter will automatically guess the size of the function. This can later be changed using the function editor.
**Description:** Define a function starting from the current location. Iaito will automatically guess the size of the function. This can later be changed using the function editor.
**Steps:** Right-click on an instruction and choose ``Define function here``.
@@ -114,7 +114,7 @@ Link a Type to Address
Show Cross References
----------------------------------------
**Description:** Show X-Refs from and to the specific location. This option will open Cutter's X-Refs dialog in which you will be able to see a list of X-Refs from and to the selected location, in addition to a preview of each cross-reference to quickly inspect the different usages.
**Description:** Show X-Refs from and to the specific location. This option will open Iaito's X-Refs dialog in which you will be able to see a list of X-Refs from and to the selected location, in addition to a preview of each cross-reference to quickly inspect the different usages.
**Steps:** Right-click on an instruction and choose ``Show X-Refs``
@@ -9,6 +9,6 @@ Continue Until Line
Set Program Counter (PC)
----------------------------------------
**Description:** Set the Program Counter of the debuggee to the current offset. For example, on an Intel 64bit program, Cutter will set the value of the RIP register to the current address. *This option is only available on Debug or Emulation modes*.
**Description:** Set the Program Counter of the debuggee to the current offset. For example, on an Intel 64bit program, Iaito will set the value of the RIP register to the current address. *This option is only available on Debug or Emulation modes*.
**Steps:** While in Debug or Emulation modes, right-click and address and choose ``Debug -> Set PC``.
@@ -3,7 +3,7 @@ Manage Breakpoints Context Menu
Add or Remove a Breakpoint
----------------------------------------
**Description:** Add a breakpoint at the current address. If a breakpoint already exists, Cutter will remove it.
**Description:** Add a breakpoint at the current address. If a breakpoint already exists, Iaito will remove it.
**Steps:** Right-click on an instruction and choose ``Breakpoint -> Add/remove breakpoint``
@@ -15,4 +15,4 @@ Advanced Breakpoint Dialog
**Steps:** Right-click on an instruction and choose ``Breakpoint -> Advanced breakpoint``.
**Shortcut:** :kbd:`Ctrl` + :kbd:`F2`
**Shortcut:** :kbd:`Ctrl` + :kbd:`F2`
@@ -3,24 +3,24 @@ Patching
Edit Instruction
----------------------------------------
**Description:** Edit the current instruction by typing a sequence of one or more instructions. Cutter will automatically fetch a preview of the bytes that are constructing the instruction.
**Description:** Edit the current instruction by typing a sequence of one or more instructions. Iaito will automatically fetch a preview of the bytes that are constructing the instruction.
**Steps:** Right-click on an instruction and choose ``Edit -> Instruction``
Edit Bytes
----------------------------------------
**Description:** Edit the bytes of the current instruction by typing a sequence of bytes. Cutter will automatically disassemble a preview of the instructions that are create by the typed bytes.
**Description:** Edit the bytes of the current instruction by typing a sequence of bytes. Iaito will automatically disassemble a preview of the instructions that are create by the typed bytes.
**Steps:** Right-click on an instruction and choose ``Edit -> Bytes``
NOP Instruction
----------------------------------------
**Description:** Fill the content of the instruction with NOP instructions. Cutter will fill the instructions with NOP as the length of the bytes constructing the instruction.
**Description:** Fill the content of the instruction with NOP instructions. Iaito will fill the instructions with NOP as the length of the bytes constructing the instruction.
**Steps:** Right-click on an instruction and choose ``Edit -> Nop Instruction``
Reverse Jump
----------------------------------------
**Description:** On conditional jumps, Cutter will detect the inverted conditional instruction and will replace it. For example, from ``je`` to ``jne``.
**Description:** On conditional jumps, Iaito will detect the inverted conditional instruction and will replace it. For example, from ``je`` to ``jne``.
**Steps:** Right-click on an instruction and choose ``Edit -> Reverse Jump``
**Steps:** Right-click on an instruction and choose ``Edit -> Reverse Jump``
@@ -3,7 +3,7 @@ Set as Code\Data\String
Set as Code
----------------------------------------
**Description:** Set the current instruction to Code. This will force Cutter to display the current instruction as Code.
**Description:** Set the current instruction to Code. This will force Iaito to display the current instruction as Code.
**Steps:** Set as... -> Code
@@ -11,7 +11,7 @@ Set as Code
Set as String (auto-detect length)
----------------------------------------
**Description:** Set the current location to String. This will tell Cutter to treat the current address as a string and will auto-detect the length (e.g by looking for a string null-terminator).
**Description:** Set the current location to String. This will tell Iaito to treat the current address as a string and will auto-detect the length (e.g by looking for a string null-terminator).
**Steps:** Right click on an instruction and choose ``Set as... -> String... -> Auto-detect``
@@ -19,13 +19,13 @@ Set as String (auto-detect length)
Remove string definition
----------------------------------------
**Description:** Remove a defined string in this address. Cutter will then treat this location as a code.
**Description:** Remove a defined string in this address. Iaito will then treat this location as a code.
**Steps:** Right click on an instruction and choose ``Set as... -> String... -> Remove``.
Set as String (Advance dialog)
----------------------------------------
**Description:** Set the current location to String. This will open a String definition dialog in which the user will supply the length and the type (ASCII, UTF8, ...) of the string. Cutter will then treat the current address as the defined string.
**Description:** Set the current location to String. This will open a String definition dialog in which the user will supply the length and the type (ASCII, UTF8, ...) of the string. Iaito will then treat the current address as the defined string.
**Steps:** Right click on an instruction and choose ``Set as... -> String... -> Advanced``.
@@ -59,4 +59,4 @@ Set as data (Advanced)
**Steps:** Right click on an instruction and choose ``Set as... -> Data... -> ...``
**Shortcut:** :kbd:`*`
**Shortcut:** :kbd:`*`
@@ -54,7 +54,7 @@ Graph Layout Direction
Choose Graph Layout
----------------------------------------
**Description:** Choose the layout to be used by Cutter to display the Graph. Cutter supports the following Graph layout algorithms:
**Description:** Choose the layout to be used by Iaito to display the Graph. Iaito supports the following Graph layout algorithms:
- Grid narrow
- Grid medium
@@ -65,4 +65,4 @@ When Graphviz is installed, the following options are also available:
- Graphviz polyline
- Graphviz ortho
**Steps:** Right-click anywhere on the Graph view and choose a layout from the ``Layout`` sub-menu.
**Steps:** Right-click anywhere on the Graph view and choose a layout from the ``Layout`` sub-menu.
@@ -8,7 +8,7 @@ Hexdump Widget Context Menu
Bytes Per Row
----------------------------------------
**Description:** Select how many bytes should be displayed by Cutter in each row in the Hexdump widget.
**Description:** Select how many bytes should be displayed by Iaito in each row in the Hexdump widget.
Available options are:
- 1 byte
@@ -17,4 +17,4 @@ Available options are:
- 8 bytes
- 16 bytes
- 32 bytes
- Power of 2 (Auto)
- Power of 2 (Auto)
@@ -91,6 +91,6 @@ Show VTables
Show Zignatures
----------------------------------------
**Description:** Cutter has its own format of signatures, called Zignatures. This widget lists all the loaded Zignatures.
**Description:** Iaito has its own format of signatures, called Zignatures. This widget lists all the loaded Zignatures.
**Steps:** Windows -> Info... -> Zignatures
**Steps:** Windows -> Info... -> Zignatures
@@ -12,19 +12,19 @@ Start Debugging
Start Emulation
----------------------------------------
**Description:** Start an emulation session on the current loaded binary. Cutter supports emulation of different file formats. Unlike debugging, emulation isn't really executing the binary, but only emulating the instructions. This is very strong feature for analysis of self-contained functions or programs, to analyze cryptographic algorithms or to deobfuscate data. Emulation isn't limited by the running platform, so Linux files such as ELF can be emulated on Windows platforms, and DLL can be emulated on Linux.
**Description:** Start an emulation session on the current loaded binary. Iaito supports emulation of different file formats. Unlike debugging, emulation isn't really executing the binary, but only emulating the instructions. This is very strong feature for analysis of self-contained functions or programs, to analyze cryptographic algorithms or to deobfuscate data. Emulation isn't limited by the running platform, so Linux files such as ELF can be emulated on Windows platforms, and DLL can be emulated on Linux.
**Steps:** Debug -> Start emulation
Attach to Process
----------------------------------------
**Description:** Attach Cutter's debugger to a running process, instead of spawning a new process.
**Description:** Attach Iaito's debugger to a running process, instead of spawning a new process.
**Steps:** Debug -> Attach to process
Connect to a Remote Debugger
----------------------------------------
**Description:** Connect Cutter to a remote debugger such as GDB ot WinDbg by providing IP and Port of the remote debugger..
**Description:** Connect Iaito to a remote debugger such as GDB ot WinDbg by providing IP and Port of the remote debugger..
**Steps:** Debug -> Connect to a remote debugger
@@ -38,7 +38,7 @@ Step Into
Step Over
----------------------------------------
**Description:** Execute a single assembler instruction, stepping over functions and procedures. The functions will not be skipped and will be executed by Cutter. The execution will pause when reaching the instruction after the function call.
**Description:** Execute a single assembler instruction, stepping over functions and procedures. The functions will not be skipped and will be executed by Iaito. The execution will pause when reaching the instruction after the function call.
**Steps:** Debug -> Step over
@@ -25,6 +25,6 @@ Redo Seek
Preferences
----------------------------------------
**Description:** Open the preferences dialog to access and define Cutter's configurations.
**Description:** Open the preferences dialog to access and define Iaito's configurations.
**Steps:** Edit -> Preferences
**Steps:** Edit -> Preferences
@@ -1,9 +1,9 @@
File Menu
==============================
New Instance of Cutter
New Instance of Iaito
----------------------------------------
**Description:** Open a new instance of Cutter to start a new session. This option will open a new window of Cutter without exiting the current session.
**Description:** Open a new instance of Iaito to start a new session. This option will open a new window of Iaito without exiting the current session.
**Steps:** File -> New Window
@@ -11,8 +11,8 @@ New Instance of Cutter
Map a New File
----------------------------------------
**Description:** Cutter allows you to map the contents of other files into the same I/O space used to contain the loaded binary. The new contents can be placed at random or specific offsets.
Specifically, Cutter is able to open files and map portions of them at random or specific places in memory. It is the perfect basic tooling to reproduce an environment like a core file, a debug session, or a framework by also loading and mapping all the libraries and files the binary depends on.
**Description:** Iaito allows you to map the contents of other files into the same I/O space used to contain the loaded binary. The new contents can be placed at random or specific offsets.
Specifically, Iaito is able to open files and map portions of them at random or specific places in memory. It is the perfect basic tooling to reproduce an environment like a core file, a debug session, or a framework by also loading and mapping all the libraries and files the binary depends on.
**Steps:** File -> Map File
@@ -20,27 +20,27 @@ Specifically, Cutter is able to open files and map portions of them at random or
Import a PDB File
----------------------------------------
**Description:** Cutter allows you to load additional debugging information by loading external PDB files. Unlike other platforms, Cutter does not rely on Windows API to parse a PDB files, thus they can be loaded on any other supported platform like Linux or macOS.
**Description:** Iaito allows you to load additional debugging information by loading external PDB files. Unlike other platforms, Iaito does not rely on Windows API to parse a PDB files, thus they can be loaded on any other supported platform like Linux or macOS.
**Steps:** File -> Import PDB
Enable Write Mode
-----------------------
**Description:** This option will enable Write mode and allow you to patch and edit the binary on disk. **Please note** that when Write mode is enabled, each change you make to the binary in Cutter will be applied to the original file on disk. In order not to take unnecessary risks, consider using Cache mode instead.
**Description:** This option will enable Write mode and allow you to patch and edit the binary on disk. **Please note** that when Write mode is enabled, each change you make to the binary in Iaito will be applied to the original file on disk. In order not to take unnecessary risks, consider using Cache mode instead.
**Steps:** File -> Set mode -> Write mode
Enable Cache Mode
-----------------------
**Description:** This option will enable Cache mode and allow you to patch and edit the binary **without** applying the changes to the file on disk. Unlike in Write mode, in Cache mode, the changes you make to the binary in Cutter will not be applied to the original file on disk unless you specifically committing them using the "Commit changes" menu item. This is safer than using Write mode because there is no risk to lose important data.
**Description:** This option will enable Cache mode and allow you to patch and edit the binary **without** applying the changes to the file on disk. Unlike in Write mode, in Cache mode, the changes you make to the binary in Iaito will not be applied to the original file on disk unless you specifically committing them using the "Commit changes" menu item. This is safer than using Write mode because there is no risk to lose important data.
**Steps:** File -> Set mode -> Cache mode
Enable Read-Only Mode
------------------------
**Description:** This option is available when files are opened in Write or Cache modes. When Read-Only mode is enabled, no patches and editions to the file are allowed. This is the default mode for files in Cutter, unless specified otherwise by the user, by either enabling Write or Cache mode.
**Description:** This option is available when files are opened in Write or Cache modes. When Read-Only mode is enabled, no patches and editions to the file are allowed. This is the default mode for files in Iaito, unless specified otherwise by the user, by either enabling Write or Cache mode.
**Steps:** File -> Set mode -> Read-Only mode
@@ -78,7 +78,7 @@ Export to Code
Run a radare2 Script
----------------------------------------
**Description:** Cutter allows you to execute radare2 scripts to automate task or transfer information. Radare2 scripts are files that contain list of radare2 commands. The scripts can be created manually by you, or automatically generated by radare2 commands (which typically end with a star character. e.g. ``afl*``).
**Description:** Iaito allows you to execute radare2 scripts to automate task or transfer information. Radare2 scripts are files that contain list of radare2 commands. The scripts can be created manually by you, or automatically generated by radare2 commands (which typically end with a star character. e.g. ``afl*``).
Such a script can look like this:
@@ -90,9 +90,9 @@ Such a script can look like this:
**Steps:** File -> Run radare2 script
Quit Cutter
Quit Iaito
----------------------------------------
**Description:** Quit and exit your current session of Cutter. On exit, you'll be asked whether you want to save your session in order to avoid losing data.
**Description:** Quit and exit your current session of Iaito. On exit, you'll be asked whether you want to save your session in order to avoid losing data.
**Steps:** File -> Quit
@@ -3,18 +3,18 @@ Help Menu
About
----------------------------------------
**Description:** Learn more about Cutter. View the current version of the application, the installed plugins, the authors, building options, the license, and more.
**Description:** Learn more about Iaito. View the current version of the application, the installed plugins, the authors, building options, the license, and more.
**Steps:** Help -> About
Report an Issue
----------------------------------------
**Description:** Quickly report an issue to Cutter's GitHub repository. Clicking this option will navigate your browser to the new-issue page in Cutter's GitHub repository. It will also automatically fill relevant information inside the issue template.
**Description:** Quickly report an issue to Iaito's GitHub repository. Clicking this option will navigate your browser to the new-issue page in Iaito's GitHub repository. It will also automatically fill relevant information inside the issue template.
**Steps:** Help -> Report an issue
Documentation
---------------------------------------
**Description:** Clicking this option will open the user documentation of Cutter in your browser.
**Description:** Clicking this option will open the user documentation of Iaito in your browser.
**Steps:** Help -> Documentation
@@ -4,22 +4,22 @@ View Menu
Refresh Contents
----------------------------------------
**Description:** In some cases, not all the displayed information on Cutter's widgets will be up-to-date, for example - after defining a new function from the integrated radare2 console. By refreshing the contents, Cutter will fetch the most up to date information from the session and will update the different views.
**Description:** In some cases, not all the displayed information on Iaito's widgets will be up-to-date, for example - after defining a new function from the integrated radare2 console. By refreshing the contents, Iaito will fetch the most up to date information from the session and will update the different views.
***Note:** In the future, Cutter will be aware to any underlying change and will update everything automatically. This is currently a work-in-progress.*
***Note:** In the future, Iaito will be aware to any underlying change and will update everything automatically. This is currently a work-in-progress.*
**Steps:** View -> Refresh Contents
Reset to Default Layout
----------------------------------------
**Description:** Reset the current :doc:`layout</user-docs/preferences/layout>` to the default layout provided by Cutter.
**Description:** Reset the current :doc:`layout</user-docs/preferences/layout>` to the default layout provided by Iaito.
**Steps:** View -> Reset to default layout
Reset to Default Settings
----------------------------------------
**Description:** Reset the current settings to the default settings defined by Cutter.
**Description:** Reset the current settings to the default settings defined by Iaito.
**Steps:** View -> Reset Settings
@@ -3,7 +3,7 @@ Windows Menu
Show Dashboard
----------------------------------------
**Description:** Show the Dashboard panel. Cutter's dashboard contains basic information about the binary. On the Dashboard you can find:
**Description:** Show the Dashboard panel. Iaito's dashboard contains basic information about the binary. On the Dashboard you can find:
- File name
- Binary format (PE, ELF64, ...)
- Bits (16, 32, 64, ...)
@@ -25,19 +25,19 @@ Show Dashboard
Show Functions
----------------------------------------
**Description:** Display the list of functions identified by Cutter. The list also contains information about each function such as name, address, size, and more. Some functions like Main, Entrypoint and external functions are highlighted with specific colors to make them easier to spot.
**Description:** Display the list of functions identified by Iaito. The list also contains information about each function such as name, address, size, and more. Some functions like Main, Entrypoint and external functions are highlighted with specific colors to make them easier to spot.
**Steps:** Windows -> Functions
Show Decompiler
----------------------------------------
**Description:** Cutter releases are shipped with two decompilers by default - [r2ghidra](https://github.com/radareorg/r2ghidra-dec) and [r2dec](https://github.com/radareorg/r2dec-js). The Decompiler view will display the decompilation of the current function. The widget is interactive and support address-syncing, renaming, re-typing and more. Cutter can be extended with more decompilers.
**Description:** Iaito releases are shipped with two decompilers by default - [r2ghidra](https://github.com/radareorg/r2ghidra-dec) and [r2dec](https://github.com/radareorg/r2dec-js). The Decompiler view will display the decompilation of the current function. The widget is interactive and support address-syncing, renaming, re-typing and more. Iaito can be extended with more decompilers.
**Steps:** Windows -> Decompiler
Graph Overview
----------------------------------------
**Description:** One of the main views of Cutter allows you to navigate inside functions in a graph mode. Graph overview will only display a zoomed-out form of the graph, and will help the user understand the flow of a function as a whole.
**Description:** One of the main views of Iaito allows you to navigate inside functions in a graph mode. Graph overview will only display a zoomed-out form of the graph, and will help the user understand the flow of a function as a whole.
**Steps:** Windows -> Graph Overview
@@ -75,7 +75,7 @@ Add a new instance of the Disassembly Widget
Add a new instance of the Graph Widget
----------------------------------------
**Description:** One of the main views of Cutter allows you to navigate inside functions in a graph mode. This view displays the flow of a function where each node on the graph represents a basic block in the function. The edges coming-to and getting-out of the blocks represent the control flow. The menu item will create a new instance of the Graph widget in order to view one or multiple locations at the same time.
**Description:** One of the main views of Iaito allows you to navigate inside functions in a graph mode. This view displays the flow of a function where each node on the graph represents a basic block in the function. The edges coming-to and getting-out of the blocks represent the control flow. The menu item will create a new instance of the Graph widget in order to view one or multiple locations at the same time.
**Steps:** Windows -> Add Graph
@@ -96,8 +96,8 @@ Show Comments
Show Console
----------------------------------------
**Description:** Open the integrated radare2 console. This will allow you to execute radare2 commands straight from Cutter.
**Description:** Open the integrated radare2 console. This will allow you to execute radare2 commands straight from Iaito.
**Steps:** Windows -> Console
**Shortcut:** :kbd:`:` or :kbd:`Ctrl` + :kbd:`\``
**Shortcut:** :kbd:`:` or :kbd:`Ctrl` + :kbd:`\``
@@ -3,7 +3,7 @@ Set Table Layout
Set Table Layout to Horizontal
----------------------------------------
**Description:** This option sets the layout of the current widget to Horizontal, in which each row contains one or more columns with relevant information (such as offset, size, name, etc). This is the default view in most of the widgets in Cutter.
**Description:** This option sets the layout of the current widget to Horizontal, in which each row contains one or more columns with relevant information (such as offset, size, name, etc). This is the default view in most of the widgets in Iaito.
**Steps:** Right-click on a widget title and select ``Horizontal``.
@@ -11,4 +11,4 @@ Set Table Layout to Vertical
----------------------------------------
**Description:** This option sets the layout of the current widget to Vertical, in which the items are displayed in a tree-like view, where every item can be expanded to view more information.
**Steps:** Right-click on a widget title and select ``Vertical``
**Steps:** Right-click on a widget title and select ``Vertical``
@@ -1,7 +1,7 @@
Analysis Options
================
Cutter will use the underlying radare2 analysis options to analyze a binary. These options are usually
Iaito will use the underlying radare2 analysis options to analyze a binary. These options are usually
configured when the binary is first loaded. However, they can be later changed using the Analysis
dialog, and a new analysis that takes these options into account can then be performed.
@@ -41,7 +41,7 @@ Try to name functions without symbols by using artifacts in the functions such a
Search for new functions following already defined functions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Cutter will check if there is a candidate for a new function following an already defined one, as the compiler usually
Iaito will check if there is a candidate for a new function following an already defined one, as the compiler usually
state them together. This option is taking the advantages of both Recursive Analysis and Linear Sweep into some kind of a hybrid mode. For each discovered function, the analysis will try to check for a function-prologue, usually following a gap of null bytes or ``cc`` bytes. This will help with discovering functions which are not referenced in the program. As such, it will make the analysis slower and prone to false-positives.
**Configuration variable:** ``anal.hasnext``
@@ -49,7 +49,7 @@ state them together. This option is taking the advantages of both Recursive Anal
Create references for unconditional jumps
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
When encountering unconditional jumps during the analysis, Cutter will add a code-reference even if it is not guaranteed
When encountering unconditional jumps during the analysis, Iaito will add a code-reference even if it is not guaranteed
that the jump will take place.
**Configuration variable:** ``anal.jmp.ref``
@@ -65,14 +65,14 @@ When encountering switch statements during analysis, continue and analyze the ta
Analyze ``push`` + ``ret`` as ``jmp``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
When performing analysis of a function, treat the sequence of ``push`` followed by ``ret`` instruction as a ``jmp``.
This can help Cutter to continue the analysis to target of the ``jmp``.
This can help Iaito to continue the analysis to target of the ``jmp``.
**Configuration variable:** ``anal.pushret``
Show verbose information when performing analysis
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
When enabled, Cutter will print warnings it encountered while preforming analysis. These warnings can help the user
When enabled, Iaito will print warnings it encountered while preforming analysis. These warnings can help the user
understand if anything went wrong in the analysis. This function is not only helpful when trying to perform a full
analysis of the program, but also when trying to analyze and define new functions.
@@ -1,9 +1,9 @@
Initialization Script
===================================
On the launch of Cutter, it loads ``.cutterrc`` files from various locations if they are present. The directories from where ``.cutterrc`` files are loaded are all directories of type ``QStandardPaths::AppConfigLocation``. These locations vary according to OS. You can visit `here <https://doc.qt.io/qt-5/qstandardpaths.html>`__ to see all the locations.
On the launch of Iaito, it loads ``.cutterrc`` files from various locations if they are present. The directories from where ``.cutterrc`` files are loaded are all directories of type ``QStandardPaths::AppConfigLocation``. These locations vary according to OS. You can visit `here <https://doc.qt.io/qt-5/qstandardpaths.html>`__ to see all the locations.
If multiple ``.cutterrc`` scripts are present in different directories, all of them will be loaded. In case of conflicting or contradictory commands, the corresponding command in the script loaded last will override all the previous commands. Cutter has a GUI editor for Initialization Script whose description is given below. The script from the editor will be the last loaded initialization script and hence will override all the previous scripts in the event of conflicting commands.
If multiple ``.cutterrc`` scripts are present in different directories, all of them will be loaded. In case of conflicting or contradictory commands, the corresponding command in the script loaded last will override all the previous commands. Iaito has a GUI editor for Initialization Script whose description is given below. The script from the editor will be the last loaded initialization script and hence will override all the previous scripts in the event of conflicting commands.
Initialization Script Editor
-----------------------------------
@@ -12,6 +12,6 @@ Initialization Script Editor
:alt: Image of Initialization Script Editor
**Description:** You can add new commands and modify existing commands here. To save the script, click on the ``Save`` button. If you want to see the changes you have made without restarting Cutter, you can use the ``Execute`` button. The hyperlink that shows the location of the script will open the directory containing the script on click.
**Description:** You can add new commands and modify existing commands here. To save the script, click on the ``Save`` button. If you want to see the changes you have made without restarting Iaito, you can use the ``Execute`` button. The hyperlink that shows the location of the script will open the directory containing the script on click.
**Steps to open:** ``Edit -> Preferences -> Initialization Script``
+1 -1
View File
@@ -2,7 +2,7 @@ Layout
======
The set of currently opened widgets, their placement, and some properties is grouped into layouts.
Cutter will automatically restore the last layout state when reopening Cutter. The last debug and normal layouts are stored separately.
Iaito will automatically restore the last layout state when reopening Iaito. The last debug and normal layouts are stored separately.
You can :ref:`save<user-docs/menus/menu-bar/view-menu:Save Layout>` multiple named layouts for different use cases.
Use :doc:`../menus/menu-bar/view-menu` to :ref:`save<user-docs/menus/menu-bar/view-menu:Save Layout>`,
:ref:`load<user-docs/menus/menu-bar/view-menu:Layouts>` or :ref:`user-docs/menus/menu-bar/view-menu:Reset to default layout`.
+1 -1
View File
@@ -1,7 +1,7 @@
Shortcuts
=========
This page regroups the common shortcuts available in Cutter.
This page regroups the common shortcuts available in Iaito.
Global Shortcuts
----------------
+4 -4
View File
@@ -33,9 +33,9 @@ def set_global_vars():
def win_dist(args):
os.makedirs(args.dist)
r2_meson_mod.copy(os.path.join(args.dir, 'r2cutter.exe'), args.dist)
r2_meson_mod.copy(os.path.join(args.dir, 'iaito.exe'), args.dist)
log.debug('Deploying Qt5')
subprocess.call(['windeployqt', '--release', os.path.join(args.dist, 'r2cutter.exe')])
subprocess.call(['windeployqt', '--release', os.path.join(args.dist, 'iaito.exe')])
log.debug('Deploying libr2')
r2_meson_mod.PATH_FMT.update(r2_meson_mod.R2_PATH)
r2_meson_mod.meson('install', options=[['-C', '{}'.format(args.dir)], '--no-rebuild'])
@@ -58,13 +58,13 @@ def build(args):
if args.backend == 'ninja':
r2_meson_mod.ninja(cutter_builddir)
else:
project = os.path.join(cutter_builddir, 'r2cutter.sln')
project = os.path.join(cutter_builddir, 'iaito.sln')
r2_meson_mod.msbuild(project, '/m')
def main():
set_global_vars()
parser = argparse.ArgumentParser(description='Meson script for r2cutter')
parser = argparse.ArgumentParser(description='Meson script for iaito')
parser.add_argument('--backend', choices=r2_meson_mod.BACKENDS,
default='ninja', help='Choose build backend')
parser.add_argument('--dir', default='build',
+4 -5
View File
@@ -12,15 +12,14 @@ IF !ERRORLEVEL! NEQ 0 (
SET "PATH=%CD%;%PATH%"
SET "R2DIST=r2_dist"
SET "R2V=5.2.1"
ECHO Downloading radare2 (%PLATFORM%)
rem CD radare2
rem powershell -command "Invoke-WebRequest 'https://github.com/radareorg/radare2/releases/download/5.1.0/radare2-5.1.0_windows.zip' -OutFile 'radare2-5.1.0_windows.zip'"
pip install wget
rem python -m wget -o radare2-5.1.0_windows.zip https://github.com/radareorg/radare2/releases/download/5.1.0/radare2-5.1.0_windows.zip
python -m wget -o radare2-5.1.0_w64.zip https://github.com/radareorg/radare2/releases/download/5.1.0/radare2-5.1.0_w64.zip
unzip radare2-5.1.0_w64.zip
python -m wget -o r2.zip https://github.com/radareorg/radare2/releases/download/%R2V%/radare2-%R2V%-w64.zip
unzip r2.zip
RMDIR /S /Q %R2DIST%
MOVE radare2-5.1.0_w64 %R2DIST%
MOVE radare2-%R2V%-w64 %R2DIST%
SET "PATH=%CD%\%R2DIST%\bin;%PATH%"
rem ECHO Building radare2 (%PLATFORM%)
+1 -1
Submodule radare2 updated: f80c847376...704d779cb2.
+2 -2
View File
@@ -6,7 +6,7 @@ import re
import atexit
if len(sys.argv) != 3:
print(f"usage: {sys.argv[0]} [Cutter.AppImage] [symbols dir]")
print(f"usage: {sys.argv[0]} [Iaito.AppImage] [symbols dir]")
exit(1)
root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
@@ -44,7 +44,7 @@ def kill_appimage():
atexit.register(kill_appimage)
mount_dir = appimage_p.stdout.readline().strip().decode("utf-8")
binaries = [ os.path.join(mount_dir, "usr/bin/Cutter") ]
binaries = [ os.path.join(mount_dir, "usr/bin/Iaito") ]
for f in os.scandir(os.path.join(mount_dir, "usr/lib")):
if f.is_dir() or f.is_symlink():
continue
+5 -5
View File
@@ -1,6 +1,6 @@
#!/bin/sh
#########
#### Push new translation files to cutter-translations
#### Push new translation files to iaito-translations
#### so Crowdin can fetch them
log() {
@@ -16,10 +16,10 @@ git submodule update translations
cd translations
git pull origin master
# Generate Crowdin single translation file from cutter_fr.ts
# Generate Crowdin single translation file from iaito_ca.ts
log "Generating single translation file"
lupdate ../Cutter.pro
cp ./fr/cutter_fr_FR.ts ./Translations.ts
lupdate ../Iaito.pro
cp ./ca/iaito_ca.ts ./Translations.ts
# Push it so Crowdin can find new strings, and later push updated translations
log "Committing..."
@@ -27,6 +27,6 @@ git add Translations.ts
git commit -m "Updated translations"
log "Pushing..."
export GIT_SSH_COMMAND="/usr/bin/ssh -i $TRAVIS_BUILD_DIR/scripts/deploy_translations_rsa"
git push "[email protected]:radareorg/cutter-translations.git" HEAD:refs/heads/master
git push "[email protected]:radareorg/iaito-translations.git" HEAD:refs/heads/master
log "Script done!"
+2 -2
View File
@@ -1,13 +1,13 @@
#!/bin/bash
if [ ! $# -eq 2 ]; then
echo "usage: $0 [Cutter.app] [dst]"
echo "usage: $0 [Iaito.app] [dst]"
exit 1
fi
appbundle="$1"
dst="$2"
files="$appbundle/Contents/MacOS/Cutter.bin $appbundle/Contents/Frameworks/Python.framework/Python $(find "$appbundle" -type f -name '*.dylib')"
files="$appbundle/Contents/MacOS/Iaito.bin $appbundle/Contents/Frameworks/Python.framework/Python $(find "$appbundle" -type f -name '*.dylib')"
mkdir -p "$dst" || exit 1
+4 -4
View File
@@ -3,7 +3,7 @@ import os
import re
scripts_path = os.path.dirname(os.path.realpath(__file__))
pro_file_path = os.path.join(scripts_path, "..", "src", "Cutter.pro")
pro_file_path = os.path.join(scripts_path, "..", "src", "Iaito.pro")
with open(pro_file_path, "r") as f:
pro_content = f.read()
@@ -11,13 +11,13 @@ with open(pro_file_path, "r") as f:
def version_var_re(name):
return "^[ \t]*{}[ \t]*=[ \t]*(\d+)[ \t]*$".format(name)
m = re.search(version_var_re("CUTTER_VERSION_MAJOR"), pro_content, flags=re.MULTILINE)
m = re.search(version_var_re("IAITO_VERSION_MAJOR"), pro_content, flags=re.MULTILINE)
version_major = int(m.group(1)) if m is not None else 0
m = re.search(version_var_re("CUTTER_VERSION_MINOR"), pro_content, flags=re.MULTILINE)
m = re.search(version_var_re("IAITO_VERSION_MINOR"), pro_content, flags=re.MULTILINE)
version_minor = int(m.group(1)) if m is not None else 0
m = re.search(version_var_re("CUTTER_VERSION_PATCH"), pro_content, flags=re.MULTILINE)
m = re.search(version_var_re("IAITO_VERSION_PATCH"), pro_content, flags=re.MULTILINE)
version_patch = int(m.group(1)) if m is not None else 0
print("{}.{}.{}".format(version_major, version_minor, version_patch))
+1 -1
View File
@@ -4,7 +4,7 @@ import sys
name = sys.argv[1]
value = []
root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
with open(os.path.join(root, 'src', 'Cutter.pro')) as f:
with open(os.path.join(root, 'src', 'Iaito.pro')) as f:
text = f.read()
text = text.replace('\\\n', '')
nbraces = 0
+98 -95
View File
@@ -8,46 +8,46 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(DisallowInSource)
include(Utils)
set(CUTTER_PYTHON_MIN 3.5)
set(IAITO_PYTHON_MIN 3.5)
option(CUTTER_USE_BUNDLED_RADARE2 "Use radare2 from src/radare2 submodule instead of searching for it on the system" OFF)
option(CUTTER_USE_ADDITIONAL_RADARE2_PATHS "Search radare2 in additional paths which are not part of default system library paths.\
option(IAITO_USE_BUNDLED_RADARE2 "Use radare2 from src/radare2 submodule instead of searching for it on the system" OFF)
option(IAITO_USE_ADDITIONAL_RADARE2_PATHS "Search radare2 in additional paths which are not part of default system library paths.\
Disable this option if you are linking against radare2 pacakged as proper system library or in a custom path and additional are paths causing problems." ON)
option(CUTTER_ENABLE_PYTHON "Enable Python integration. Requires Python >= ${CUTTER_PYTHON_MIN}." OFF)
option(CUTTER_ENABLE_PYTHON_BINDINGS "Enable generating Python bindings with Shiboken2. Unused if CUTTER_ENABLE_PYTHON=OFF." OFF)
option(CUTTER_ENABLE_CRASH_REPORTS "Enable crash report system. Unused if CUTTER_ENABLE_CRASH_REPORTS=OFF" OFF)
option(CUTTER_APPIMAGE_BUILD "Enable Appimage specific changes. Doesn't cause building of Appimage itself." OFF)
tri_option(CUTTER_ENABLE_KSYNTAXHIGHLIGHTING "Use KSyntaxHighlighting" AUTO)
tri_option(CUTTER_ENABLE_GRAPHVIZ "Enable use of graphviz for graph layout" AUTO)
option(IAITO_ENABLE_PYTHON "Enable Python integration. Requires Python >= ${IAITO_PYTHON_MIN}." OFF)
option(IAITO_ENABLE_PYTHON_BINDINGS "Enable generating Python bindings with Shiboken2. Unused if IAITO_ENABLE_PYTHON=OFF." OFF)
option(IAITO_ENABLE_CRASH_REPORTS "Enable crash report system. Unused if IAITO_ENABLE_CRASH_REPORTS=OFF" OFF)
option(IAITO_APPIMAGE_BUILD "Enable Appimage specific changes. Doesn't cause building of Appimage itself." OFF)
tri_option(IAITO_ENABLE_KSYNTAXHIGHLIGHTING "Use KSyntaxHighlighting" AUTO)
tri_option(IAITO_ENABLE_GRAPHVIZ "Enable use of graphviz for graph layout" AUTO)
set(SHIBOKEN_EXTRA_OPTIONS "" CACHE STRING "Extra options for shiboken generator")
set(CUTTER_EXTRA_PLUGIN_DIRS "" CACHE STRING "List of addition plugin locations")
option(CUTTER_ENABLE_DEPENDENCY_DOWNLOADS "Enable downloading of dependencies. Setting to OFF doesn't affect any downloads done by r2 build." OFF)
option(CUTTER_PACKAGE_DEPENDENCIES "During install step include the third party dependencies." OFF)
option(CUTTER_PACKAGE_R2GHIDRA "Compile and install r2ghidra during install step." OFF)
option(CUTTER_PACKAGE_R2DEC "Compile and install r2dec during install step." OFF)
OPTION(CUTTER_QT6 "Use QT6" OFF)
set(IAITO_EXTRA_PLUGIN_DIRS "" CACHE STRING "List of addition plugin locations")
option(IAITO_ENABLE_DEPENDENCY_DOWNLOADS "Enable downloading of dependencies. Setting to OFF doesn't affect any downloads done by r2 build." OFF)
option(IAITO_PACKAGE_DEPENDENCIES "During install step include the third party dependencies." OFF)
option(IAITO_PACKAGE_R2GHIDRA "Compile and install r2ghidra during install step." OFF)
option(IAITO_PACKAGE_R2DEC "Compile and install r2dec during install step." OFF)
OPTION(IAITO_QT6 "Use QT6" OFF)
if(NOT CUTTER_ENABLE_PYTHON)
set(CUTTER_ENABLE_PYTHON_BINDINGS OFF)
if(NOT IAITO_ENABLE_PYTHON)
set(IAITO_ENABLE_PYTHON_BINDINGS OFF)
endif()
# Parse Cutter.pro to get filenames
# Parse Iaito.pro to get filenames
include(QMakeProParse)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/Cutter.pro"
"${CMAKE_CURRENT_BINARY_DIR}/Cutter.pro"
COPYONLY) # trigger reconfigure if Cutter.pro changes
parse_qmake_pro("${CMAKE_CURRENT_BINARY_DIR}/Cutter.pro" CUTTER_PRO)
set(SOURCE_FILES ${CUTTER_PRO_SOURCES})
set(HEADER_FILES ${CUTTER_PRO_HEADERS})
set(UI_FILES ${CUTTER_PRO_FORMS})
set(QRC_FILES ${CUTTER_PRO_RESOURCES})
set(CUTTER_VERSION_MAJOR "${CUTTER_PRO_CUTTER_VERSION_MAJOR}")
set(CUTTER_VERSION_MINOR "${CUTTER_PRO_CUTTER_VERSION_MINOR}")
set(CUTTER_VERSION_PATCH "${CUTTER_PRO_CUTTER_VERSION_PATCH}")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/Iaito.pro"
"${CMAKE_CURRENT_BINARY_DIR}/Iaito.pro"
COPYONLY) # trigger reconfigure if Iaito.pro changes
parse_qmake_pro("${CMAKE_CURRENT_BINARY_DIR}/Iaito.pro" IAITO_PRO)
set(SOURCE_FILES ${IAITO_PRO_SOURCES})
set(HEADER_FILES ${IAITO_PRO_HEADERS})
set(UI_FILES ${IAITO_PRO_FORMS})
set(QRC_FILES ${IAITO_PRO_RESOURCES})
set(IAITO_VERSION_MAJOR "${IAITO_PRO_IAITO_VERSION_MAJOR}")
set(IAITO_VERSION_MINOR "${IAITO_PRO_IAITO_VERSION_MINOR}")
set(IAITO_VERSION_PATCH "${IAITO_PRO_IAITO_VERSION_PATCH}")
set(CUTTER_VERSION_FULL "${CUTTER_VERSION_MAJOR}.${CUTTER_VERSION_MINOR}.${CUTTER_VERSION_PATCH}")
set(IAITO_VERSION_FULL "${IAITO_VERSION_MAJOR}.${IAITO_VERSION_MINOR}.${IAITO_VERSION_PATCH}")
project(r2cutter VERSION "${CUTTER_VERSION_FULL}")
project(iaito VERSION "${IAITO_VERSION_FULL}")
set(CMAKE_CXX_STANDARD 11)
@@ -56,16 +56,16 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
if (CUTTER_QT6)
if (IAITO_QT6)
set(QT_PREFIX Qt6)
else()
set(QT_PREFIX Qt5)
endif()
find_package(${QT_PREFIX} REQUIRED COMPONENTS Core Widgets Gui Svg Network)
include(CutterInstallDirs)
include(IaitoInstallDirs)
if(CUTTER_USE_BUNDLED_RADARE2)
if(IAITO_USE_BUNDLED_RADARE2)
include(BundledRadare2)
set(RADARE2_TARGET Radare2)
else()
@@ -73,14 +73,14 @@ else()
set(RADARE2_TARGET Radare2::libr)
endif()
if(CUTTER_ENABLE_PYTHON)
if(IAITO_ENABLE_PYTHON)
find_package(PythonInterp REQUIRED)
find_package(PythonLibs ${CUTTER_PYTHON_MIN} REQUIRED)
find_package(PythonLibs ${IAITO_PYTHON_MIN} REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
add_definitions(-DCUTTER_ENABLE_PYTHON)
add_definitions(-DIAITO_ENABLE_PYTHON)
if(CUTTER_ENABLE_PYTHON_BINDINGS)
if(IAITO_ENABLE_PYTHON_BINDINGS)
# 5.12.3 => 5.12
if("${Qt5_VERSION}" MATCHES "^([0-9]+\\.[0-9]+)\\.[0-9]+")
set(Shiboken2_VERSION_REQUIRED "${CMAKE_MATCH_1}")
@@ -97,12 +97,12 @@ if(CUTTER_ENABLE_PYTHON)
${PYSIDE_INCLUDE_DIR}/QtGui
${PYSIDE_INCLUDE_DIR}/QtWidgets)
add_definitions(-DCUTTER_ENABLE_PYTHON_BINDINGS)
add_definitions(-DIAITO_ENABLE_PYTHON_BINDINGS)
endif()
endif()
if(CUTTER_ENABLE_KSYNTAXHIGHLIGHTING)
if(CUTTER_ENABLE_KSYNTAXHIGHLIGHTING STREQUAL AUTO)
if(IAITO_ENABLE_KSYNTAXHIGHLIGHTING)
if(IAITO_ENABLE_KSYNTAXHIGHLIGHTING STREQUAL AUTO)
find_package(KF5SyntaxHighlighting)
if(KF5SyntaxHighlighting_FOUND)
set(KSYNTAXHIGHLIGHTING_STATUS ON)
@@ -117,33 +117,33 @@ else()
set(KSYNTAXHIGHLIGHTING_STATUS OFF)
endif()
if (CUTTER_ENABLE_GRAPHVIZ)
if (CUTTER_ENABLE_GRAPHVIZ STREQUAL AUTO)
if (IAITO_ENABLE_GRAPHVIZ)
if (IAITO_ENABLE_GRAPHVIZ STREQUAL AUTO)
find_package(Graphviz)
else()
find_package(Graphviz REQUIRED)
endif()
set (CUTTER_ENABLE_GRAPHVIZ ${Graphviz_FOUND})
set (IAITO_ENABLE_GRAPHVIZ ${Graphviz_FOUND})
endif()
message(STATUS "")
message(STATUS "Building Cutter version ${CUTTER_VERSION_FULL}")
message(STATUS "Building Iaito version ${IAITO_VERSION_FULL}")
message(STATUS "Options:")
message(STATUS "- Bundled radare2: ${CUTTER_USE_BUNDLED_RADARE2}")
message(STATUS "- Python: ${CUTTER_ENABLE_PYTHON}")
message(STATUS "- Python Bindings: ${CUTTER_ENABLE_PYTHON_BINDINGS}")
message(STATUS "- Crash Handling: ${CUTTER_ENABLE_CRASH_REPORTS}")
message(STATUS "- Bundled radare2: ${IAITO_USE_BUNDLED_RADARE2}")
message(STATUS "- Python: ${IAITO_ENABLE_PYTHON}")
message(STATUS "- Python Bindings: ${IAITO_ENABLE_PYTHON_BINDINGS}")
message(STATUS "- Crash Handling: ${IAITO_ENABLE_CRASH_REPORTS}")
message(STATUS "- KSyntaxHighlighting: ${KSYNTAXHIGHLIGHTING_STATUS}")
message(STATUS "- Graphviz: ${CUTTER_ENABLE_GRAPHVIZ}")
message(STATUS "- Graphviz: ${IAITO_ENABLE_GRAPHVIZ}")
message(STATUS "")
include(QMakeConfigureFile)
qmake_configure_file("${CMAKE_CURRENT_SOURCE_DIR}/CutterConfig.h.in"
"${CMAKE_CURRENT_BINARY_DIR}/CutterConfig.h")
qmake_configure_file("${CMAKE_CURRENT_SOURCE_DIR}/IaitoConfig.h.in"
"${CMAKE_CURRENT_BINARY_DIR}/IaitoConfig.h")
if(CUTTER_ENABLE_PYTHON_BINDINGS)
if(IAITO_ENABLE_PYTHON_BINDINGS)
set(BINDINGS_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/bindings")
set(BINDINGS_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/bindings")
@@ -153,7 +153,7 @@ if(CUTTER_ENABLE_PYTHON_BINDINGS)
set_property(SOURCE ${BINDINGS_SOURCE} PROPERTY SKIP_AUTOGEN ON)
include_directories("${BINDINGS_BUILD_DIR}/CutterBindings")
include_directories("${BINDINGS_BUILD_DIR}/IaitoBindings")
set(SHIBOKEN_OPTIONS)
if (WIN32)
@@ -171,12 +171,12 @@ endif()
if (TARGET Graphviz::GVC)
list(APPEND SOURCE_FILES ${CUTTER_PRO_GRAPHVIZ_SOURCES})
list(APPEND HEADER_FILES ${CUTTER_PRO_GRAPHVIZ_HEADERS})
list(APPEND SOURCE_FILES ${IAITO_PRO_GRAPHVIZ_SOURCES})
list(APPEND HEADER_FILES ${IAITO_PRO_GRAPHVIZ_HEADERS})
endif()
if (WIN32)
set(PLATFORM_RESOURCES "img/r2cutter.rc")
set(PLATFORM_RESOURCES "img/iaito.rc")
else()
set(PLATFORM_RESOURCES "")
endif()
@@ -188,53 +188,53 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU"
endif()
add_executable(r2cutter MACOSX_BUNDLE ${UI_FILES} ${QRC_FILES} ${PLATFORM_RESOURCES} ${SOURCE_FILES} ${HEADER_FILES} ${BINDINGS_SOURCE})
set_target_properties(r2cutter PROPERTIES
add_executable(iaito MACOSX_BUNDLE ${UI_FILES} ${QRC_FILES} ${PLATFORM_RESOURCES} ${SOURCE_FILES} ${HEADER_FILES} ${BINDINGS_SOURCE})
set_target_properties(iaito PROPERTIES
ENABLE_EXPORTS ON
CXX_VISIBILITY_PRESET hidden
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/macos/Info.plist")
target_compile_definitions(r2cutter PRIVATE CUTTER_SOURCE_BUILD)
target_compile_definitions(iaito PRIVATE IAITO_SOURCE_BUILD)
set(CUTTER_INCLUDE_DIRECTORIES core widgets common plugins menus .)
foreach(_dir ${CUTTER_INCLUDE_DIRECTORIES})
target_include_directories(r2cutter PUBLIC
set(IAITO_INCLUDE_DIRECTORIES core widgets common plugins menus .)
foreach(_dir ${IAITO_INCLUDE_DIRECTORIES})
target_include_directories(iaito PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${_dir}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/cutter/${_dir}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/iaito/${_dir}>
)
endforeach()
if (TARGET Graphviz::GVC)
target_link_libraries(r2cutter PRIVATE Graphviz::GVC)
target_compile_definitions(r2cutter PRIVATE CUTTER_ENABLE_GRAPHVIZ)
target_link_libraries(iaito PRIVATE Graphviz::GVC)
target_compile_definitions(iaito PRIVATE IAITO_ENABLE_GRAPHVIZ)
endif()
if(CUTTER_ENABLE_CRASH_REPORTS)
if(IAITO_ENABLE_CRASH_REPORTS)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
target_link_libraries(r2cutter PRIVATE Threads::Threads)
target_link_libraries(iaito PRIVATE Threads::Threads)
add_definitions(-DCUTTER_ENABLE_CRASH_REPORTS)
add_definitions(-DIAITO_ENABLE_CRASH_REPORTS)
if (NOT WIN32)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g ")
endif()
find_package(Breakpad REQUIRED)
target_link_libraries(r2cutter PRIVATE Breakpad::client)
target_link_libraries(iaito PRIVATE Breakpad::client)
endif()
target_link_libraries(r2cutter PUBLIC ${QT_PREFIX}::Core ${QT_PREFIX}::Widgets ${QT_PREFIX}::Gui PRIVATE ${QT_PREFIX}::Svg ${QT_PREFIX}::Network)
target_link_libraries(r2cutter PUBLIC ${RADARE2_TARGET})
if(CUTTER_ENABLE_PYTHON)
target_link_libraries(iaito PUBLIC ${QT_PREFIX}::Core ${QT_PREFIX}::Widgets ${QT_PREFIX}::Gui PRIVATE ${QT_PREFIX}::Svg ${QT_PREFIX}::Network)
target_link_libraries(iaito PUBLIC ${RADARE2_TARGET})
if(IAITO_ENABLE_PYTHON)
if (WIN32)
# On windows some of the Python STABLE API functions are in seperate library
# which isn't added by CMake.
get_filename_component(_PYTHON_LIB_DIR ${PYTHON_LIBRARIES} DIRECTORY)
target_link_directories(r2cutter PRIVATE ${_PYTHON_LIB_DIR})
target_link_directories(iaito PRIVATE ${_PYTHON_LIB_DIR})
endif()
target_link_libraries(r2cutter PRIVATE ${PYTHON_LIBRARIES})
if(CUTTER_ENABLE_PYTHON_BINDINGS)
target_link_libraries(r2cutter PRIVATE Shiboken2::libshiboken PySide2::pyside2)
target_link_libraries(iaito PRIVATE ${PYTHON_LIBRARIES})
if(IAITO_ENABLE_PYTHON_BINDINGS)
target_link_libraries(iaito PRIVATE Shiboken2::libshiboken PySide2::pyside2)
get_target_property(RAW_BINDINGS_INCLUDE_DIRS r2cutter INCLUDE_DIRECTORIES)
get_target_property(RAW_BINDINGS_INCLUDE_DIRS iaito INCLUDE_DIRECTORIES)
set(BINDINGS_INCLUDE_DIRS "")
foreach(_dir ${RAW_BINDINGS_INCLUDE_DIRS})
string(REGEX REPLACE "\\$<BUILD_INTERFACE:(.*)>" "\\1" _dir ${_dir})
@@ -263,48 +263,51 @@ if(CUTTER_ENABLE_PYTHON)
endif()
if(TARGET KF5::SyntaxHighlighting)
target_link_libraries(r2cutter PRIVATE KF5::SyntaxHighlighting)
target_compile_definitions(r2cutter PRIVATE CUTTER_ENABLE_KSYNTAXHIGHLIGHTING)
target_link_libraries(iaito PRIVATE KF5::SyntaxHighlighting)
target_compile_definitions(iaito PRIVATE IAITO_ENABLE_KSYNTAXHIGHLIGHTING)
endif()
if (CUTTER_APPIMAGE_BUILD)
target_compile_definitions(r2cutter PRIVATE APPIMAGE)
if (IAITO_APPIMAGE_BUILD)
target_compile_definitions(iaito PRIVATE APPIMAGE)
endif()
if (CUTTER_PACKAGE_R2DEC)
target_compile_definitions(r2cutter PRIVATE CUTTER_APPVEYOR_R2DEC)
if (IAITO_PACKAGE_R2DEC)
target_compile_definitions(iaito PRIVATE IAITO_APPVEYOR_R2DEC)
endif()
include(Translations)
# Install files
install(TARGETS r2cutter
EXPORT r2cutterTargets
install(TARGETS iaito
EXPORT iaitoTargets
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
BUNDLE DESTINATION "." # needs to be tested
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT Devel
)
install(EXPORT r2cutterTargets
NAMESPACE r2cutter::
DESTINATION "${ConfigPackageLocation}"
install(EXPORT iaitoTargets
NAMESPACE iaito::
DESTINATION ${ConfigPackageLocation}
COMPONENT Devel)
install(FILES
cmake/r2cutterConfig.cmake
cmake/iaitoConfig.cmake
DESTINATION ${ConfigPackageLocation}
COMPONENT Devel
)
foreach(_file ${HEADER_FILES})
# Can't use target PUBLIC_HEADER option for installing due to multiple directories
get_filename_component(_header_dir "${_file}" DIRECTORY)
install (FILES "${_file}" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/r2cutter/${_header_dir}" COMPONENT Devel)
install (FILES "${_file}" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/iaito/${_header_dir}" COMPONENT Devel)
endforeach()
if(UNIX AND NOT APPLE)
install (FILES "img/r2cutter.svg"
install (FILES "img/iaito-o.svg"
DESTINATION "share/icons/hicolor/scalable/apps/")
install(FILES "org.radare.r2cutter.desktop"
DESTINATION "share/applications"
COMPONENT Devel)
install(FILES "org.radare.iaito.desktop"
DESTINATION "share/applications")
install(FILES "org.radare.iaito.appdata.xml"
DESTINATION "share/metainfo")
install(FILES "iaito.1"
DESTINATION "share/man/man1")
endif()
include(Packaging)
-13
View File
@@ -1,13 +0,0 @@
#ifndef CUTTER_CONFIG_H
#define CUTTER_CONFIG_H
#define CUTTER_VERSION_MAJOR $$CUTTER_VERSION_MAJOR
#define CUTTER_VERSION_MINOR $$CUTTER_VERSION_MINOR
#define CUTTER_VERSION_PATCH $$CUTTER_VERSION_PATCH
#define CUTTER_VERSION_FULL \"$${CUTTER_VERSION_MAJOR}.$${CUTTER_VERSION_MINOR}.$${CUTTER_VERSION_PATCH}\"
#define CUTTER_EXTRA_PLUGIN_DIRS \"$${CUTTER_EXTRA_PLUGIN_DIRS}\"
#endif
-11
View File
@@ -1,11 +0,0 @@
#ifndef CUTTER_CONFIG_H
#define CUTTER_CONFIG_H
#define CUTTER_VERSION_MAJOR @CUTTER_VERSION_MAJOR@
#define CUTTER_VERSION_MINOR @CUTTER_VERSION_MINOR@
#define CUTTER_VERSION_PATCH @CUTTER_VERSION_PATCH@
#define CUTTER_VERSION_FULL "@CUTTER_VERSION_MAJOR@.@CUTTER_VERSION_MINOR@.@CUTTER_VERSION_PATCH@"
#endif
File renamed without changes.
+109 -92
View File
@@ -1,98 +1,105 @@
TEMPLATE = app
TARGET = r2cutter
TARGET = iaito
CUTTER_VERSION_MAJOR = 0
CUTTER_VERSION_MINOR = 1
CUTTER_VERSION_PATCH = 0
IAITO_VERSION_MAJOR = 5
IAITO_VERSION_MINOR = 2
IAITO_VERSION_PATCH = 2
VERSION = $${CUTTER_VERSION_MAJOR}.$${CUTTER_VERSION_MINOR}.$${CUTTER_VERSION_PATCH}
CONFIG += sdk_no_version_check
VERSION = $${IAITO_VERSION_MAJOR}.$${IAITO_VERSION_MINOR}.$${IAITO_VERSION_PATCH}
# Required QT version
lessThan(QT_MAJOR_VERSION, 5): error("requires Qt 5")
# Doesnt build for Qt6 yet... but will do soon
TRANSLATIONS += translations/ar/cutter_ar.ts \
translations/ca/cutter_ca.ts \
translations/de/cutter_de.ts \
translations/es-ES/cutter_es.ts \
translations/fa/cutter_fa.ts \
translations/fr/cutter_fr.ts \
translations/he/cutter_he.ts \
translations/hi/cutter_hi.ts \
translations/it/cutter_it.ts \
translations/ja/cutter_ja.ts \
translations/nl/cutter_nl.ts \
translations/pt-PT/cutter_pt.ts \
translations/ro/cutter_ro.ts \
translations/ru/cutter_ru.ts \
translations/tr/cutter_tr.ts \
translations/zh-CN/cutter_zh.ts
TRANSLATIONS += translations/ar/iaito_ar.ts \
translations/ca/iaito_ca.ts \
translations/de/iaito_de.ts \
translations/es-ES/iaito_es.ts \
translations/eo/iaito_eo.ts \
translations/eu/iaito_eu.ts \
translations/fa/iaito_fa.ts \
translations/gl/iaito_gl.ts \
translations/fr/iaito_fr.ts \
translations/he/iaito_he.ts \
translations/hi/iaito_hi.ts \
translations/it/iaito_it.ts \
translations/ja/iaito_ja.ts \
translations/nl/iaito_nl.ts \
translations/pt-PT/iaito_pt.ts \
translations/ro/iaito_ro.ts \
translations/ru/iaito_ru.ts \
translations/tr/iaito_tr.ts \
translations/tp/iaito_tp.ts \
translations/zh-CN/iaito_zh.ts
# translations/ko/cutter_ko.ts problems with fonts
# translations/pt-BR/cutter_pt.ts #2321 handling multiple versions of a language
# translations/ko/iaito_ko.ts problems with fonts
# translations/pt-BR/iaito_pt.ts #2321 handling multiple versions of a language
# Icon for OS X
ICON = img/r2cutter.icns
ICON = img/iaito-o.icns
# Icon/resources for Windows
win32: RC_ICONS = img/r2cutter.ico
win32: RC_ICONS = img/iaito-o.ico
QT += core gui widgets svg network
QT_CONFIG -= no-pkg-config
CONFIG += c++11
!defined(CUTTER_ENABLE_CRASH_REPORTS, var) CUTTER_ENABLE_CRASH_REPORTS=false
equals(CUTTER_ENABLE_CRASH_REPORTS, true) CONFIG += CUTTER_ENABLE_CRASH_REPORTS
!defined(CUTTER_ENABLE_PYTHON, var) CUTTER_ENABLE_PYTHON=false
equals(CUTTER_ENABLE_PYTHON, true) CONFIG += CUTTER_ENABLE_PYTHON
!defined(IAITO_ENABLE_CRASH_REPORTS, var) IAITO_ENABLE_CRASH_REPORTS=false
equals(IAITO_ENABLE_CRASH_REPORTS, true) CONFIG += IAITO_ENABLE_CRASH_REPORTS
!defined(CUTTER_ENABLE_PYTHON_BINDINGS, var) CUTTER_ENABLE_PYTHON_BINDINGS=false
equals(CUTTER_ENABLE_PYTHON, true) {
equals(CUTTER_ENABLE_PYTHON_BINDINGS, true) {
CONFIG += CUTTER_ENABLE_PYTHON_BINDINGS
!defined(IAITO_ENABLE_PYTHON, var) IAITO_ENABLE_PYTHON=false
equals(IAITO_ENABLE_PYTHON, true) CONFIG += IAITO_ENABLE_PYTHON
!defined(IAITO_ENABLE_PYTHON_BINDINGS, var) IAITO_ENABLE_PYTHON_BINDINGS=false
equals(IAITO_ENABLE_PYTHON, true) {
equals(IAITO_ENABLE_PYTHON_BINDINGS, true) {
CONFIG += IAITO_ENABLE_PYTHON_BINDINGS
}
}
!defined(CUTTER_BUNDLE_R2_APPBUNDLE, var) CUTTER_BUNDLE_R2_APPBUNDLE=false
equals(CUTTER_BUNDLE_R2_APPBUNDLE, true) CONFIG += CUTTER_BUNDLE_R2_APPBUNDLE
!defined(IAITO_BUNDLE_R2_APPBUNDLE, var) IAITO_BUNDLE_R2_APPBUNDLE=false
equals(IAITO_BUNDLE_R2_APPBUNDLE, true) CONFIG += IAITO_BUNDLE_R2_APPBUNDLE
!defined(CUTTER_APPVEYOR_R2DEC, var) CUTTER_APPVEYOR_R2DEC=false
equals(CUTTER_APPVEYOR_R2DEC, true) CONFIG += CUTTER_APPVEYOR_R2DEC
!defined(IAITO_APPVEYOR_R2DEC, var) IAITO_APPVEYOR_R2DEC=false
equals(IAITO_APPVEYOR_R2DEC, true) CONFIG += IAITO_APPVEYOR_R2DEC
!defined(CUTTER_R2GHIDRA_STATIC, var) CUTTER_R2GHIDRA_STATIC=false
equals(CUTTER_R2GHIDRA_STATIC, true) CONFIG += CUTTER_R2GHIDRA_STATIC
!defined(IAITO_R2GHIDRA_STATIC, var) IAITO_R2GHIDRA_STATIC=false
equals(IAITO_R2GHIDRA_STATIC, true) CONFIG += IAITO_R2GHIDRA_STATIC
DEFINES += CUTTER_SOURCE_BUILD
DEFINES += IAITO_SOURCE_BUILD
CUTTER_ENABLE_CRASH_REPORTS {
IAITO_ENABLE_CRASH_REPORTS {
message("Crash report support enabled.")
DEFINES += CUTTER_ENABLE_CRASH_REPORTS
DEFINES += IAITO_ENABLE_CRASH_REPORTS
} else {
message("Crash report support disabled.")
}
CUTTER_ENABLE_PYTHON {
IAITO_ENABLE_PYTHON {
message("Python enabled.")
DEFINES += CUTTER_ENABLE_PYTHON
DEFINES += IAITO_ENABLE_PYTHON
} else {
message("Python disabled.")
}
CUTTER_ENABLE_PYTHON_BINDINGS {
IAITO_ENABLE_PYTHON_BINDINGS {
message("Python Bindings enabled.")
DEFINES += CUTTER_ENABLE_PYTHON_BINDINGS
DEFINES += IAITO_ENABLE_PYTHON_BINDINGS
} else {
message("Python Bindings disabled. (requires CUTTER_ENABLE_PYTHON=true)")
message("Python Bindings disabled. (requires IAITO_ENABLE_PYTHON=true)")
}
win32:defined(CUTTER_DEPS_DIR, var) {
!defined(SHIBOKEN_EXECUTABLE, var) SHIBOKEN_EXECUTABLE="$${CUTTER_DEPS_DIR}/pyside/bin/shiboken2.exe"
!defined(SHIBOKEN_INCLUDEDIR, var) SHIBOKEN_INCLUDEDIR="$${CUTTER_DEPS_DIR}/pyside/include/shiboken2"
!defined(SHIBOKEN_LIBRARY, var) SHIBOKEN_LIBRARY="$${CUTTER_DEPS_DIR}/pyside/lib/shiboken2.abi3.lib"
!defined(PYSIDE_INCLUDEDIR, var) PYSIDE_INCLUDEDIR="$${CUTTER_DEPS_DIR}/pyside/include/PySide2"
!defined(PYSIDE_LIBRARY, var) PYSIDE_LIBRARY="$${CUTTER_DEPS_DIR}/pyside/lib/pyside2.abi3.lib"
!defined(PYSIDE_TYPESYSTEMS, var) PYSIDE_TYPESYSTEMS="$${CUTTER_DEPS_DIR}/pyside/share/PySide2/typesystems"
win32:defined(IAITO_DEPS_DIR, var) {
!defined(SHIBOKEN_EXECUTABLE, var) SHIBOKEN_EXECUTABLE="$${IAITO_DEPS_DIR}/pyside/bin/shiboken2.exe"
!defined(SHIBOKEN_INCLUDEDIR, var) SHIBOKEN_INCLUDEDIR="$${IAITO_DEPS_DIR}/pyside/include/shiboken2"
!defined(SHIBOKEN_LIBRARY, var) SHIBOKEN_LIBRARY="$${IAITO_DEPS_DIR}/pyside/lib/shiboken2.abi3.lib"
!defined(PYSIDE_INCLUDEDIR, var) PYSIDE_INCLUDEDIR="$${IAITO_DEPS_DIR}/pyside/include/PySide2"
!defined(PYSIDE_LIBRARY, var) PYSIDE_LIBRARY="$${IAITO_DEPS_DIR}/pyside/lib/pyside2.abi3.lib"
!defined(PYSIDE_TYPESYSTEMS, var) PYSIDE_TYPESYSTEMS="$${IAITO_DEPS_DIR}/pyside/share/PySide2/typesystems"
}
INCLUDEPATH *= . core widgets dialogs common plugins menus
@@ -107,9 +114,9 @@ win32 {
}
macx {
QMAKE_CXXFLAGS = -mmacosx-version-min=10.7 -std=gnu0x -stdlib=libc++
QMAKE_CXXFLAGS = -mmacosx-version-min=10.7 -std=c++17 -stdlib=libc++
QMAKE_TARGET_BUNDLE_PREFIX = org.radare
QMAKE_BUNDLE = r2cutter
QMAKE_BUNDLE = iaito
QMAKE_INFO_PLIST = macos/Info.plist
}
@@ -117,6 +124,10 @@ unix:exists(/usr/local/include/libr)|bsd:exists(/usr/local/include/libr) {
INCLUDEPATH += /usr/local/include/libr
INCLUDEPATH += /usr/local/include/libr/sdb
}
unix:exists(/usr/include/libr) {
INCLUDEPATH += /usr/include/libr
INCLUDEPATH += /usr/include/libr/sdb
}
unix {
QMAKE_LFLAGS += -rdynamic # Export dynamic symbols for plugins
}
@@ -128,7 +139,7 @@ include(lib_radare2.pri)
CONFIG += link_pkgconfig
}
CUTTER_ENABLE_PYTHON {
IAITO_ENABLE_PYTHON {
win32 {
PYTHON_EXECUTABLE = $$system("where python", lines)
PYTHON_EXECUTABLE = $$first(PYTHON_EXECUTABLE)
@@ -151,7 +162,7 @@ CUTTER_ENABLE_PYTHON {
}
}
CUTTER_ENABLE_PYTHON_BINDINGS {
IAITO_ENABLE_PYTHON_BINDINGS {
isEmpty(SHIBOKEN_EXECUTABLE):!packagesExist(shiboken2) {
error("ERROR: Shiboken2, which is required to build the Python Bindings, could not be found. Make sure it is available to pkg-config.")
}
@@ -165,7 +176,7 @@ CUTTER_ENABLE_PYTHON {
}
BINDINGS_SRC_DIR = "$${PWD}/bindings"
BINDINGS_BUILD_DIR = "$${OUT_PWD}/bindings"
BINDINGS_SOURCE_DIR = "$${BINDINGS_BUILD_DIR}/CutterBindings"
BINDINGS_SOURCE_DIR = "$${BINDINGS_BUILD_DIR}/IaitoBindings"
BINDINGS_SOURCE = $$system("$${BINDINGS_SRC_LIST_CMD} qmake \"$${BINDINGS_BUILD_DIR}\"")
BINDINGS_INCLUDE_DIRS = "$$[QT_INSTALL_HEADERS]" \
"$$[QT_INSTALL_HEADERS]/QtCore" \
@@ -230,7 +241,7 @@ CUTTER_ENABLE_PYTHON {
# dummy rules to specify dependency between generated binding files and bindings_target
bindings_h.input = BINDINGS_DUMMY_INPUT_LIST
bindings_h.depends = bindings_target
bindings_h.output = cutterbindings_python.h
bindings_h.output = iaitobindings_python.h
bindings_h.commands = "echo placeholder command ${QMAKE_FILE_OUT}"
bindings_h.variable_out = HEADERS
QMAKE_EXTRA_COMPILERS += bindings_h
@@ -254,7 +265,7 @@ CUTTER_ENABLE_PYTHON {
}
}
CUTTER_ENABLE_CRASH_REPORTS {
IAITO_ENABLE_CRASH_REPORTS {
QMAKE_CXXFLAGS += -g
defined(BREAKPAD_FRAMEWORK_DIR, var)|defined(BREAKPAD_SOURCE_DIR, var) {
defined(BREAKPAD_FRAMEWORK_DIR, var) {
@@ -278,19 +289,19 @@ QMAKE_CXXFLAGS += -g
}
}
macx:CUTTER_BUNDLE_R2_APPBUNDLE {
macx:IAITO_BUNDLE_R2_APPBUNDLE {
message("Using r2 rom AppBundle")
DEFINES += MACOS_R2_BUNDLED
}
CUTTER_APPVEYOR_R2DEC {
IAITO_APPVEYOR_R2DEC {
message("Appveyor r2dec")
DEFINES += CUTTER_APPVEYOR_R2DEC
DEFINES += IAITO_APPVEYOR_R2DEC
}
CUTTER_R2GHIDRA_STATIC {
IAITO_R2GHIDRA_STATIC {
message("Building with static r2ghidra support")
DEFINES += CUTTER_R2GHIDRA_STATIC
DEFINES += IAITO_R2GHIDRA_STATIC
SOURCES += $$R2GHIDRA_SOURCE/cutter-plugin/R2GhidraDecompiler.cpp
HEADERS += $$R2GHIDRA_SOURCE/cutter-plugin/R2GhidraDecompiler.h
INCLUDEPATH += $$R2GHIDRA_SOURCE/cutter-plugin
@@ -298,11 +309,11 @@ CUTTER_R2GHIDRA_STATIC {
QMAKE_LFLAGS += /delayload:core_ghidra.dll
}
QMAKE_SUBSTITUTES += CutterConfig.h.in
QMAKE_SUBSTITUTES += IaitoConfig.h.in
SOURCES += \
Main.cpp \
core/Cutter.cpp \
core/Iaito.cpp \
dialogs/EditStringDialog.cpp \
dialogs/WriteCommandsDialogs.cpp \
widgets/DisassemblerGraphView.cpp \
@@ -363,11 +374,11 @@ SOURCES += \
widgets/TypesWidget.cpp \
widgets/HeadersWidget.cpp \
widgets/SearchWidget.cpp \
CutterApplication.cpp \
IaitoApplication.cpp \
common/PythonAPI.cpp \
dialogs/R2PluginsDialog.cpp \
widgets/CutterDockWidget.cpp \
widgets/CutterTreeWidget.cpp \
widgets/IaitoDockWidget.cpp \
widgets/IaitoTreeWidget.cpp \
widgets/GraphWidget.cpp \
widgets/OverviewWidget.cpp \
common/JsonTreeItem.cpp \
@@ -397,11 +408,11 @@ SOURCES += \
dialogs/SetToDataDialog.cpp \
dialogs/EditVariablesDialog.cpp \
dialogs/EditFunctionDialog.cpp \
widgets/CutterTreeView.cpp \
widgets/IaitoTreeView.cpp \
widgets/ComboQuickFilterView.cpp \
dialogs/HexdumpRangeDialog.cpp \
common/QtResImporter.cpp \
common/CutterSeekable.cpp \
common/IaitoSeekable.cpp \
common/RefreshDeferrer.cpp \
dialogs/WelcomeDialog.cpp \
common/RunScriptTask.cpp \
@@ -427,6 +438,9 @@ SOURCES += \
widgets/HexWidget.cpp \
common/SelectionHighlight.cpp \
common/Decompiler.cpp \
common/R2GhidraCmdDecompiler.cpp \
common/R2pdcCmdDecompiler.cpp \
common/R2retdecDecompiler.cpp \
menus/AddressableItemContextMenu.cpp \
common/AddressableItemModel.cpp \
widgets/ListDockWidget.cpp \
@@ -435,10 +449,10 @@ SOURCES += \
common/IOModesController.cpp \
common/SettingsUpgrade.cpp \
dialogs/LayoutManager.cpp \
common/CutterLayout.cpp \
common/IaitoLayout.cpp \
widgets/GraphHorizontalAdapter.cpp \
common/ResourcePaths.cpp \
widgets/CutterGraphView.cpp \
widgets/IaitoGraphView.cpp \
widgets/SimpleTextGraphView.cpp \
widgets/R2GraphWidget.cpp \
widgets/CallGraph.cpp \
@@ -450,9 +464,9 @@ GRAPHVIZ_SOURCES = \
widgets/GraphvizLayout.cpp
HEADERS += \
core/Cutter.h \
core/CutterCommon.h \
core/CutterDescriptions.h \
core/Iaito.h \
core/IaitoCommon.h \
core/IaitoDescriptions.h \
dialogs/EditStringDialog.h \
dialogs/WriteCommandsDialogs.h \
widgets/DisassemblerGraphView.h \
@@ -510,15 +524,15 @@ HEADERS += \
widgets/QuickFilterView.h \
widgets/ClassesWidget.h \
widgets/ResourcesWidget.h \
CutterApplication.h \
IaitoApplication.h \
widgets/VTablesWidget.h \
widgets/TypesWidget.h \
widgets/HeadersWidget.h \
widgets/SearchWidget.h \
common/PythonAPI.h \
dialogs/R2PluginsDialog.h \
widgets/CutterDockWidget.h \
widgets/CutterTreeWidget.h \
widgets/IaitoDockWidget.h \
widgets/IaitoTreeWidget.h \
widgets/GraphWidget.h \
widgets/OverviewWidget.h \
common/JsonTreeItem.h \
@@ -537,7 +551,7 @@ HEADERS += \
common/FunctionsTask.h \
common/CommandTask.h \
common/ProgressIndicator.h \
plugins/CutterPlugin.h \
plugins/IaitoPlugin.h \
common/R2Task.h \
dialogs/R2TaskDialog.h \
widgets/DebugActions.h \
@@ -552,11 +566,11 @@ HEADERS += \
common/InitialOptions.h \
dialogs/EditVariablesDialog.h \
dialogs/EditFunctionDialog.h \
widgets/CutterTreeView.h \
widgets/IaitoTreeView.h \
widgets/ComboQuickFilterView.h \
dialogs/HexdumpRangeDialog.h \
common/QtResImporter.h \
common/CutterSeekable.h \
common/IaitoSeekable.h \
common/RefreshDeferrer.h \
dialogs/WelcomeDialog.h \
common/RunScriptTask.h \
@@ -584,6 +598,9 @@ HEADERS += \
widgets/HexWidget.h \
common/SelectionHighlight.h \
common/Decompiler.h \
common/R2GhidraCmdDecompiler.h \
common/R2pdcCmdDecompiler.h \
common/R2retdecDecompiler.h \
menus/AddressableItemContextMenu.h \
common/AddressableItemModel.h \
widgets/ListDockWidget.h \
@@ -593,12 +610,12 @@ HEADERS += \
common/IOModesController.h \
common/SettingsUpgrade.h \
dialogs/LayoutManager.h \
common/CutterLayout.h \
common/IaitoLayout.h \
common/BinaryTrees.h \
common/LinkedListPool.h \
widgets/GraphHorizontalAdapter.h \
common/ResourcePaths.h \
widgets/CutterGraphView.h \
widgets/IaitoGraphView.h \
widgets/SimpleTextGraphView.h \
widgets/R2GraphWidget.h \
widgets/CallGraph.h \
@@ -660,7 +677,7 @@ FORMS += \
widgets/RegisterRefsWidget.ui \
dialogs/SetToDataDialog.ui \
dialogs/EditVariablesDialog.ui \
widgets/CutterTreeView.ui \
widgets/IaitoTreeView.ui \
widgets/ComboQuickFilterView.ui \
dialogs/HexdumpRangeDialog.ui \
dialogs/WelcomeDialog.ui \
@@ -683,7 +700,7 @@ RESOURCES += \
themes/lightstyle/light.qrc
DISTFILES += Cutter.astylerc
DISTFILES += Iaito.astylerc
# 'make install' for AppImage
unix {
@@ -691,18 +708,18 @@ unix {
PREFIX = /usr/local
}
icon_file = img/r2cutter.svg
icon_file = img/iaito-o.svg
share_pixmaps.path = $$PREFIX/share/pixmaps
share_pixmaps.files = $$icon_file
desktop_file = org.radare.r2cutter.desktop
desktop_file = org.radare.iaito.desktop
share_applications.path = $$PREFIX/share/applications
share_applications.files = $$desktop_file
appstream_file = org.radare.r2cutter.appdata.xml
appstream_file = org.radare.iaito.appdata.xml
# Used by ???
share_appdata.path = $$PREFIX/share/appdata
@@ -1,8 +1,11 @@
#include "common/PythonManager.h"
#include "common/CrashHandler.h"
#include "CutterApplication.h"
#include "IaitoApplication.h"
#include "plugins/PluginManager.h"
#include "CutterConfig.h"
#include "R2GhidraCmdDecompiler.h"
#include "R2pdcCmdDecompiler.h"
#include "R2retdecDecompiler.h"
#include "IaitoConfig.h"
#include "common/Decompiler.h"
#include "common/ResourcePaths.h"
@@ -26,22 +29,22 @@
#include <cstdlib>
#if CUTTER_R2GHIDRA_STATIC
#if IAITO_R2GHIDRA_STATIC
#include <R2GhidraDecompiler.h>
#endif
CutterApplication::CutterApplication(int &argc, char **argv) : QApplication(argc, argv)
IaitoApplication::IaitoApplication(int &argc, char **argv) : QApplication(argc, argv)
{
// Setup application information
setApplicationVersion(CUTTER_VERSION_FULL);
setWindowIcon(QIcon(":/img/r2cutter.svg"));
setApplicationVersion(IAITO_VERSION_FULL);
setWindowIcon(QIcon(":/img/iaito-o.svg"));
setAttribute(Qt::AA_UseHighDpiPixmaps);
setLayoutDirection(Qt::LeftToRight);
// WARN!!! Put initialization code below this line. Code above this line is mandatory to be run First
#ifdef Q_OS_WIN
// Hack to force Cutter load internet connection related DLL's
// Hack to force Iaito load internet connection related DLL's
QSslSocket s;
s.sslConfiguration();
#endif // Q_OS_WIN
@@ -52,12 +55,15 @@ CutterApplication::CutterApplication(int &argc, char **argv) : QApplication(argc
}
// Load fonts
int ret = QFontDatabase::addApplicationFont(":/fonts/Anonymous Pro.ttf");
int ret = QFontDatabase::addApplicationFont(":/fonts/AgaveRegular.ttf");
if (ret == -1) {
qWarning() << "Cannot load Agave Regular font.";
}
ret = QFontDatabase::addApplicationFont(":/fonts/AnonymousPro.ttf");
if (ret == -1) {
qWarning() << "Cannot load Anonymous Pro font.";
}
ret = QFontDatabase::addApplicationFont(":/fonts/Inconsolata-Regular.ttf");
ret = QFontDatabase::addApplicationFont(":/fonts/InconsolataRegular.ttf");
if (ret == -1) {
qWarning() << "Cannot load Incosolata-Regular font.";
}
@@ -77,20 +83,20 @@ CutterApplication::CutterApplication(int &argc, char **argv) : QApplication(argc
// Check r2 version
QString r2version = r_core_version();
QString localVersion = "" R2_GITTAP;
if (r2version != localVersion) {
if (localVersion != "" && r2version != "" && r2version != localVersion) {
QMessageBox msg;
msg.setIcon(QMessageBox::Critical);
msg.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msg.setWindowTitle(QObject::tr("Version mismatch!"));
msg.setText(QString(
QObject::tr("The version used to compile Cutter (%1) does not match the binary version of radare2 (%2). This could result in unexpected behaviour. Are you sure you want to continue?")).arg(
QObject::tr("The version used to compile Iaito (%1) does not match the binary version of radare2 (%2). This could result in unexpected behaviour. Are you sure you want to continue?")).arg(
localVersion, r2version));
if (msg.exec() == QMessageBox::No) {
std::exit(1);
}
}
#ifdef CUTTER_ENABLE_PYTHON
#ifdef IAITO_ENABLE_PYTHON
// Init python
if (!clOptions.pythonHome.isEmpty()) {
Python()->setPythonHome(clOptions.pythonHome);
@@ -106,19 +112,28 @@ CutterApplication::CutterApplication(int &argc, char **argv) : QApplication(argc
Core()->initialize(clOptions.enableR2Plugins);
Core()->setSettings();
Config()->loadInitial();
Core()->loadCutterRC();
Core()->loadIaitoRC();
Config()->setOutputRedirectionEnabled(clOptions.outputRedirectionEnabled);
if (R2pdcCmdDecompiler::isAvailable()) {
Core()->registerDecompiler(new R2pdcCmdDecompiler(Core()));
}
if (R2retdecDecompiler::isAvailable()) {
Core()->registerDecompiler(new R2retdecDecompiler(Core()));
}
if (R2DecDecompiler::isAvailable()) {
Core()->registerDecompiler(new R2DecDecompiler(Core()));
}
if (R2GhidraCmdDecompiler::isAvailable()) {
Core()->registerDecompiler(new R2GhidraCmdDecompiler(Core()));
}
#if CUTTER_R2GHIDRA_STATIC
#if IAITO_R2GHIDRA_STATIC
Core()->registerDecompiler(new R2GhidraDecompiler(Core()));
#endif
Plugins()->loadPlugins(clOptions.enableCutterPlugins);
Plugins()->loadPlugins(clOptions.enableIaitoPlugins);
for (auto &plugin : Plugins()->getPlugins()) {
plugin->registerDecompilers();
@@ -129,11 +144,11 @@ CutterApplication::CutterApplication(int &argc, char **argv) : QApplication(argc
// set up context menu shortcut display fix
#if QT_VERSION_CHECK(5, 10, 0) < QT_VERSION
setStyle(new CutterProxyStyle());
setStyle(new IaitoProxyStyle());
#endif // QT_VERSION_CHECK(5, 10, 0) < QT_VERSION
if (clOptions.args.empty()) {
// check if this is the first execution of Cutter in this computer
// check if this is the first execution of Iaito in this computer
// Note: the execution after the preferences been reset, will be considered as first-execution
if (Config()->isFirstExecution()) {
mainWindow->displayWelcomeDialog();
@@ -176,7 +191,7 @@ CutterApplication::CutterApplication(int &argc, char **argv) : QApplication(argc
}
#endif
#ifdef CUTTER_APPVEYOR_R2DEC
#ifdef IAITO_APPVEYOR_R2DEC
qputenv("R2DEC_HOME", "lib\\plugins\\r2dec-js");
#endif
#ifdef Q_OS_WIN
@@ -189,22 +204,22 @@ CutterApplication::CutterApplication(int &argc, char **argv) : QApplication(argc
#endif
}
CutterApplication::~CutterApplication()
IaitoApplication::~IaitoApplication()
{
Plugins()->destroyPlugins();
delete mainWindow;
#ifdef CUTTER_ENABLE_PYTHON
#ifdef IAITO_ENABLE_PYTHON
Python()->shutdown();
#endif
}
void CutterApplication::launchNewInstance(const QStringList &args)
void IaitoApplication::launchNewInstance(const QStringList &args)
{
QProcess process(this);
process.setEnvironment(QProcess::systemEnvironment());
QStringList allArgs;
if (!clOptions.enableCutterPlugins) {
allArgs.push_back("--no-cutter-plugins");
if (!clOptions.enableIaitoPlugins) {
allArgs.push_back("--no-iaito-plugins");
}
if (!clOptions.enableR2Plugins) {
allArgs.push_back("--no-r2-plugins");
@@ -213,7 +228,7 @@ void CutterApplication::launchNewInstance(const QStringList &args)
process.startDetached(qApp->applicationFilePath(), allArgs);
}
bool CutterApplication::event(QEvent *e)
bool IaitoApplication::event(QEvent *e)
{
if (e->type() == QEvent::FileOpen) {
QFileOpenEvent *openEvent = static_cast<QFileOpenEvent *>(e);
@@ -236,7 +251,7 @@ bool CutterApplication::event(QEvent *e)
return QApplication::event(e);
}
bool CutterApplication::loadTranslations()
bool IaitoApplication::loadTranslations()
{
const QString &language = Config()->getCurrLocale().bcp47Name();
if (language == QStringLiteral("en") || language.startsWith(QStringLiteral("en-"))) {
@@ -245,25 +260,26 @@ bool CutterApplication::loadTranslations()
const auto &allLocales = QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript,
QLocale::AnyCountry);
bool cutterTrLoaded = false;
bool iaitoTrLoaded = false;
for (const QLocale &it : allLocales) {
const QString &langPrefix = it.bcp47Name();
if (langPrefix == language) {
QApplication::setLayoutDirection(it.textDirection());
QLocale::setDefault(it);
QTranslator *trCutter = new QTranslator;
QTranslator *trIaito = new QTranslator;
QTranslator *trQtBase = new QTranslator;
QTranslator *trQt = new QTranslator;
const QStringList &cutterTrPaths = Cutter::getTranslationsDirectories();
const QStringList &cutterTrPaths = Iaito::getTranslationsDirectories();
for (const auto &trPath : cutterTrPaths) {
if (trCutter && trCutter->load(it, QLatin1String("cutter"), QLatin1String("_"), trPath)) {
installTranslator(trCutter);
cutterTrLoaded = true;
trCutter = nullptr;
if (trIaito && trIaito->load(it, QLatin1String("iaito"), QLatin1String("_"), trPath)) {
installTranslator(trIaito);
iaitoTrLoaded = true;
trIaito = nullptr;
}
if (trQt && trQt->load(it, "qt", "_", trPath)) {
installTranslator(trQt);
@@ -276,8 +292,8 @@ bool CutterApplication::loadTranslations()
}
}
if (trCutter) {
delete trCutter;
if (trIaito) {
delete trIaito;
}
if (trQt) {
delete trQt;
@@ -288,13 +304,13 @@ bool CutterApplication::loadTranslations()
return true;
}
}
if (!cutterTrLoaded) {
qWarning() << "Cannot load Cutter's translation for " << language;
if (!iaitoTrLoaded) {
qWarning() << "Cannot load Iaito's translation for " << language;
}
return false;
}
bool CutterApplication::parseCommandLineOptions()
bool IaitoApplication::parseCommandLineOptions()
{
// Keep this function in sync with documentation
@@ -331,6 +347,10 @@ bool CutterApplication::parseCommandLineOptions()
QObject::tr("Open file in write mode"));
cmd_parser.addOption(writeModeOption);
QCommandLineOption binCacheOption({"c", "bincache"},
QObject::tr("Enable bin.cache to make relocs work"));
cmd_parser.addOption(writeModeOption);
QCommandLineOption pythonHomeOption("pythonhome",
QObject::tr("PYTHONHOME to use for embedded python interpreter"),
@@ -348,9 +368,9 @@ bool CutterApplication::parseCommandLineOptions()
QObject::tr("Do not load plugins"));
cmd_parser.addOption(disablePlugins);
QCommandLineOption disableCutterPlugins("no-cutter-plugins",
QObject::tr("Do not load Cutter plugins"));
cmd_parser.addOption(disableCutterPlugins);
QCommandLineOption disableIaitoPlugins("no-iaito-plugins",
QObject::tr("Do not load Iaito plugins"));
cmd_parser.addOption(disableIaitoPlugins);
QCommandLineOption disableR2Plugins("no-r2-plugins",
QObject::tr("Do not load radare2 plugins"));
@@ -358,7 +378,7 @@ bool CutterApplication::parseCommandLineOptions()
cmd_parser.process(*this);
CutterCommandLineOptions opts;
IaitoCommandLineOptions opts;
opts.args = cmd_parser.positionalArguments();
if (cmd_parser.isSet(analOption)) {
@@ -424,12 +444,12 @@ bool CutterApplication::parseCommandLineOptions()
opts.outputRedirectionEnabled = !cmd_parser.isSet(disableRedirectOption);
if (cmd_parser.isSet(disablePlugins)) {
opts.enableCutterPlugins = false;
opts.enableIaitoPlugins = false;
opts.enableR2Plugins = false;
}
if (cmd_parser.isSet(disableCutterPlugins)) {
opts.enableCutterPlugins = false;
if (cmd_parser.isSet(disableIaitoPlugins)) {
opts.enableIaitoPlugins = false;
}
if (cmd_parser.isSet(disableR2Plugins)) {
@@ -441,7 +461,7 @@ bool CutterApplication::parseCommandLineOptions()
}
void CutterProxyStyle::polish(QWidget *widget)
void IaitoProxyStyle::polish(QWidget *widget)
{
QProxyStyle::polish(widget);
#if QT_VERSION_CHECK(5, 10, 0) < QT_VERSION
@@ -1,5 +1,5 @@
#ifndef CUTTERAPPLICATION_H
#define CUTTERAPPLICATION_H
#ifndef IAITOAPPLICATION_H
#define IAITOAPPLICATION_H
#include <QEvent>
#include <QApplication>
@@ -12,23 +12,23 @@ enum class AutomaticAnalysisLevel {
Ask, None, AAA, AAAA
};
struct CutterCommandLineOptions {
struct IaitoCommandLineOptions {
QStringList args;
AutomaticAnalysisLevel analLevel = AutomaticAnalysisLevel::Ask;
InitialOptions fileOpenOptions;
QString pythonHome;
bool outputRedirectionEnabled = true;
bool enableCutterPlugins = true;
bool enableIaitoPlugins = true;
bool enableR2Plugins = true;
};
class CutterApplication : public QApplication
class IaitoApplication : public QApplication
{
Q_OBJECT
public:
CutterApplication(int &argc, char **argv);
~CutterApplication();
IaitoApplication(int &argc, char **argv);
~IaitoApplication();
MainWindow *getMainWindow()
{
@@ -53,14 +53,14 @@ private:
private:
bool m_FileAlreadyDropped;
MainWindow *mainWindow;
CutterCommandLineOptions clOptions;
IaitoCommandLineOptions clOptions;
};
/**
* @brief CutterProxyStyle is used to force shortcuts displaying in context menu
* @brief IaitoProxyStyle is used to force shortcuts displaying in context menu
*/
class CutterProxyStyle : public QProxyStyle
class IaitoProxyStyle : public QProxyStyle
{
Q_OBJECT
public:
@@ -70,4 +70,4 @@ public:
void polish(QWidget *widget) override;
};
#endif // CUTTERAPPLICATION_H
#endif // IAITOAPPLICATION_H
+13
View File
@@ -0,0 +1,13 @@
#ifndef IAITO_CONFIG_H
#define IAITO_CONFIG_H
#define IAITO_VERSION_MAJOR $$IAITO_VERSION_MAJOR
#define IAITO_VERSION_MINOR $$IAITO_VERSION_MINOR
#define IAITO_VERSION_PATCH $$IAITO_VERSION_PATCH
#define IAITO_VERSION_FULL \"$${IAITO_VERSION_MAJOR}.$${IAITO_VERSION_MINOR}.$${IAITO_VERSION_PATCH}\"
#define IAITO_EXTRA_PLUGIN_DIRS \"$${IAITO_EXTRA_PLUGIN_DIRS}\"
#endif
+11
View File
@@ -0,0 +1,11 @@
#ifndef IAITO_CONFIG_H
#define IAITO_CONFIG_H
#define IAITO_VERSION_MAJOR @IAITO_VERSION_MAJOR@
#define IAITO_VERSION_MINOR @IAITO_VERSION_MINOR@
#define IAITO_VERSION_PATCH @IAITO_VERSION_PATCH@
#define IAITO_VERSION_FULL "@IAITO_VERSION_MAJOR@.@IAITO_VERSION_MINOR@.@IAITO_VERSION_PATCH@"
#endif
+7 -7
View File
@@ -1,8 +1,8 @@
#include "CutterApplication.h"
#include "IaitoApplication.h"
#include "core/MainWindow.h"
#include "common/UpdateWorker.h"
#include "CutterConfig.h"
#include "IaitoConfig.h"
#include "common/CrashHandler.h"
#include "common/SettingsUpgrade.h"
@@ -71,9 +71,9 @@ int main(int argc, char *argv[])
qRegisterMetaType<QList<FunctionDescription>>();
QCoreApplication::setOrganizationName("radareorg");
QCoreApplication::setApplicationName("r2cutter");
QCoreApplication::setApplicationName("iaito");
Cutter::initializeSettings();
Iaito::initializeSettings();
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts); // needed for QtWebEngine inside Plugins
#ifdef Q_OS_WIN
@@ -83,12 +83,12 @@ int main(int argc, char *argv[])
#endif
#endif
CutterApplication a(argc, argv);
IaitoApplication a(argc, argv);
Cutter::migrateThemes();
Iaito::migrateThemes();
if (Config()->getAutoUpdateEnabled()) {
#if CUTTER_UPDATE_WORKER_AVAILABLE
#if IAITO_UPDATE_WORKER_AVAILABLE
UpdateWorker *updateWorker = new UpdateWorker;
QObject::connect(updateWorker, &UpdateWorker::checkComplete,
[=](const QVersionNumber &version, const QString & error) {
+6 -6
View File
@@ -1,14 +1,14 @@
#ifndef CUTTER_BINDINGS_H
#define CUTTER_BINDINGS_H
#ifndef IAITO_BINDINGS_H
#define IAITO_BINDINGS_H
// #define QT_ANNOTATE_ACCESS_SPECIFIER(a) __attribute__((annotate(#a)))
#include "../core/Cutter.h"
#include "../core/Iaito.h"
#include "../common/Configuration.h"
#include "../core/MainWindow.h"
#include "../widgets/CutterDockWidget.h"
#include "../plugins/CutterPlugin.h"
#include "../widgets/IaitoDockWidget.h"
#include "../plugins/IaitoPlugin.h"
#include "../menus/AddressableItemContextMenu.h"
#endif //CUTTER_BINDINGS_H
#endif //IAITO_BINDINGS_H
+4 -4
View File
@@ -1,12 +1,12 @@
<?xml version="1.0"?>
<typesystem package="CutterBindings">
<typesystem package="IaitoBindings">
<load-typesystem name="typesystem_core.xml" generate="no" />
<load-typesystem name="typesystem_gui.xml" generate="no" />
<load-typesystem name="typesystem_widgets.xml" generate="no" />
<primitive-type name="bool"/>
<object-type name="CutterCore">
<object-type name="IaitoCore">
</object-type>
<object-type name="Configuration" />
<object-type name="MainWindow" >
@@ -15,7 +15,7 @@
</object-type>
<object-type name="BasicBlockHighlighter" />
<object-type name="AddressableItemContextMenu" />
<object-type name="CutterDockWidget" />
<object-type name="IaitoDockWidget" />
<template name="plugin_meta_get">
SbkObject *wrapper = Shiboken::BindingManager::instance().retrieveWrapper(this);
@@ -38,7 +38,7 @@
pythonToCpp(pyResult, &amp;cppResult);
return cppResult;
</template>
<object-type name="CutterPlugin">
<object-type name="IaitoPlugin">
<modify-function signature="getName()const">
<inject-code class="shell" position="beginning">
<insert-template name="plugin_meta_get">
+1 -1
View File
@@ -17,4 +17,4 @@ bindings_txt = configure_file(input: 'bindings.txt.in',
bindings_h = files('bindings.h')
subdir('CutterBindings')
subdir('IaitoBindings')
+1 -1
View File
@@ -54,7 +54,7 @@ target_include_directories(Radare2 INTERFACE
"$<BUILD_INTERFACE:${Radare2_INCLUDE_DIRS}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/libr>")
install(TARGETS Radare2 EXPORT r2cutterTargets)
install(TARGETS Radare2 EXPORT iaitoTargets)
if (APPLE)
elseif (WIN32)
foreach(_lib ${R2_LIBS} ${R2_EXTRA_LIBS})
+2 -2
View File
@@ -84,7 +84,7 @@ if(WIN32)
set(Radare2_TARGET Radare2::libr)
else()
# support installation locations used by r2 scripts like sys/user.sh and sys/install.sh
if(CUTTER_USE_ADDITIONAL_RADARE2_PATHS)
if(IAITO_USE_ADDITIONAL_RADARE2_PATHS)
set(Radare2_CMAKE_PREFIX_PATH_TEMP ${CMAKE_PREFIX_PATH})
list(APPEND CMAKE_PREFIX_PATH "$ENV{HOME}/bin/prefix/radare2") # sys/user.sh
list(APPEND CMAKE_PREFIX_PATH "/usr/local") # sys/install.sh
@@ -98,7 +98,7 @@ else()
endif()
# reset CMAKE_PREFIX_PATH
if(CUTTER_USE_ADDITIONAL_RADARE2_PATHS)
if(IAITO_USE_ADDITIONAL_RADARE2_PATHS)
set(CMAKE_PREFIX_PATH ${Radare2_CMAKE_PREFIX_PATH_TEMP})
endif()
Loaded 100 of 403 files, more files were not shown because too many files have changed in this diff. Show more