├── release_version.txt ├── .gitignore ├── docs ├── 1.png ├── RUN.md └── BUILD.md ├── icons ├── main.icns └── main.ico ├── mascots ├── mascot.png └── XOpcodeCalc.png ├── xopcodecalc_source.pro ├── .github └── FUNDING.yml ├── images └── thanks │ ├── hmstk.png │ ├── AliHadi.png │ ├── Dan0xE.png │ ├── clayne.png │ ├── elastic.png │ ├── phithon.png │ ├── rmusser.png │ ├── AdricNet.png │ ├── DavClark.png │ ├── FrenchYeti.png │ ├── GiladReich.png │ ├── JoaoVitor.png │ ├── SpriteOvO.png │ ├── fr0zenbag.png │ ├── misonothx.png │ ├── sapdragon.png │ ├── AdamHenault.png │ ├── DavidZimmer.png │ ├── FilipNavara.png │ ├── IntegralTech.png │ ├── JasonJackTan.png │ ├── LeandroFroes.png │ ├── miT231-spec.png │ ├── AndersonLeite.png │ ├── DuncanOgilvie.png │ ├── FernandoMerces.png │ ├── clayne.json │ ├── JoaoVitor.json │ ├── SpriteOvO.json │ ├── fr0zenbag.json │ ├── misonothx.json │ ├── sapdragon.json │ ├── hmstk.json │ ├── AdricNet.json │ ├── GiladReich.json │ ├── JasonJackTan.json │ ├── miT231-spec.json │ ├── FrenchYeti.json │ ├── Dan0xE.json │ ├── FilipNavara.json │ ├── elastic.json │ ├── phithon.json │ ├── AdamHenault.json │ ├── DavidZimmer.json │ ├── LeandroFroes.json │ ├── AliHadi.json │ ├── rmusser.json │ ├── DavClark.json │ ├── DuncanOgilvie.json │ ├── IntegralTech.json │ ├── AndersonLeite.json │ └── FernandoMerces.json ├── gui_source ├── images │ └── main.png ├── resources.qrc ├── CMakeLists.txt ├── dialogabout.h ├── modevalidator.h ├── dialogabout.ui ├── dialogoptions.h ├── dialogoptions.cpp ├── windows.manifest.xml ├── main_gui.cpp ├── modevalidator.cpp ├── gui_source.pro ├── dialogoptions.ui ├── guimainwindow.h ├── dialogabout.cpp ├── guimainwindow.cpp └── guimainwindow.ui ├── LINUX ├── hicolor │ ├── 16x16 │ │ └── apps │ │ │ └── xopcodecalc.png │ ├── 20x20 │ │ └── apps │ │ │ └── xopcodecalc.png │ ├── 24x24 │ │ └── apps │ │ │ └── xopcodecalc.png │ ├── 32x32 │ │ └── apps │ │ │ └── xopcodecalc.png │ ├── 48x48 │ │ └── apps │ │ │ └── xopcodecalc.png │ └── 256x256 │ │ └── apps │ │ └── xopcodecalc.png ├── xocalc.desktop ├── control ├── control_Debian_11 ├── control_Ubuntu_21.04 └── control_Ubuntu_21.10 ├── CMakeLists.txt ├── .gitmodules ├── install.sh ├── changelog.txt ├── configure.ac ├── create_appimage.sh ├── LICENSE ├── README.md ├── asm ├── CMakeLists.txt ├── asm.h ├── gcc64.s ├── msvc64.asm ├── msvc32.asm └── gcc32.s ├── install.iss ├── global.h ├── PKGBUILD ├── THANKS.md └── asm_defs.h /release_version.txt: -------------------------------------------------------------------------------- 1 | 0.05 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.o 2 | config.log 3 | build/ 4 | .qmake.stash -------------------------------------------------------------------------------- /docs/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/docs/1.png -------------------------------------------------------------------------------- /icons/main.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/icons/main.icns -------------------------------------------------------------------------------- /icons/main.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/icons/main.ico -------------------------------------------------------------------------------- /mascots/mascot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/mascots/mascot.png -------------------------------------------------------------------------------- /xopcodecalc_source.pro: -------------------------------------------------------------------------------- 1 | TEMPLATE = subdirs 2 | 3 | SUBDIRS += gui_source 4 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: horsicq 4 | -------------------------------------------------------------------------------- /images/thanks/hmstk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/hmstk.png -------------------------------------------------------------------------------- /mascots/XOpcodeCalc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/mascots/XOpcodeCalc.png -------------------------------------------------------------------------------- /images/thanks/AliHadi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/AliHadi.png -------------------------------------------------------------------------------- /images/thanks/Dan0xE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/Dan0xE.png -------------------------------------------------------------------------------- /images/thanks/clayne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/clayne.png -------------------------------------------------------------------------------- /images/thanks/elastic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/elastic.png -------------------------------------------------------------------------------- /images/thanks/phithon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/phithon.png -------------------------------------------------------------------------------- /images/thanks/rmusser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/rmusser.png -------------------------------------------------------------------------------- /gui_source/images/main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/gui_source/images/main.png -------------------------------------------------------------------------------- /images/thanks/AdricNet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/AdricNet.png -------------------------------------------------------------------------------- /images/thanks/DavClark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/DavClark.png -------------------------------------------------------------------------------- /images/thanks/FrenchYeti.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/FrenchYeti.png -------------------------------------------------------------------------------- /images/thanks/GiladReich.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/GiladReich.png -------------------------------------------------------------------------------- /images/thanks/JoaoVitor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/JoaoVitor.png -------------------------------------------------------------------------------- /images/thanks/SpriteOvO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/SpriteOvO.png -------------------------------------------------------------------------------- /images/thanks/fr0zenbag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/fr0zenbag.png -------------------------------------------------------------------------------- /images/thanks/misonothx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/misonothx.png -------------------------------------------------------------------------------- /images/thanks/sapdragon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/sapdragon.png -------------------------------------------------------------------------------- /images/thanks/AdamHenault.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/AdamHenault.png -------------------------------------------------------------------------------- /images/thanks/DavidZimmer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/DavidZimmer.png -------------------------------------------------------------------------------- /images/thanks/FilipNavara.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/FilipNavara.png -------------------------------------------------------------------------------- /images/thanks/IntegralTech.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/IntegralTech.png -------------------------------------------------------------------------------- /images/thanks/JasonJackTan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/JasonJackTan.png -------------------------------------------------------------------------------- /images/thanks/LeandroFroes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/LeandroFroes.png -------------------------------------------------------------------------------- /images/thanks/miT231-spec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/miT231-spec.png -------------------------------------------------------------------------------- /images/thanks/AndersonLeite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/AndersonLeite.png -------------------------------------------------------------------------------- /images/thanks/DuncanOgilvie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/DuncanOgilvie.png -------------------------------------------------------------------------------- /images/thanks/FernandoMerces.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/images/thanks/FernandoMerces.png -------------------------------------------------------------------------------- /LINUX/hicolor/16x16/apps/xopcodecalc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/LINUX/hicolor/16x16/apps/xopcodecalc.png -------------------------------------------------------------------------------- /LINUX/hicolor/20x20/apps/xopcodecalc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/LINUX/hicolor/20x20/apps/xopcodecalc.png -------------------------------------------------------------------------------- /LINUX/hicolor/24x24/apps/xopcodecalc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/LINUX/hicolor/24x24/apps/xopcodecalc.png -------------------------------------------------------------------------------- /LINUX/hicolor/32x32/apps/xopcodecalc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/LINUX/hicolor/32x32/apps/xopcodecalc.png -------------------------------------------------------------------------------- /LINUX/hicolor/48x48/apps/xopcodecalc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/LINUX/hicolor/48x48/apps/xopcodecalc.png -------------------------------------------------------------------------------- /LINUX/hicolor/256x256/apps/xopcodecalc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/horsicq/XOpcodeCalc/master/LINUX/hicolor/256x256/apps/xopcodecalc.png -------------------------------------------------------------------------------- /gui_source/resources.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | images/main.png 4 | 5 | 6 | -------------------------------------------------------------------------------- /images/thanks/clayne.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "Christopher Layne", 4 | "website": "", 5 | "github": "clayne", 6 | "twitter": "", 7 | "avatar": "clayne.png" 8 | } 9 | } -------------------------------------------------------------------------------- /LINUX/xocalc.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Version=#VERSION# 3 | Type=Application 4 | Name=XOpcodeCalc 5 | Comment=Opcode calculator 6 | TryExec=xocalc 7 | Exec=xocalc 8 | Icon=xopcodecalc 9 | Terminal=false 10 | Categories=Development; 11 | -------------------------------------------------------------------------------- /images/thanks/JoaoVitor.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "João Vitor", 4 | "website": "http://joaovitor.gq", 5 | "github": "keowu", 6 | "twitter": "", 7 | "avatar": "JoaoVitor.png" 8 | } 9 | } -------------------------------------------------------------------------------- /images/thanks/SpriteOvO.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "SpriteOvO", 4 | "website": "", 5 | "github": "SpriteOvO", 6 | "twitter": "", 7 | "avatar": "SpriteOvO.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/fr0zenbag.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "fr0zenbag", 4 | "website": "", 5 | "github": "fr0zenbag", 6 | "twitter": "", 7 | "avatar": "fr0zenbag.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/misonothx.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "misonothx", 4 | "website": "", 5 | "github": "miso-xyz", 6 | "twitter": "", 7 | "avatar": "misonothx.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/sapdragon.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "sapdragon", 4 | "website": "", 5 | "github": "sapdragon", 6 | "twitter": "", 7 | "avatar": "sapdragon.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/hmstk.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "Derick Estrada", 4 | "website": "hamsteri.co", 5 | "github": "hmstk", 6 | "twitter": "", 7 | "avatar": "hmstk.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/AdricNet.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "Adric Net", 4 | "website": "http://dfirnotes.net", 5 | "github": "adricnet", 6 | "twitter": "dfirnotes", 7 | "avatar": "AdricNet.png" 8 | } 9 | } -------------------------------------------------------------------------------- /images/thanks/GiladReich.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "Gilad Reich", 4 | "website": "https://greich.com", 5 | "github": "giladreich", 6 | "twitter": "", 7 | "avatar": "GiladReich.png" 8 | } 9 | } -------------------------------------------------------------------------------- /images/thanks/JasonJackTan.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "Jason Jack Tan", 4 | "website": "", 5 | "github": "Perthys", 6 | "twitter": "", 7 | "avatar": "JasonJackTan.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/miT231-spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "miT231-spec", 4 | "website": "", 5 | "github": "miT231-spec", 6 | "twitter": "", 7 | "avatar": "miT231-spec.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/FrenchYeti.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "FrenchYeti", 4 | "website": "", 5 | "github": "FrenchYeti", 6 | "twitter": "frenchyeti", 7 | "avatar": "FrenchYeti.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/Dan0xE.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "Dan0xE", 4 | "website": "https://dev.to/ubervisor", 5 | "github": "Dan0xE", 6 | "twitter": "dan0xe", 7 | "avatar": "Dan0xE.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/FilipNavara.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "Filip Navara", 4 | "website": "", 5 | "github": "filipnavara", 6 | "twitter": "filipnavara", 7 | "avatar": "FilipNavara.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/elastic.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "elastic", 4 | "website": "https://www.elastic.co", 5 | "github": "elastic", 6 | "twitter": "elastic", 7 | "avatar": "elastic.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/phithon.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "phithon", 4 | "website": "https://www.leavesongs.com", 5 | "github": "phith0n", 6 | "twitter": "", 7 | "avatar": "phithon.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/AdamHenault.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "Adam Henault", 4 | "website": "http://adamhlt.com/", 5 | "github": "adamhlt", 6 | "twitter": "", 7 | "avatar": "AdamHenault.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/DavidZimmer.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "David Zimmer", 4 | "website": "http://sandsprite.com", 5 | "github": "dzzie", 6 | "twitter": "", 7 | "avatar": "DavidZimmer.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/LeandroFroes.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "Leandro Fróes", 4 | "website": "", 5 | "github": "leandrofroes", 6 | "twitter": "leandrofr0es", 7 | "avatar": "LeandroFroes.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/AliHadi.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "Ali Hadi", 4 | "website": "https://www.ashemery.com", 5 | "github": "ashemery", 6 | "twitter": "binaryz0ne", 7 | "avatar": "AliHadi.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/rmusser.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "Robert Musser", 4 | "website": "https://rmusser.net/", 5 | "github": "rmusser01", 6 | "twitter": "r_o_b_e_r_t_1", 7 | "avatar": "rmusser.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /LINUX/control: -------------------------------------------------------------------------------- 1 | Package: xopcodecalculator 2 | Version: #VERSION# 3 | Architecture: #ARCH# 4 | Maintainer: hors 5 | Depends: qt5-default, libqt5core5a, libqt5gui5, libqt5widgets5, libqt5dbus5 6 | Homepage: http://ntinfo.biz 7 | Description: x86/64 Opcode calculator 8 | -------------------------------------------------------------------------------- /LINUX/control_Debian_11: -------------------------------------------------------------------------------- 1 | Package: xopcodecalculator 2 | Version: #VERSION# 3 | Architecture: #ARCH# 4 | Maintainer: hors 5 | Depends: libqt5core5a, libqt5gui5, libqt5widgets5, libqt5dbus5 6 | Homepage: http://ntinfo.biz 7 | Description: x86/64 Opcode calculator 8 | -------------------------------------------------------------------------------- /LINUX/control_Ubuntu_21.04: -------------------------------------------------------------------------------- 1 | Package: xopcodecalculator 2 | Version: #VERSION# 3 | Architecture: #ARCH# 4 | Maintainer: hors 5 | Depends: libqt5core5a, libqt5gui5, libqt5widgets5, libqt5dbus5 6 | Homepage: http://ntinfo.biz 7 | Description: x86/64 Opcode calculator 8 | -------------------------------------------------------------------------------- /LINUX/control_Ubuntu_21.10: -------------------------------------------------------------------------------- 1 | Package: xopcodecalculator 2 | Version: #VERSION# 3 | Architecture: #ARCH# 4 | Maintainer: hors 5 | Depends: libqt5core5a, libqt5gui5, libqt5widgets5, libqt5dbus5 6 | Homepage: http://ntinfo.biz 7 | Description: x86/64 Opcode calculator 8 | -------------------------------------------------------------------------------- /images/thanks/DavClark.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "Dav Clark", 4 | "website": "https://www.linkedin.com/in/davclark", 5 | "github": "davclark", 6 | "twitter": "davclark", 7 | "avatar": "DavClark.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/DuncanOgilvie.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "Duncan Ogilvie", 4 | "website": "http://mrexodia.re", 5 | "github": "mrexodia", 6 | "twitter": "mrexodia", 7 | "avatar": "DuncanOgilvie.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/IntegralTech.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "Integral-Tech", 4 | "website": "https://integral.org.cn/", 5 | "github": "Integral-Tech", 6 | "twitter": "", 7 | "avatar": "IntegralTech.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/AndersonLeite.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "Anderson Leite", 4 | "website": "https://reversing.codes", 5 | "github": "buzzer-re", 6 | "twitter": "buzz3r_", 7 | "avatar": "AndersonLeite.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /images/thanks/FernandoMerces.json: -------------------------------------------------------------------------------- 1 | { 2 | "data": { 3 | "name": "Fernando Mercês", 4 | "website": "https://www.mentebinaria.com.br", 5 | "github": "merces", 6 | "twitter": "mer0x36", 7 | "avatar": "FernandoMerces.png" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /docs/RUN.md: -------------------------------------------------------------------------------- 1 | # Instructions to run XOpcodeCalc 2 | 3 | ## Portable Version on Linux 4 | Download an [appImage file](https://github.com/horsicq/XOpcodeCalc/releases/download/0.05/XOpcodeCalc-0.05-x86_64.AppImage) 5 | 6 | Make the file executable 7 | ```bash 8 | chmod +x XOpcodeCalc-0.05-x86_64.AppImage 9 | ``` 10 | 11 | Run it 12 | ```bash 13 | ./XOpcodeCalc-0.05-x86_64.AppImage 14 | ``` 15 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.10) 2 | 3 | project(MainProject) 4 | 5 | if(WIN32) 6 | set (CMAKE_PREFIX_PATH "C:/Qt/5.15.2/msvc2019/") 7 | endif() 8 | 9 | if(APPLE) 10 | set (CMAKE_PREFIX_PATH $ENV{HOME}/Qt/5.15.2/clang_64/) 11 | set (CMAKE_OSX_ARCHITECTURES x86_64) 12 | add_compile_options(-Wno-deprecated-declarations) 13 | add_compile_options(-Wno-switch) 14 | endif() 15 | 16 | add_subdirectory(asm) 17 | add_subdirectory(gui_source) 18 | install (DIRECTORY images DESTINATION ${CMAKE_INSTALL_LIBDIR}/xopcodecalc) 19 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "XOptions"] 2 | path = XOptions 3 | url = https://github.com/horsicq/XOptions 4 | [submodule "build_tools"] 5 | path = build_tools 6 | url = https://github.com/horsicq/build_tools 7 | [submodule "XAboutWidget"] 8 | path = XAboutWidget 9 | url = https://github.com/horsicq/XAboutWidget 10 | [submodule "XUpdate"] 11 | path = XUpdate 12 | url = https://github.com/horsicq/XUpdate 13 | [submodule "XGithub"] 14 | path = XGithub 15 | url = https://github.com/horsicq/XGithub 16 | [submodule "Controls"] 17 | path = Controls 18 | url = https://github.com/horsicq/Controls 19 | [submodule "XShortcuts"] 20 | path = XShortcuts 21 | url = https://github.com/horsicq/XShortcuts 22 | -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -x 2 | export X_SOURCE_PATH=$PWD 3 | 4 | if [ -z "$1" ]; then 5 | X_PREFIX="/usr" 6 | else 7 | X_PREFIX="$1" 8 | fi 9 | 10 | mkdir -p $X_PREFIX/lib/bin 11 | mkdir -p $X_PREFIX/lib/share/applications 12 | mkdir -p $X_PREFIX/lib/share/icons 13 | mkdir -p $X_PREFIX/lib/xocalc 14 | mkdir -p $X_PREFIX/lib/xocalc/signatures 15 | 16 | cp -f $X_SOURCE_PATH/build/release/xocalc $X_PREFIX/bin/ 17 | cp -f $X_SOURCE_PATH/LINUX/xocalc.desktop $X_PREFIX/share/applications/ 18 | cp -Rf $X_SOURCE_PATH/LINUX/hicolor/ $X_PREFIX/share/icons/ 19 | cp -Rf $X_SOURCE_PATH/images/ $X_PREFIX/lib/xocalc/ 20 | -------------------------------------------------------------------------------- /changelog.txt: -------------------------------------------------------------------------------- 1 | 0.05 2 | ----------------------------------------------------------------------- 3 | [+] Bundle for Arch Linux 4 | [+] Bundle for Ubuntu 22.04 5 | [+] Many bugs have been fixed. 6 | ####################################################################### 7 | 0.04 8 | ----------------------------------------------------------------------- 9 | [+] Source code qt6 compatibility 10 | [+] New opcodes for 32 bit mode 11 | [+] CMAKE build system 12 | [+] Many bugs have been fixed. 13 | ####################################################################### 14 | 0.03 15 | ----------------------------------------------------------------------- 16 | [+] Qt 5.15.2 17 | [+] Linux AppImage 18 | [+] New opcodes 19 | [+] Autotools build system 20 | [+] PKG installer for OSX 21 | [+] Many bugs have been fixed. 22 | ####################################################################### 23 | 0.02 24 | ----------------------------------------------------------------------- 25 | [+] Many bugs have been fixed. 26 | ####################################################################### 27 | -------------------------------------------------------------------------------- /configure.ac: -------------------------------------------------------------------------------- 1 | AC_INIT([XOpcodeCalc], 0.05) 2 | AC_PROG_CC 3 | AC_LANG(C++) 4 | PKG_CHECK_MODULES(Qt5Core, [Qt5Core >= 5.2.0], [], [AC_MSG_ERROR([Qt5Core >= 5.2.0] is required.)]) 5 | PKG_CHECK_MODULES(Qt5Gui, [Qt5Gui >= 5.2.0], [], [AC_MSG_ERROR([Qt5Gui >= 5.2.0] is required.)]) 6 | PKG_CHECK_MODULES(Qt5Widgets, [Qt5Widgets >= 5.2.0], [], [AC_MSG_ERROR([Qt5Widgets >= 5.2.0] is required.)]) 7 | 8 | PKG_CHECK_EXISTS([Qt5Core >= 5.2.0],[PKG_CHECK_VAR(QT_QMAKE,[Qt5Core >= 5.2.0],[host_bins])]) 9 | 10 | AS_IF([test -f "$QT_QMAKE/qmake"],[QT_QMAKE="$QT_QMAKE/qmake"],[AS_IF([test -f "$QT_QMAKE/qmake-qt5"],[QT_QMAKE="$QT_QMAKE/qmake-qt5"],[QT_QMAKE=""])]) 11 | 12 | X_QMAKE_SPEC=$($QT_QMAKE -query QMAKE_SPEC) 13 | X_QT_VERSION=$($QT_QMAKE -query QT_VERSION) 14 | X_QT_PREFIX=${prefix} 15 | AC_MSG_NOTICE([Qt version: $X_QT_VERSION]) 16 | AC_MSG_NOTICE([Running qmake to generate the makefile...]) 17 | $QT_QMAKE "xopcodecalc_source.pro" -spec $X_QMAKE_SPEC 18 | 19 | AC_MSG_NOTICE([The configure finished. Please type "make" to compile the project.]) 20 | AS_ECHO() -------------------------------------------------------------------------------- /create_appimage.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -x 2 | export X_SOURCE_PATH=$PWD 3 | export X_RELEASE_VERSION=$(cat "release_version.txt") 4 | export VERSION=$X_RELEASE_VERSION 5 | 6 | source build_tools/linux.sh 7 | 8 | create_image_app_dir xocalc 9 | 10 | cp -f $X_SOURCE_PATH/build/release/xocalc $X_SOURCE_PATH/release/appDir/usr/bin/ 11 | cp -f $X_SOURCE_PATH/LINUX/xocalc.desktop $X_SOURCE_PATH/release/appDir/usr/share/applications/ 12 | sed -i "s/#VERSION#/1.0/" $X_SOURCE_PATH/release/appDir/usr/share/applications/xocalc.desktop 13 | cp -Rf $X_SOURCE_PATH/LINUX/hicolor/ $X_SOURCE_PATH/release/appDir/usr/share/icons/ 14 | cp -Rf $X_SOURCE_PATH/images/ $X_SOURCE_PATH/release/appDir/usr/lib/xocalc/ 15 | 16 | cd $X_SOURCE_PATH/release 17 | 18 | linuxdeployqt $X_SOURCE_PATH/release/appDir/usr/share/applications/xocalc.desktop -appimage -always-overwrite 19 | #mv *.AppImage xapkd_${X_RELEASE_VERSION}.AppImage 20 | 21 | cd $X_SOURCE_PATH 22 | 23 | rm -Rf $X_SOURCE_PATH/release/appDir 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019-2025 hors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=NF3FBD3KHMXDN) 2 | [![GitHub tag (latest SemVer)](https://img.shields.io/github/tag/horsicq/XOpcodeCalc.svg)](https://github.com/horsicq/XOpcodeCalc/releases) 3 | [![GitHub All Releases](https://img.shields.io/github/downloads/horsicq/XOpcodeCalc/total.svg)](https://github.com/horsicq/XOpcodeCalc/releases) 4 | 5 | x86/64 Opcode calculator. The program works on macOS, Linux and Windows. 6 | 7 | ![Opcode calculator logo](https://github.com/horsicq/XOpcodeCalc/blob/master/mascots/XOpcodeCalc.png "Mascot") 8 | 9 | * Download: https://github.com/horsicq/XOpcodeCalc/releases 10 | * How to run: https://github.com/horsicq/XOpcodeCalc/blob/master/docs/RUN.md 11 | * How to build: https://github.com/horsicq/XOpcodeCalc/blob/master/docs/BUILD.md 12 | * Changelog: https://github.com/horsicq/XOpcodeCalc/blob/master/changelog.txt 13 | 14 | ## Special Thanks 15 | 16 | - [PELock Software Protection & Reverse Engineering](https://www.pelock.com) 17 | 18 | ![Opcode calculator logo](https://github.com/horsicq/XOpcodeCalc/blob/master/mascots/mascot.png "Mascot") 19 | -------------------------------------------------------------------------------- /asm/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.10) 2 | 3 | if(MSVC) 4 | project(asm_lib LANGUAGES ASM_MASM) 5 | else() 6 | project(asm_lib LANGUAGES ASM) 7 | endif() 8 | #project(asm_lib LANGUAGES C) 9 | 10 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 11 | set(CMAKE_CXX_STANDARD 11) 12 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 13 | 14 | if(MSVC) 15 | if(CMAKE_SIZEOF_VOID_P EQUAL 8) 16 | add_library(asm_lib STATIC 17 | ${PROJECT_SOURCE_DIR}/msvc64.asm 18 | ) 19 | elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) 20 | add_library(asm_lib STATIC 21 | ${PROJECT_SOURCE_DIR}/msvc32.asm 22 | ) 23 | endif() 24 | else() 25 | if(CMAKE_SIZEOF_VOID_P EQUAL 8) 26 | add_library(asm_lib STATIC 27 | ${PROJECT_SOURCE_DIR}/gcc64.s 28 | ) 29 | elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) 30 | add_library(asm_lib STATIC 31 | ${PROJECT_SOURCE_DIR}/gcc32.s 32 | ) 33 | endif() 34 | endif() 35 | 36 | if(MSVC) 37 | set (CMAKE_PREFIX_PATH "C:/Qt/5.15.2/msvc2019/") 38 | endif() 39 | 40 | if(APPLE) 41 | set (CMAKE_PREFIX_PATH $ENV{HOME}/Qt/5.15.2/clang_64/) 42 | set (CMAKE_OSX_ARCHITECTURES x86_64) 43 | add_compile_options(-Wno-deprecated-declarations) 44 | add_compile_options(-Wno-switch) 45 | endif() 46 | 47 | set_target_properties(asm_lib PROPERTIES LINKER_LANGUAGE C) 48 | set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) 49 | -------------------------------------------------------------------------------- /install.iss: -------------------------------------------------------------------------------- 1 | #define MyAppName "XOpcodeCalc" 2 | #define MyAppVersion "0.05" 3 | #define MyAppPublisher "NTInfo" 4 | #define MyAppURL "ntinfo.biz" 5 | #define MyAppExeName "xocalc.exe" 6 | 7 | [Setup] 8 | AppId={{B6D752A4-E806-4D02-B2F9-0F187BC9D7AF} 9 | AppName={#MyAppName} 10 | AppVersion={#MyAppVersion} 11 | AppPublisher={#MyAppPublisher} 12 | AppPublisherURL={#MyAppURL} 13 | AppSupportURL={#MyAppURL} 14 | AppUpdatesURL={#MyAppURL} 15 | DefaultDirName={userpf}\{#MyAppName} 16 | DefaultGroupName={#MyAppName} 17 | OutputDir=release 18 | OutputBaseFilename=install 19 | Compression=lzma 20 | SolidCompression=yes 21 | LicenseFile=LICENSE 22 | PrivilegesRequired=lowest 23 | 24 | [Languages] 25 | Name: "english"; MessagesFile: "compiler:Default.isl" 26 | 27 | [Tasks] 28 | Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; 29 | 30 | [Files] 31 | Source: "release\xopcodecalc\*"; DestDir: "{app}\"; Flags: ignoreversion recursesubdirs createallsubdirs 32 | 33 | [Icons] 34 | Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" 35 | Name: "{group}\Uninstall"; Filename: "{app}\unins000.exe" 36 | Name: "{userdesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon 37 | 38 | [InstallDelete] 39 | Type: filesandordirs; Name: {app}\*; 40 | 41 | [Run] 42 | Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall 43 | 44 | -------------------------------------------------------------------------------- /gui_source/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.10) 2 | 3 | project(xocalc VERSION 0.05 LANGUAGES CXX) 4 | 5 | include_guard(DIRECTORY) 6 | 7 | set(CMAKE_INCLUDE_CURRENT_DIR ON) 8 | 9 | set(CMAKE_AUTOUIC ON) 10 | set(CMAKE_AUTOMOC ON) 11 | set(CMAKE_AUTORCC ON) 12 | 13 | set(CMAKE_CXX_STANDARD 11) 14 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 15 | 16 | file(MAKE_DIRECTORY ../release) 17 | set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ../release) 18 | set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ../release) 19 | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ../release) 20 | 21 | find_package(QT NAMES Qt5 COMPONENTS Widgets REQUIRED) 22 | find_package(Qt5 COMPONENTS Widgets REQUIRED) 23 | 24 | include(${PROJECT_SOURCE_DIR}/../XOptions/xoptions.cmake) 25 | 26 | set(PROJECT_SOURCES 27 | ${XOPTIONS_SOURCES} 28 | dialogabout.cpp 29 | dialogoptions.cpp 30 | dialogoptions.ui 31 | guimainwindow.cpp 32 | guimainwindow.ui 33 | main_gui.cpp 34 | resources.qrc 35 | ) 36 | 37 | if(APPLE) 38 | add_library(${PROJECT_NAME} MODULE ${PROJECT_SOURCES}) 39 | set_target_properties(${PROJECT_NAME} PROPERTIES 40 | MACOSX_BUNDLE_GUI_IDENTIFIER ntinfo.xopcodecalc 41 | MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} 42 | MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} 43 | BUNDLE TRUE) 44 | set(MACOSX_BUNDLE_ICON_FILE ../icons/main.icns) 45 | else() 46 | add_executable(${PROJECT_NAME} WIN32 47 | ${PROJECT_SOURCES} 48 | ) 49 | endif() 50 | 51 | target_link_libraries(${PROJECT_NAME} asm_lib) 52 | 53 | target_link_libraries(${PROJECT_NAME} Qt5::Widgets) 54 | -------------------------------------------------------------------------------- /gui_source/dialogabout.h: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019-2024 hors 2 | * 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy 4 | * of this software and associated documentation files (the "Software"), to deal 5 | * in the Software without restriction, including without limitation the rights 6 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | * copies of the Software, and to permit persons to whom the Software is 8 | * furnished to do so, subject to the following conditions: 9 | * 10 | * The above copyright notice and this permission notice shall be included in all 11 | * copies or substantial portions of the Software. 12 | * 13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | * SOFTWARE. 20 | */ 21 | #ifndef DIALOGABOUT_H 22 | #define DIALOGABOUT_H 23 | 24 | #include 25 | #include 26 | 27 | #include "../global.h" 28 | #include "xoptions.h" 29 | 30 | namespace Ui { 31 | class DialogAbout; 32 | } 33 | 34 | class DialogAbout : public QDialog { 35 | Q_OBJECT 36 | 37 | public: 38 | explicit DialogAbout(QWidget *pParent = nullptr); 39 | ~DialogAbout(); 40 | 41 | private slots: 42 | void on_pushButtonOK_clicked(); 43 | 44 | private: 45 | Ui::DialogAbout *ui; 46 | }; 47 | 48 | #endif // DIALOGABOUT_H 49 | -------------------------------------------------------------------------------- /gui_source/modevalidator.h: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019-2024 hors 2 | * 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy 4 | * of this software and associated documentation files (the "Software"), to deal 5 | * in the Software without restriction, including without limitation the rights 6 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | * copies of the Software, and to permit persons to whom the Software is 8 | * furnished to do so, subject to the following conditions: 9 | * 10 | * The above copyright notice and this permission notice shall be included in all 11 | * copies or substantial portions of the Software. 12 | * 13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | * SOFTWARE. 20 | */ 21 | #ifndef MODEVALIDATOR_H 22 | #define MODEVALIDATOR_H 23 | 24 | #include 25 | #include 26 | 27 | #include "../asm/asm.h" 28 | 29 | class ModeValidator : public QValidator { 30 | Q_OBJECT 31 | 32 | public: 33 | enum MODE { 34 | MODE_HEX = 0, 35 | MODE_SIGNED, 36 | MODE_UNSIGNED 37 | }; 38 | struct DATA { 39 | MODE mode; 40 | quint64 nMaxValue; 41 | }; 42 | 43 | explicit ModeValidator(QObject *pParent = nullptr); 44 | void setData(DATA data); 45 | virtual State validate(QString &sInput, int &pos) const; 46 | 47 | private: 48 | DATA data; 49 | }; 50 | 51 | #endif // MODEVALIDATOR_H 52 | -------------------------------------------------------------------------------- /global.h: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019-2024 hors 2 | * 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy 4 | * of this software and associated documentation files (the "Software"), to deal 5 | * in the Software without restriction, including without limitation the rights 6 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | * copies of the Software, and to permit persons to whom the Software is 8 | * furnished to do so, subject to the following conditions: 9 | * 10 | * The above copyright notice and this permission notice shall be included in all 11 | * copies or substantial portions of the Software. 12 | * 13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | * SOFTWARE. 20 | */ 21 | #ifndef GLOBAL_H 22 | #define GLOBAL_H 23 | 24 | // Check Windows 25 | #if defined(_WIN32) || defined(_WIN64) 26 | #if defined(_WIN64) 27 | #define OPCODE64 28 | #else 29 | #define OPCODE32 30 | #endif 31 | #endif 32 | 33 | // Check GCC 34 | #if defined(__GNUC__) 35 | #if defined(__x86_64__) || defined(__ppc64__) 36 | #define OPCODE64 37 | #else 38 | #define OPCODE32 39 | #endif 40 | #endif 41 | 42 | #include 43 | 44 | #define X_APPLICATIONDISPLAYNAME "XOpcodeCalc" 45 | #define X_APPLICATIONNAME "xocalc" 46 | #define X_APPLICATIONVERSION "0.06" 47 | #define X_ORGANIZATIONNAME "NTInfo" 48 | #define X_ORGANIZATIONDOMAIN "ntinfo.biz" 49 | #define X_OPTIONSFILE "xocalc.ini" 50 | 51 | #endif // GLOBAL_H 52 | -------------------------------------------------------------------------------- /gui_source/dialogabout.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | DialogAbout 4 | 5 | 6 | Qt::ApplicationModal 7 | 8 | 9 | 10 | 0 11 | 0 12 | 649 13 | 428 14 | 15 | 16 | 17 | About 18 | 19 | 20 | true 21 | 22 | 23 | 24 | 25 | 26 | 27 | 0 28 | 0 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | Qt::Horizontal 39 | 40 | 41 | 42 | 40 43 | 20 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | OK 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | XAboutWidget 62 | QWidget 63 |
xaboutwidget.h
64 | 1 65 |
66 |
67 | 68 | 69 |
70 | -------------------------------------------------------------------------------- /gui_source/dialogoptions.h: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019-2024 hors 2 | * 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy 4 | * of this software and associated documentation files (the "Software"), to deal 5 | * in the Software without restriction, including without limitation the rights 6 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | * copies of the Software, and to permit persons to whom the Software is 8 | * furnished to do so, subject to the following conditions: 9 | * 10 | * The above copyright notice and this permission notice shall be included in all 11 | * copies or substantial portions of the Software. 12 | * 13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | * SOFTWARE. 20 | */ 21 | #ifndef DIALOGOPTIONS_H 22 | #define DIALOGOPTIONS_H 23 | 24 | #include 25 | #include 26 | #include 27 | #include 28 | 29 | #include "../global.h" 30 | #include "xoptions.h" 31 | 32 | namespace Ui { 33 | class DialogOptions; 34 | } 35 | 36 | class DialogOptions : public QDialog { 37 | Q_OBJECT 38 | 39 | enum OPTION_PAGES { 40 | OP_SCAN = 0, 41 | OP_APPEARANCE, 42 | OP_CONTEXT 43 | }; 44 | 45 | public: 46 | explicit DialogOptions(QWidget *pParent, XOptions *pOptions); 47 | ~DialogOptions(); 48 | 49 | private slots: 50 | void on_pushButtonOK_clicked(); 51 | void on_pushButtonCancel_clicked(); 52 | 53 | private: 54 | Ui::DialogOptions *ui; 55 | XOptions *g_pOptions; 56 | }; 57 | 58 | #endif // DIALOGOPTIONS_H 59 | -------------------------------------------------------------------------------- /gui_source/dialogoptions.cpp: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019-2024 hors 2 | * 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy 4 | * of this software and associated documentation files (the "Software"), to deal 5 | * in the Software without restriction, including without limitation the rights 6 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | * copies of the Software, and to permit persons to whom the Software is 8 | * furnished to do so, subject to the following conditions: 9 | * 10 | * The above copyright notice and this permission notice shall be included in all 11 | * copies or substantial portions of the Software. 12 | * 13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | * SOFTWARE. 20 | */ 21 | #include "dialogoptions.h" 22 | 23 | #include "ui_dialogoptions.h" 24 | 25 | DialogOptions::DialogOptions(QWidget *pParent, XOptions *pOptions) : QDialog(pParent), ui(new Ui::DialogOptions) 26 | { 27 | ui->setupUi(this); 28 | 29 | this->g_pOptions = pOptions; 30 | 31 | g_pOptions->setCheckBox(ui->checkBoxStayOnTop, XOptions::ID_VIEW_STAYONTOP); 32 | g_pOptions->setComboBox(ui->comboBoxStyle, XOptions::ID_VIEW_STYLE); 33 | } 34 | 35 | DialogOptions::~DialogOptions() 36 | { 37 | delete ui; 38 | } 39 | 40 | void DialogOptions::on_pushButtonOK_clicked() 41 | { 42 | g_pOptions->getCheckBox(ui->checkBoxStayOnTop, XOptions::ID_VIEW_STAYONTOP); 43 | g_pOptions->getComboBox(ui->comboBoxStyle, XOptions::ID_VIEW_STYLE); 44 | 45 | if (g_pOptions->isRestartNeeded()) { 46 | QMessageBox::information(this, tr("Information"), tr("Please restart the application")); 47 | } 48 | 49 | this->close(); 50 | } 51 | 52 | void DialogOptions::on_pushButtonCancel_clicked() 53 | { 54 | this->close(); 55 | } 56 | -------------------------------------------------------------------------------- /PKGBUILD: -------------------------------------------------------------------------------- 1 | pkgname=xopcodecalc 2 | pkgver=0.05 3 | pkgrel=1 4 | pkgdesc='x86/64 Opcode calculator' 5 | arch=('x86_64') 6 | url='https://horsicq.github.io' 7 | license=(MIT) 8 | provides=( 9 | 'xopcodecalc' 10 | ) 11 | conflicts=( 12 | 'xopcodecalc' 13 | ) 14 | depends=( 15 | 'freetype2' 16 | 'glib2' 17 | 'glibc' 18 | 'graphite' 19 | 'icu' 20 | 'krb5' 21 | 'qt5-base' 22 | 'qt5-svg' 23 | 'systemd-libs' 24 | ) 25 | makedepends=( 26 | 'coreutils' 27 | 'git' 28 | 'imagemagick' 29 | 'qt5-tools' 30 | ) 31 | _srcname="XOpcodeCalc" 32 | source=( 33 | 'git+https://github.com/horsicq/XOpcodeCalc' 34 | ) 35 | sha512sums=( 36 | 'SKIP' 37 | ) 38 | _pkgname="${pkgname/-git/}" 39 | _stop='\e[m' 40 | _color="\e[33m" 41 | _bold='\e[1m' 42 | _prefix=" ${_bold}${_color}==>${_stop} " 43 | 44 | prepare() { 45 | cd "$srcdir/$_srcname" 46 | git submodule update --init --recursive 47 | } 48 | 49 | build() { 50 | cd "$_srcname" || return 51 | echo -e "${_prefix}Building xopcodecalc" 52 | 53 | _subdirs="gui_source" 54 | 55 | # [DEPRECATED] FIXME UPSTREAM: -Werror=format-security is causing build errors (merged upstream) 56 | #export CFLAGS+=" -Wno-format-security" 57 | #export CXXFLAGS+=" -Wno-format-security" 58 | 59 | for _subdir in $_subdirs; do 60 | pushd "$_subdir" || return 61 | echo -e "${_prefix}${_prefix}Building $_subdir" 62 | qmake-qt5 PREFIX=/usr QMAKE_CFLAGS="${CFLAGS}" QMAKE_CXXFLAGS="${CXXFLAGS}" QMAKE_LFLAGS="${LDFLAGS}" "$_subdir.pro" 63 | make -f Makefile clean 64 | make -f Makefile 65 | popd || return 66 | done 67 | } 68 | 69 | package() { 70 | cd "$_srcname" || return 71 | 72 | echo -e "${_prefix}Creating the package base" 73 | install -d "$pkgdir"/{opt/"${_pkgname}",usr/bin,usr/share/pixmaps} 74 | install -d "$pkgdir/opt/${_pkgname}"/images 75 | 76 | echo -e "${_prefix}Copying the package binaries" 77 | install -Dm 755 build/release/xocalc -t "$pkgdir"/opt/"${_pkgname}" 78 | 79 | echo -e "${_prefix}Copying the package files" 80 | cp -r images/* -t "$pkgdir"/opt/"${_pkgname}"/images/ 81 | 82 | echo -e "${_prefix}Setting up /usr/bin launchers" 83 | ln -s /opt/"${_pkgname}"/xocalc "$pkgdir"/usr/bin/xocalc 84 | 85 | echo -e "${_prefix}Setting up desktop icon" 86 | install -Dm 644 LINUX/hicolor/48x48/apps/xopcodecalc.png -t "$pkgdir"/usr/share/pixmaps 87 | 88 | echo -e "${_prefix}Setting up desktop shortcuts" 89 | install -Dm 644 LINUX/xocalc.desktop -t "$pkgdir"/usr/share/applications 90 | 91 | install -Dm 644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" 92 | } -------------------------------------------------------------------------------- /gui_source/windows.manifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | true 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /gui_source/main_gui.cpp: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019-2024 hors 2 | * 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy 4 | * of this software and associated documentation files (the "Software"), to deal 5 | * in the Software without restriction, including without limitation the rights 6 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | * copies of the Software, and to permit persons to whom the Software is 8 | * furnished to do so, subject to the following conditions: 9 | * 10 | * The above copyright notice and this permission notice shall be included in all 11 | * copies or substantial portions of the Software. 12 | * 13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | * SOFTWARE. 20 | */ 21 | #include 22 | #include 23 | 24 | #include "guimainwindow.h" 25 | 26 | int main(int argc, char *argv[]) 27 | { 28 | #if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) 29 | QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 30 | #endif 31 | #ifdef Q_OS_MAC 32 | #ifndef QT_DEBUG 33 | QString sLibraryPath = QString(argv[0]); 34 | sLibraryPath = sLibraryPath.remove("MacOS/XOcalc") + "PlugIns"; 35 | QCoreApplication::setLibraryPaths(QStringList(sLibraryPath)); 36 | #endif 37 | #endif 38 | QCoreApplication::setOrganizationName(X_ORGANIZATIONNAME); 39 | QCoreApplication::setOrganizationDomain(X_ORGANIZATIONDOMAIN); 40 | QCoreApplication::setApplicationName(X_APPLICATIONNAME); 41 | QCoreApplication::setApplicationVersion(X_APPLICATIONVERSION); 42 | 43 | if ((argc == 2) && ((QString(argv[1]) == "--version") || (QString(argv[1]) == "-v"))) { 44 | QString sInfo = QString("%1 v%2").arg(X_APPLICATIONDISPLAYNAME, X_APPLICATIONVERSION); 45 | printf("%s\n", sInfo.toUtf8().data()); 46 | 47 | return 0; 48 | } 49 | 50 | QApplication a(argc, argv); 51 | 52 | #ifdef Q_OS_LINUX 53 | #if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0) 54 | a.setDesktopFileName("xocalc"); 55 | #endif 56 | #endif 57 | 58 | XOptions xOptions; 59 | 60 | xOptions.setName(X_OPTIONSFILE); 61 | 62 | xOptions.addID(XOptions::ID_VIEW_STYLE, "Fusion"); 63 | 64 | xOptions.load(); 65 | 66 | XOptions::adjustApplicationView(X_APPLICATIONNAME, &xOptions); 67 | 68 | GuiMainWindow w; 69 | w.show(); 70 | 71 | return a.exec(); 72 | } 73 | -------------------------------------------------------------------------------- /gui_source/modevalidator.cpp: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019-2024 hors 2 | * 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy 4 | * of this software and associated documentation files (the "Software"), to deal 5 | * in the Software without restriction, including without limitation the rights 6 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | * copies of the Software, and to permit persons to whom the Software is 8 | * furnished to do so, subject to the following conditions: 9 | * 10 | * The above copyright notice and this permission notice shall be included in all 11 | * copies or substantial portions of the Software. 12 | * 13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | * SOFTWARE. 20 | */ 21 | #include "modevalidator.h" 22 | 23 | ModeValidator::ModeValidator(QObject *pParent) : QValidator(pParent) 24 | { 25 | data = {}; 26 | } 27 | 28 | void ModeValidator::setData(ModeValidator::DATA data) 29 | { 30 | this->data = data; 31 | } 32 | 33 | QValidator::State ModeValidator::validate(QString &sInput, int &pos) const 34 | { 35 | Q_UNUSED(pos) 36 | 37 | QValidator::State result = Acceptable; 38 | 39 | if (!sInput.isEmpty()) { 40 | result = Invalid; 41 | 42 | bool bSuccess = false; 43 | XVALUE nValueU = 0; 44 | SXVALUE nValueS = 0; 45 | 46 | if (data.mode == MODE_HEX) { 47 | #ifdef OPCODE32 48 | nValueU = sInput.toULong(&bSuccess, 16); 49 | #else 50 | nValueS = sInput.toULongLong(&bSuccess, 16); 51 | #endif 52 | } else if (data.mode == MODE_SIGNED) { 53 | #ifdef OPCODE32 54 | nValueS = sInput.toLong(&bSuccess, 16); 55 | #else 56 | nValueS = sInput.toLongLong(&bSuccess, 10); 57 | #endif 58 | } else if (data.mode == MODE_UNSIGNED) { 59 | #ifdef OPCODE32 60 | nValueU = sInput.toULong(&bSuccess, 10); 61 | #else 62 | nValueU = sInput.toULongLong(&bSuccess, 10); 63 | #endif 64 | } 65 | 66 | if (data.mode == MODE_SIGNED) { 67 | if (sInput == "-") { 68 | result = Intermediate; 69 | } 70 | 71 | if (bSuccess && (((XVALUE)nValueS) <= data.nMaxValue)) { 72 | result = Acceptable; 73 | } 74 | } else { 75 | if (bSuccess && (nValueU <= data.nMaxValue)) { 76 | result = Acceptable; 77 | } 78 | } 79 | } 80 | 81 | return result; 82 | } 83 | -------------------------------------------------------------------------------- /gui_source/gui_source.pro: -------------------------------------------------------------------------------- 1 | QT += core gui 2 | 3 | greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 4 | 5 | TARGET = xocalc 6 | 7 | macx { 8 | TARGET = XOcalc 9 | } 10 | 11 | TEMPLATE = app 12 | 13 | CONFIG += c++11 14 | 15 | SOURCES +=\ 16 | guimainwindow.cpp \ 17 | main_gui.cpp \ 18 | dialogabout.cpp \ 19 | dialogoptions.cpp 20 | 21 | HEADERS +=\ 22 | guimainwindow.h \ 23 | dialogabout.h \ 24 | dialogoptions.h \ 25 | ../asm/asm.h \ 26 | ../asm_defs.h \ 27 | ../global.h 28 | 29 | FORMS += \ 30 | guimainwindow.ui \ 31 | dialogabout.ui \ 32 | dialogoptions.ui 33 | 34 | include(../build.pri) 35 | 36 | !contains(XCONFIG, xoptions) { 37 | XCONFIG += xoptions 38 | include(../XOptions/xoptions.pri) 39 | } 40 | 41 | !contains(XCONFIG, xaboutwidget) { 42 | XCONFIG += xaboutwidget 43 | include(../XAboutWidget/xaboutwidget.pri) 44 | } 45 | 46 | !contains(XCONFIG, xlineedithex) { 47 | XCONFIG += xlineedithex 48 | include(../Controls/xlineedithex.pri) 49 | } 50 | 51 | win32 { 52 | RC_ICONS = ../icons/main.ico 53 | CONFIG -= embed_manifest_exe 54 | QMAKE_MANIFEST = windows.manifest.xml 55 | VERSION = 0.05 56 | QMAKE_TARGET_COMPANY = NTInfo 57 | QMAKE_TARGET_PRODUCT = x86/64 Opcode calculator 58 | QMAKE_TARGET_DESCRIPTION = XOpcodeCalc 59 | QMAKE_TARGET_COPYRIGHT = horsicq@gmail.com 60 | } 61 | 62 | macx { 63 | ICON = ../icons/main.icns 64 | } 65 | 66 | RESOURCES += \ 67 | resources.qrc 68 | 69 | preprocess.name = assembler 70 | preprocess.input = ASM_FILES 71 | 72 | win32-msvc*{ 73 | preprocess.output = ${QMAKE_FILE_BASE}.obj 74 | !contains(QMAKE_TARGET.arch, x86_64) { 75 | message("Win msvc x86 build") 76 | ASM_FILES = ../asm/msvc32.asm 77 | preprocess.commands = ml /c /coff ${QMAKE_FILE_IN} 78 | } else { 79 | message("Win msvc x86_64 build") 80 | ASM_FILES = ../asm/msvc64.asm 81 | preprocess.commands = ml64 /c /coff ${QMAKE_FILE_IN} 82 | } 83 | } 84 | 85 | linux-g++*{ 86 | BITSIZE = $$system(getconf LONG_BIT) 87 | !contains(BITSIZE, 64) { 88 | message("Linux gcc x32 build") 89 | ASM_FILES = ../asm/gcc32.s 90 | } else { 91 | message("Linux gcc x64 build") 92 | ASM_FILES = ../asm/gcc64.s 93 | } 94 | 95 | preprocess.output = ${QMAKE_FILE_BASE}.o 96 | preprocess.commands = gcc -c ${QMAKE_FILE_IN} 97 | } 98 | 99 | win32-g++*{ 100 | contains(QT_ARCH, i386) { 101 | message("Win gcc x32 build") 102 | ASM_FILES = ../asm/gcc32.s 103 | } else { 104 | message("Win gcc x64 build") 105 | ASM_FILES = ../asm/gcc64.s 106 | } 107 | 108 | preprocess.output = ${QMAKE_FILE_BASE}.o 109 | preprocess.commands = gcc -c ${QMAKE_FILE_IN} 110 | } 111 | 112 | osx{ 113 | message("OSX x64 build") 114 | ASM_FILES = ../asm/gcc64.s 115 | preprocess.output = ${QMAKE_FILE_BASE}.o 116 | preprocess.commands = gcc -arch x86_64 -c ${QMAKE_FILE_IN} 117 | } 118 | 119 | QMAKE_EXTRA_COMPILERS += preprocess 120 | 121 | DISTFILES += \ 122 | ../changelog.txt \ 123 | ../release_version.txt \ 124 | CMakeLists.txt 125 | -------------------------------------------------------------------------------- /docs/BUILD.md: -------------------------------------------------------------------------------- 1 | # Instructions to build XOpcodeCalc 2 | 3 | ## Building on Linux based on Debian 4 | 5 | - Install prerequisite packages: 6 | 7 | For Ubuntu 14.04-20.04 8 | 9 | ```bash 10 | sudo apt-get install --quiet --assume-yes git \ 11 | build-essential \ 12 | qtbase5-dev \ 13 | qttools5-dev-tools \ 14 | qt5-default 15 | ``` 16 | 17 | For Ubuntu 22.04 18 | 19 | ```bash 20 | sudo apt-get install --quiet --assume-yes git \ 21 | build-essential \ 22 | qtbase5-dev \ 23 | qttools5-dev-tools \ 24 | qt5-qmake 25 | ``` 26 | 27 | - Clone this repository recursively: 28 | 29 | ```bash 30 | git clone --recursive https://github.com/horsicq/XOpcodeCalc.git 31 | ``` 32 | 33 | - Run build script: 34 | 35 | ```bash 36 | cd XOpcodeCalc 37 | bash -x build_dpkg.sh 38 | ``` 39 | 40 | - Install deb package: 41 | ```bash 42 | sudo dpkg -i release/nfd_[Version].deb 43 | ``` 44 | 45 | Run: *xocalc* 46 | 47 | ## How to build on Linux(Automake) 48 | 49 | Qt framework has to be installed on the system. 50 | 51 | - Install git: 52 | 53 | ```bash 54 | sudo apt-get install --quiet --assume-yes git 55 | ``` 56 | 57 | - For (Ubuntu 20.04) Install Qt Framework: 58 | 59 | ```bash 60 | sudo apt-get install --quiet --assume-yes git \ 61 | build-essential \ 62 | qt5-default \ 63 | qtbase5-dev \ 64 | qttools5-dev-tools 65 | ``` 66 | 67 | - Clone this repository recursively: 68 | 69 | ```bash 70 | git clone --recursive https://github.com/horsicq/XOpcodeCalc.git 71 | ``` 72 | 73 | - Build and install 74 | 75 | ```bash 76 | cd XOpcodeCalc 77 | chmod a+x configure 78 | ./configure 79 | make 80 | sudo make install 81 | ``` 82 | 83 | Run: *xocalc* 84 | 85 | ## How to build on OSX 86 | 87 | - Install [Qt 5.15.2](https://github.com/horsicq/build_tools) 88 | 89 | - Clone this project recursively: 90 | 91 | ```bash 92 | git clone --recursive https://github.com/horsicq/XOpcodeCalc.git 93 | cd XOpcodeCalc 94 | ``` 95 | 96 | - Edit build_mac.bat (check QT_PATH variable) 97 | 98 | - Run build_mac.bat 99 | 100 | ## How to build on Windows(XP) 101 | 102 | - Install [Visual Studio 2013](https://github.com/horsicq/build_tools) 103 | 104 | - Install [Qt 5.6.3 for VS2013](https://github.com/horsicq/build_tools) 105 | 106 | - Install [7-Zip](https://www.7-zip.org/) 107 | 108 | - Clone this project recursively: 109 | 110 | ```bash 111 | git clone --recursive https://github.com/horsicq/XOpcodeCalc.git 112 | cd XOpcodeCalc 113 | ``` 114 | 115 | - Edit build_winxp.bat ( check VS_PATH, SEVENZIP_PATH, QT_PATH variables) 116 | 117 | - Run build_winxp.bat 118 | 119 | ## How to build on Windows(7-11) 120 | 121 | - Install [Visual Studio 2019](https://github.com/horsicq/build_tools) 122 | 123 | - Install [Qt 5.15.2 for VS2019](https://github.com/horsicq/build_tools) 124 | 125 | - Install [7-Zip](https://www.7-zip.org) 126 | 127 | - Install [Inno Setup](https://github.com/horsicq/build_tools) 128 | 129 | - Clone this project recursively: 130 | 131 | ```bash 132 | git clone --recursive https://github.com/horsicq/XOpcodeCalc.git 133 | cd XOpcodeCalc 134 | ``` 135 | 136 | - Edit build_msvc_win32.bat ( check VSVARS_PATH, SEVENZIP_PATH, INNOSETUP_PATH, QMAKE_PATH variables) 137 | 138 | - Edit build_msvc_win64.bat ( check VSVARS_PATH, SEVENZIP_PATH, INNOSETUP_PATH, QMAKE_PATH variables) 139 | 140 | - Run build_win32.bat 141 | 142 | - Run build_win64.bat 143 | -------------------------------------------------------------------------------- /gui_source/dialogoptions.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | DialogOptions 4 | 5 | 6 | Qt::ApplicationModal 7 | 8 | 9 | 10 | 0 11 | 0 12 | 304 13 | 191 14 | 15 | 16 | 17 | Options 18 | 19 | 20 | true 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | Stay on top 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | Qt::Horizontal 40 | 41 | 42 | 43 | 40 44 | 20 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | Style 55 | 56 | 57 | 58 | 0 59 | 60 | 61 | 0 62 | 63 | 64 | 0 65 | 66 | 67 | 0 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | Qt::Vertical 79 | 80 | 81 | 82 | 20 83 | 40 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | Qt::Horizontal 94 | 95 | 96 | 97 | 40 98 | 20 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | OK 107 | 108 | 109 | 110 | 111 | 112 | 113 | Cancel 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /gui_source/guimainwindow.h: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019-2024 hors 2 | * 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy 4 | * of this software and associated documentation files (the "Software"), to deal 5 | * in the Software without restriction, including without limitation the rights 6 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | * copies of the Software, and to permit persons to whom the Software is 8 | * furnished to do so, subject to the following conditions: 9 | * 10 | * The above copyright notice and this permission notice shall be included in all 11 | * copies or substantial portions of the Software. 12 | * 13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | * SOFTWARE. 20 | */ 21 | #ifndef GUIMAINWINDOW_H 22 | #define GUIMAINWINDOW_H 23 | 24 | #include 25 | #include 26 | #include 27 | 28 | #include "../asm/asm.h" 29 | #include "../asm_defs.h" 30 | #include "../global.h" 31 | #include "dialogabout.h" 32 | #include "dialogoptions.h" 33 | #include "xlineedithex.h" 34 | #include "xoptions.h" 35 | 36 | namespace Ui { 37 | class GuiMainWindow; 38 | } 39 | 40 | class GuiMainWindow : public QMainWindow { 41 | Q_OBJECT 42 | 43 | enum OG { 44 | OG_TWOOPERANDS = 0, 45 | OG_ONEOPERAND, 46 | OG_MULDIV, 47 | OG_SHIFT, 48 | OG_BITS, 49 | #ifndef OPCODE64 50 | OG_BCD, 51 | #endif 52 | OG_SPECIAL 53 | }; 54 | 55 | public: 56 | explicit GuiMainWindow(QWidget *pParent = nullptr); 57 | ~GuiMainWindow(); 58 | 59 | private slots: 60 | void on_pushButtonExit_clicked(); 61 | void on_pushButtonAbout_clicked(); 62 | void on_comboBoxOpcode_currentIndexChanged(int nIndex); 63 | void on_lineEditOperand1_textChanged(const QString &arg1); 64 | void on_lineEditOperand2_textChanged(const QString &arg1); 65 | void on_lineEditOperand3_textChanged(const QString &arg1); 66 | void on_lineEditOperand4_textChanged(const QString &arg1); 67 | void on_lineEditResult1_textChanged(const QString &arg1); 68 | void on_lineEditResult2_textChanged(const QString &arg1); 69 | void on_lineEditResult3_textChanged(const QString &arg1); 70 | void on_lineEditResult4_textChanged(const QString &arg1); 71 | void on_pushButtonFlagCF_toggled(bool checked); 72 | void on_pushButtonFlagPF_toggled(bool checked); 73 | void on_pushButtonFlagAF_toggled(bool checked); 74 | void on_pushButtonFlagZF_toggled(bool checked); 75 | void on_pushButtonFlagSF_toggled(bool checked); 76 | void on_pushButtonFlagOF_toggled(bool checked); 77 | void on_lineEditFlagsBefore_textChanged(const QString &arg1); 78 | void on_comboBoxMode_currentIndexChanged(int index); 79 | void adjustWindow(); 80 | void calc(); 81 | void loadOpcodes(const ASM_DEF::OPCODE_RECORD *pRecords, qint32 nRecordsSize); 82 | void adjustValue(QGroupBox *pGroupBox, ASM_DEF::VALUE_RECORD vr); 83 | void adjustMode(); 84 | void adjustFlags(XVALUE nFlag, bool bState); 85 | void on_comboBoxOpcodeGroup_currentIndexChanged(int index); 86 | void on_pushButtonOptions_clicked(); 87 | void on_toolButtonOpcode_clicked(); 88 | 89 | private: 90 | Ui::GuiMainWindow *ui; 91 | XOptions g_xOptions; 92 | QMap g_mapOpcodes; 93 | }; 94 | 95 | #endif // GUIMAINWINDOW_H 96 | -------------------------------------------------------------------------------- /gui_source/dialogabout.cpp: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019-2025 hors 2 | * 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy 4 | * of this software and associated documentation files (the "Software"), to deal 5 | * in the Software without restriction, including without limitation the rights 6 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | * copies of the Software, and to permit persons to whom the Software is 8 | * furnished to do so, subject to the following conditions: 9 | * 10 | * The above copyright notice and this permission notice shall be included in all 11 | * copies or substantial portions of the Software. 12 | * 13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | * SOFTWARE. 20 | */ 21 | #include "dialogabout.h" 22 | 23 | #include "ui_dialogabout.h" 24 | 25 | DialogAbout::DialogAbout(QWidget *pParent) : QDialog(pParent), ui(new Ui::DialogAbout) 26 | { 27 | ui->setupUi(this); 28 | 29 | XAboutWidget::DATA _data = {}; 30 | 31 | _data.sInfo += QString("

%1

").arg(XOptions::getTitle(X_APPLICATIONDISPLAYNAME, X_APPLICATIONVERSION)); 32 | _data.sInfo += QString("

Copyright (C) 2019-2025 Hors

"); 33 | _data.sInfo += QString( 34 | "

%1: horsicq@gmail.com

") 36 | .arg(tr("Bugreports")); 37 | _data.sInfo += QString( 38 | "

%1: http://ntinfo.biz

") 40 | .arg(tr("Website")); 41 | _data.sInfo += 42 | QString( 43 | "

%1(Paypal): ntinfo.re@gmail.com

") 45 | .arg(tr("Donate")); 46 | _data.sInfo += 47 | QString( 48 | "

%1(BTC): 3DqddVBX9PKqMvNPXZ3gPHBNNRtD9CnmJo

") 50 | .arg(tr("Donate")); 51 | _data.sInfo += 52 | QString( 53 | "

%1: https://github.com/horsicq/XOpcodeCalc

") 55 | .arg(tr("Source code")); 56 | 57 | _data.sLibraries += 58 | QString( 59 | "

QT Library %1 http://qt-project.org

") 61 | .arg(QT_VERSION_STR); 62 | 63 | _data.sLogoPath = ":/images/main.png"; 64 | _data.sUpdatesLink = "https://github.com/horsicq/XOpcodeCalc/releases"; 65 | _data.sThanksLink = "https://github.com/horsicq/XOpcodeCalc/blob/master/THANKS.md"; 66 | 67 | ui->widgetAbout->setData(_data); 68 | } 69 | 70 | DialogAbout::~DialogAbout() 71 | { 72 | delete ui; 73 | } 74 | 75 | void DialogAbout::on_pushButtonOK_clicked() 76 | { 77 | this->close(); 78 | } 79 | -------------------------------------------------------------------------------- /asm/asm.h: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019-2024 hors 2 | * 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy 4 | * of this software and associated documentation files (the "Software"), to deal 5 | * in the Software without restriction, including without limitation the rights 6 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | * copies of the Software, and to permit persons to whom the Software is 8 | * furnished to do so, subject to the following conditions: 9 | * 10 | * The above copyright notice and this permission notice shall be included in 11 | * all copies or substantial portions of the Software. 12 | * 13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | * SOFTWARE. 20 | */ 21 | #include "../global.h" 22 | 23 | #ifndef ASM_H 24 | #define ASM_H 25 | #ifdef OPCODE32 26 | typedef unsigned int XVALUE; 27 | typedef int SXVALUE; 28 | #else 29 | typedef unsigned long long XVALUE; 30 | typedef long long SXVALUE; 31 | #endif 32 | struct RECDATA { 33 | XVALUE OPERAND[4]; 34 | XVALUE RESULT[4]; 35 | XVALUE FLAG[2]; 36 | }; 37 | #define RECDATA_INIT \ 38 | { \ 39 | {}, {}, \ 40 | { \ 41 | } \ 42 | } 43 | #ifdef Q_OS_OSX 44 | #define XASM(func) asm(func) 45 | #else 46 | #define XASM(func) 47 | #endif 48 | 49 | extern "C" void op_add(RECDATA *pRecData) XASM("op_add"); 50 | extern "C" void op_sub(RECDATA *pRecData) XASM("op_sub"); 51 | extern "C" void op_adc(RECDATA *pRecData) XASM("op_adc"); 52 | extern "C" void op_sbb(RECDATA *pRecData) XASM("op_sbb"); 53 | extern "C" void op_and(RECDATA *pRecData) XASM("op_and"); 54 | extern "C" void op_xor(RECDATA *pRecData) XASM("op_xor"); 55 | extern "C" void op_or(RECDATA *pRecData) XASM("op_or"); 56 | extern "C" void op_test(RECDATA *pRecData) XASM("op_test"); 57 | extern "C" void op_cmp(RECDATA *pRecData) XASM("op_cmp"); 58 | extern "C" void op_xadd(RECDATA *pRecData) XASM("op_xadd"); 59 | extern "C" void op_movzx_r8(RECDATA *pRecData) XASM("op_movzx_r8"); 60 | extern "C" void op_movzx_r16(RECDATA *pRecData) XASM("op_movzx_r16"); 61 | extern "C" void op_movsx_r8(RECDATA *pRecData) XASM("op_movsx_r8"); 62 | extern "C" void op_movsx_r16(RECDATA *pRecData) XASM("op_movsx_r16"); 63 | 64 | extern "C" void op_inc(RECDATA *pRecData) XASM("op_inc"); 65 | extern "C" void op_dec(RECDATA *pRecData) XASM("op_dec"); 66 | extern "C" void op_not(RECDATA *pRecData) XASM("op_not"); 67 | extern "C" void op_neg(RECDATA *pRecData) XASM("op_neg"); 68 | extern "C" void op_bswap(RECDATA *pRecData) XASM("op_bswap"); 69 | 70 | extern "C" void op_mul(RECDATA *pRecData) XASM("op_mul"); 71 | extern "C" void op_imul(RECDATA *pRecData) XASM("op_imul"); 72 | extern "C" void op_div(RECDATA *pRecData) XASM("op_div"); 73 | extern "C" void op_idiv(RECDATA *pRecData) XASM("op_idiv"); 74 | 75 | extern "C" void op_shr(RECDATA *pRecData) XASM("op_shr"); 76 | extern "C" void op_shl(RECDATA *pRecData) XASM("op_shl"); 77 | extern "C" void op_sar(RECDATA *pRecData) XASM("op_sar"); 78 | extern "C" void op_rol(RECDATA *pRecData) XASM("op_rol"); 79 | extern "C" void op_ror(RECDATA *pRecData) XASM("op_ror"); 80 | extern "C" void op_rcl(RECDATA *pRecData) XASM("op_rcl"); 81 | extern "C" void op_rcr(RECDATA *pRecData) XASM("op_rcr"); 82 | 83 | extern "C" void op_cpuid(RECDATA *pRecData) XASM("op_cpuid"); 84 | extern "C" void op_rdtsc(RECDATA *pRecData) XASM("op_rdtsc"); 85 | 86 | extern "C" void op_bt(RECDATA *pRecData) XASM("op_bt"); 87 | extern "C" void op_bsf(RECDATA *pRecData) XASM("op_bsf"); 88 | extern "C" void op_bsr(RECDATA *pRecData) XASM("op_bsr"); 89 | extern "C" void op_bts(RECDATA *pRecData) XASM("op_bts"); 90 | extern "C" void op_btr(RECDATA *pRecData) XASM("op_btr"); 91 | extern "C" void op_btc(RECDATA *pRecData) XASM("op_btc"); 92 | 93 | extern "C" void op_daa(RECDATA *pRecData) XASM("op_daa"); 94 | extern "C" void op_das(RECDATA *pRecData) XASM("op_das"); 95 | extern "C" void op_aaa(RECDATA *pRecData) XASM("op_aaa"); 96 | extern "C" void op_aas(RECDATA *pRecData) XASM("op_aas"); 97 | extern "C" void op_aam(RECDATA *pRecData) XASM("op_aam"); 98 | extern "C" void op_aad(RECDATA *pRecData) XASM("op_aad"); 99 | 100 | #endif // ASM_H 101 | -------------------------------------------------------------------------------- /asm/gcc64.s: -------------------------------------------------------------------------------- 1 | .intel_syntax noprefix 2 | #ifdef __linux__ 3 | .section .note.GNU-stack,"",%progbits 4 | #endif 5 | .text 6 | 7 | .macro __ENTER 8 | push rbp 9 | mov rbp,rsp 10 | push rax 11 | push rcx 12 | push rdx 13 | push rbx 14 | push rsi 15 | push rdi 16 | pushf 17 | 18 | mov rsi,rdi # System V 19 | mov rax,QWORD PTR[rsi+0] 20 | mov rcx,QWORD PTR[rsi+8] 21 | mov rdx,QWORD PTR[rsi+16] 22 | mov rbx,QWORD PTR[rsi+24] 23 | push QWORD PTR[rsi+64] 24 | popf 25 | .endm 26 | 27 | .macro __LEAVE 28 | mov QWORD PTR[rsi+32],rax 29 | mov QWORD PTR[rsi+40],rdx 30 | mov QWORD PTR[rsi+48],rcx 31 | mov QWORD PTR[rsi+56],rbx 32 | pushf 33 | pop QWORD PTR[rsi+72] 34 | 35 | popf 36 | pop rdi 37 | pop rsi 38 | pop rbx 39 | pop rdx 40 | pop rcx 41 | pop rax 42 | mov rsp,rbp 43 | pop rbp 44 | ret 45 | .endm 46 | ################################# 47 | # ADD 48 | ################################# 49 | .globl op_add 50 | op_add: 51 | __ENTER 52 | add rax,rcx 53 | __LEAVE 54 | ################################# 55 | # SUB 56 | ################################# 57 | .globl op_sub 58 | op_sub: 59 | __ENTER 60 | sub rax,rcx 61 | __LEAVE 62 | ################################# 63 | # ADC 64 | ################################# 65 | .globl op_adc 66 | op_adc: 67 | __ENTER 68 | adc rax,rcx 69 | __LEAVE 70 | ################################# 71 | # SBB 72 | ################################# 73 | .globl op_sbb 74 | op_sbb: 75 | __ENTER 76 | sbb rax,rcx 77 | __LEAVE 78 | ################################# 79 | # AND 80 | ################################# 81 | .globl op_and 82 | op_and: 83 | __ENTER 84 | and rax,rcx 85 | __LEAVE 86 | ################################# 87 | # XOR 88 | ################################# 89 | .globl op_xor 90 | op_xor: 91 | __ENTER 92 | xor rax,rcx 93 | __LEAVE 94 | ################################# 95 | # OR 96 | ################################# 97 | .globl op_or 98 | op_or: 99 | __ENTER 100 | or rax,rcx 101 | __LEAVE 102 | ################################# 103 | # INC 104 | ################################# 105 | .globl op_inc 106 | op_inc: 107 | __ENTER 108 | inc rax 109 | __LEAVE 110 | ################################# 111 | # DEC 112 | ################################# 113 | .globl op_dec 114 | op_dec: 115 | __ENTER 116 | dec rax 117 | __LEAVE 118 | ################################# 119 | # TEST 120 | ################################# 121 | .globl op_test 122 | op_test: 123 | __ENTER 124 | test rax,rcx 125 | __LEAVE 126 | ################################# 127 | # CMP 128 | ################################# 129 | .globl op_cmp 130 | op_cmp: 131 | __ENTER 132 | cmp rax,rcx 133 | __LEAVE 134 | ################################# 135 | # MUL 136 | ################################# 137 | .globl op_mul 138 | op_mul: 139 | __ENTER 140 | mul rcx 141 | __LEAVE 142 | ################################# 143 | # IMUL 144 | ################################# 145 | .globl op_imul 146 | op_imul: 147 | __ENTER 148 | imul rcx 149 | __LEAVE 150 | ################################# 151 | # DIV 152 | ################################# 153 | .globl op_div 154 | op_div: 155 | __ENTER 156 | div rcx 157 | __LEAVE 158 | ################################# 159 | # IDIV 160 | ################################# 161 | .globl op_idiv 162 | op_idiv: 163 | __ENTER 164 | idiv rcx 165 | __LEAVE 166 | ################################# 167 | # NOT 168 | ################################# 169 | .globl op_not 170 | op_not: 171 | __ENTER 172 | not rax 173 | __LEAVE 174 | ################################# 175 | # NEG 176 | ################################# 177 | .globl op_neg 178 | op_neg: 179 | __ENTER 180 | neg rax 181 | __LEAVE 182 | ################################# 183 | # SHR 184 | ################################# 185 | .globl op_shr 186 | op_shr: 187 | __ENTER 188 | shr rax,cl 189 | __LEAVE 190 | ################################# 191 | # SHL 192 | ################################# 193 | .globl op_shl 194 | op_shl: 195 | __ENTER 196 | shl rax,cl 197 | __LEAVE 198 | ################################# 199 | # SAR 200 | ################################# 201 | .globl op_sar 202 | op_sar: 203 | __ENTER 204 | sar rax,cl 205 | __LEAVE 206 | ################################# 207 | # ROL 208 | ################################# 209 | .globl op_rol 210 | op_rol: 211 | __ENTER 212 | rol rax,cl 213 | __LEAVE 214 | ################################# 215 | # ROR 216 | ################################# 217 | .globl op_ror 218 | op_ror: 219 | __ENTER 220 | ror rax,cl 221 | __LEAVE 222 | ################################# 223 | # RCL 224 | ################################# 225 | .globl op_rcl 226 | op_rcl: 227 | __ENTER 228 | rcl rax,cl 229 | __LEAVE 230 | ################################# 231 | # RCR 232 | ################################# 233 | .globl op_rcr 234 | op_rcr: 235 | __ENTER 236 | rcr rax,cl 237 | __LEAVE 238 | ################################# 239 | # CPUID 240 | ################################# 241 | .globl op_cpuid 242 | op_cpuid: 243 | __ENTER 244 | cpuid 245 | __LEAVE 246 | ################################# 247 | # RDTSC 248 | ################################# 249 | .globl op_rdtsc 250 | op_rdtsc: 251 | __ENTER 252 | rdtsc 253 | __LEAVE 254 | ################################# 255 | # BSWAP 256 | ################################# 257 | .globl op_bswap 258 | op_bswap: 259 | __ENTER 260 | bswap rax 261 | __LEAVE 262 | ################################# 263 | # BSF 264 | ################################# 265 | .globl op_bsf 266 | op_bsf: 267 | __ENTER 268 | bsf rax,rcx 269 | __LEAVE 270 | ################################# 271 | # BSR 272 | ################################# 273 | .globl op_bsr 274 | op_bsr: 275 | __ENTER 276 | bsr rax,rcx 277 | __LEAVE 278 | ################################# 279 | # BT 280 | ################################# 281 | .globl op_bt 282 | op_bt: 283 | __ENTER 284 | bt rax,rcx 285 | __LEAVE 286 | ################################# 287 | # BTS 288 | ################################# 289 | .globl op_bts 290 | op_bts: 291 | __ENTER 292 | bts rax,rcx 293 | __LEAVE 294 | ################################# 295 | # BTR 296 | ################################# 297 | .globl op_btr 298 | op_btr: 299 | __ENTER 300 | btr rax,rcx 301 | __LEAVE 302 | ################################# 303 | # BTC 304 | ################################# 305 | .globl op_btc 306 | op_btc: 307 | __ENTER 308 | btc rax,rcx 309 | __LEAVE 310 | ################################# 311 | # MOVZX R64,R8 312 | ################################# 313 | .globl op_movzx_r8 314 | op_movzx_r8: 315 | __ENTER 316 | movzx rax,cl 317 | __LEAVE 318 | ################################# 319 | # MOVZX R64,R16 320 | ################################# 321 | .globl op_movzx_r16 322 | op_movzx_r16: 323 | __ENTER 324 | movzx rax,cx 325 | __LEAVE 326 | ################################# 327 | # MOVSX R64,R8 328 | ################################# 329 | .globl op_movsx_r8 330 | op_movsx_r8: 331 | __ENTER 332 | movsx rax,cl 333 | __LEAVE 334 | ################################# 335 | # MOVSX R64,R16 336 | ################################# 337 | .globl op_movsx_r16 338 | op_movsx_r16: 339 | __ENTER 340 | movsx rax,cx 341 | __LEAVE 342 | ################################# 343 | # XADD 344 | ################################# 345 | .globl op_xadd 346 | op_xadd: 347 | __ENTER 348 | xadd rax,rcx 349 | __LEAVE 350 | -------------------------------------------------------------------------------- /asm/msvc64.asm: -------------------------------------------------------------------------------- 1 | RECDATA64 STRUCT 2 | OPERAND DQ(4) dup(?) 3 | RESULT DQ(4) dup(?) 4 | FLAG DQ(2) dup(?) 5 | RECDATA64 ENDS 6 | 7 | __ENTER MACRO 8 | push rbp 9 | mov rbp,rsp 10 | push rax 11 | push rcx 12 | push rdx 13 | push rbx 14 | push rsi 15 | push rdi 16 | pushf 17 | 18 | mov rsi,RCX ; // Microsoft x64 calling convention 19 | mov rax,(RECDATA64 PTR [rsi]).OPERAND[0] 20 | mov rcx,(RECDATA64 PTR [rsi]).OPERAND[8] 21 | mov rdx,(RECDATA64 PTR [rsi]).OPERAND[16] 22 | mov rbx,(RECDATA64 PTR [rsi]).OPERAND[24] 23 | push (RECDATA64 PTR [rsi]).FLAG[0] 24 | popf 25 | ENDM 26 | 27 | __LEAVE MACRO 28 | mov (RECDATA64 PTR [rsi]).RESULT[0],rax 29 | mov (RECDATA64 PTR [rsi]).RESULT[8],rdx 30 | mov (RECDATA64 PTR [rsi]).RESULT[16],rcx 31 | mov (RECDATA64 PTR [rsi]).RESULT[24],rbx 32 | pushf 33 | pop (RECDATA64 PTR [rsi]).FLAG[8] 34 | 35 | popf 36 | pop rdi 37 | pop rsi 38 | pop rbx 39 | pop rdx 40 | pop rcx 41 | pop rax 42 | mov rsp,rbp 43 | pop rbp 44 | ret 45 | ENDM 46 | 47 | _TEXT SEGMENT 48 | ;################################ 49 | ; ADD 50 | ;################################ 51 | op_add PROC 52 | __ENTER 53 | add rax,rcx 54 | __LEAVE 55 | op_add ENDP 56 | ;################################ 57 | ; SUB 58 | ;################################ 59 | op_sub PROC 60 | __ENTER 61 | sub rax,rcx 62 | __LEAVE 63 | op_sub ENDP 64 | ;################################ 65 | ; ADC 66 | ;################################ 67 | op_adc PROC 68 | __ENTER 69 | adc rax,rcx 70 | __LEAVE 71 | op_adc ENDP 72 | ;################################ 73 | ; SBB 74 | ;################################ 75 | op_sbb PROC 76 | __ENTER 77 | sbb rax,rcx 78 | __LEAVE 79 | op_sbb ENDP 80 | ;################################ 81 | ; AND 82 | ;################################ 83 | op_and PROC 84 | __ENTER 85 | and rax,rcx 86 | __LEAVE 87 | op_and ENDP 88 | ;################################ 89 | ; XOR 90 | ;################################ 91 | op_xor PROC 92 | __ENTER 93 | xor rax,rcx 94 | __LEAVE 95 | op_xor ENDP 96 | ;################################ 97 | ; OR 98 | ;################################ 99 | op_or PROC 100 | __ENTER 101 | or rax,rcx 102 | __LEAVE 103 | op_or ENDP 104 | ;################################ 105 | ; INC 106 | ;################################ 107 | op_inc PROC 108 | __ENTER 109 | inc rax 110 | __LEAVE 111 | op_inc ENDP 112 | ;################################ 113 | ; DEC 114 | ;################################ 115 | op_dec PROC 116 | __ENTER 117 | dec rax 118 | __LEAVE 119 | op_dec ENDP 120 | ;################################ 121 | ; TEST 122 | ;################################ 123 | op_test PROC 124 | __ENTER 125 | test rax,rcx 126 | __LEAVE 127 | op_test ENDP 128 | ;################################ 129 | ; CMP 130 | ;################################ 131 | op_cmp PROC 132 | __ENTER 133 | cmp rax,rcx 134 | __LEAVE 135 | op_cmp ENDP 136 | ;################################ 137 | ; MUL 138 | ;################################ 139 | op_mul PROC 140 | __ENTER 141 | mul rcx 142 | __LEAVE 143 | op_mul ENDP 144 | ;################################ 145 | ; IMUL 146 | ;################################ 147 | op_imul PROC 148 | __ENTER 149 | imul rcx 150 | __LEAVE 151 | op_imul ENDP 152 | ;################################ 153 | ; DIV 154 | ;################################ 155 | op_div PROC 156 | __ENTER 157 | div rcx 158 | __LEAVE 159 | op_div ENDP 160 | ;################################ 161 | ; IDIV 162 | ;################################ 163 | op_idiv PROC 164 | __ENTER 165 | idiv rcx 166 | __LEAVE 167 | op_idiv ENDP 168 | ;################################ 169 | ; NOT 170 | ;################################ 171 | op_not PROC 172 | __ENTER 173 | not rax 174 | __LEAVE 175 | op_not ENDP 176 | ;################################ 177 | ; NEG 178 | ;################################ 179 | op_neg PROC 180 | __ENTER 181 | neg rax 182 | __LEAVE 183 | op_neg ENDP 184 | ;################################ 185 | ; SHR 186 | ;################################ 187 | op_shr PROC 188 | __ENTER 189 | shr rax,cl 190 | __LEAVE 191 | op_shr ENDP 192 | ;################################ 193 | ; SHL 194 | ;################################ 195 | op_shl PROC 196 | __ENTER 197 | shl rax,cl 198 | __LEAVE 199 | op_shl ENDP 200 | ;################################ 201 | ; SAR 202 | ;################################ 203 | op_sar PROC 204 | __ENTER 205 | sar rax,cl 206 | __LEAVE 207 | op_sar ENDP 208 | ;################################ 209 | ; ROL 210 | ;################################ 211 | op_rol PROC 212 | __ENTER 213 | rol rax,cl 214 | __LEAVE 215 | op_rol ENDP 216 | ;################################ 217 | ; ROR 218 | ;################################ 219 | op_ror PROC 220 | __ENTER 221 | ror rax,cl 222 | __LEAVE 223 | op_ror ENDP 224 | ;################################ 225 | ; RCL 226 | ;################################ 227 | op_rcl PROC 228 | __ENTER 229 | rcl rax,cl 230 | __LEAVE 231 | op_rcl ENDP 232 | ;################################ 233 | ; RCR 234 | ;################################ 235 | op_rcr PROC 236 | __ENTER 237 | rcr rax,cl 238 | __LEAVE 239 | op_rcr ENDP 240 | ;################################ 241 | ; CPUID 242 | ;################################ 243 | op_cpuid PROC 244 | __ENTER 245 | cpuid 246 | __LEAVE 247 | op_cpuid ENDP 248 | ;################################ 249 | ; RDTSC 250 | ;################################ 251 | op_rdtsc PROC 252 | __ENTER 253 | rdtsc 254 | __LEAVE 255 | op_rdtsc ENDP 256 | ;################################ 257 | ; BSWAP 258 | ;################################ 259 | op_bswap PROC 260 | __ENTER 261 | bswap rax 262 | __LEAVE 263 | op_bswap ENDP 264 | ;################################ 265 | ; BSF 266 | ;################################ 267 | op_bsf PROC 268 | __ENTER 269 | bsf rax,rcx 270 | __LEAVE 271 | op_bsf ENDP 272 | ;################################ 273 | ; BSR 274 | ;################################ 275 | op_bsr PROC 276 | __ENTER 277 | bsr rax,rcx 278 | __LEAVE 279 | op_bsr ENDP 280 | ;################################ 281 | ; BT 282 | ;################################ 283 | op_bt PROC 284 | __ENTER 285 | bt rax,rcx 286 | __LEAVE 287 | op_bt ENDP 288 | ;################################ 289 | ; BTS 290 | ;################################ 291 | op_bts PROC 292 | __ENTER 293 | bts rax,rcx 294 | __LEAVE 295 | op_bts ENDP 296 | ;################################ 297 | ; BTR 298 | ;################################ 299 | op_btr PROC 300 | __ENTER 301 | btr rax,rcx 302 | __LEAVE 303 | op_btr ENDP 304 | ;################################ 305 | ; BTC 306 | ;################################ 307 | op_btc PROC 308 | __ENTER 309 | btc rax,rcx 310 | __LEAVE 311 | op_btc ENDP 312 | ;################################# 313 | ;# MOVZX R64,R8 314 | ;################################# 315 | op_movzx_r8 PROC 316 | __ENTER 317 | movzx rax,cl 318 | __LEAVE 319 | op_movzx_r8 ENDP 320 | ;################################# 321 | ;# MOVZX R64,R16 322 | ;################################# 323 | op_movzx_r16 PROC 324 | __ENTER 325 | movzx rax,cx 326 | __LEAVE 327 | op_movzx_r16 ENDP 328 | ;################################# 329 | ;# MOVSX R64,R8 330 | ;################################# 331 | op_movsx_r8 PROC 332 | __ENTER 333 | movsx rax,cl 334 | __LEAVE 335 | op_movsx_r8 ENDP 336 | ;################################# 337 | ;# MOVSX R64,R16 338 | ;################################# 339 | op_movsx_r16 PROC 340 | __ENTER 341 | movsx rax,cx 342 | __LEAVE 343 | op_movsx_r16 ENDP 344 | ;################################ 345 | ; XADD 346 | ;################################ 347 | op_xadd PROC 348 | __ENTER 349 | xadd rax,rcx 350 | __LEAVE 351 | op_xadd ENDP 352 | 353 | _TEXT ENDS 354 | 355 | END 356 | -------------------------------------------------------------------------------- /asm/msvc32.asm: -------------------------------------------------------------------------------- 1 | .586 2 | .MODEL FLAT, C 3 | .STACK 4 | .DATA 5 | .CODE 6 | 7 | RECDATA32 STRUCT 8 | OPERAND DD(4) dup(?) 9 | RESULT DD(4) dup(?) 10 | FLAG DD(2) dup(?) 11 | RECDATA32 ENDS 12 | 13 | assume esi:PTR RECDATA32 14 | 15 | __ENTER MACRO 16 | push ebp 17 | mov ebp,esp 18 | pusha 19 | pushf 20 | 21 | mov esi,DWORD PTR[ebp+8] 22 | mov eax,[esi].OPERAND[0] 23 | mov ecx,[esi].OPERAND[4] 24 | mov edx,[esi].OPERAND[8] 25 | mov ebx,[esi].OPERAND[12] 26 | push [esi].FLAG[0] 27 | popf 28 | ENDM 29 | 30 | __LEAVE MACRO 31 | mov [esi].RESULT[0],eax 32 | mov [esi].RESULT[4],edx 33 | mov [esi].RESULT[8],ecx 34 | mov [esi].RESULT[12],ebx 35 | pushf 36 | pop [esi].FLAG[4] 37 | 38 | popf 39 | popa 40 | mov esp,ebp 41 | pop ebp 42 | retn 43 | ENDM 44 | ;################################ 45 | ; ADD 46 | ;################################ 47 | op_add PROC 48 | __ENTER 49 | add eax,ecx 50 | __LEAVE 51 | op_add ENDP 52 | ;################################ 53 | ; SUB 54 | ;################################ 55 | op_sub PROC 56 | __ENTER 57 | sub eax,ecx 58 | __LEAVE 59 | op_sub ENDP 60 | ;################################ 61 | ; ADC 62 | ;################################ 63 | op_adc PROC 64 | __ENTER 65 | adc eax,ecx 66 | __LEAVE 67 | op_adc ENDP 68 | ;################################ 69 | ; SBB 70 | ;################################ 71 | op_sbb PROC 72 | __ENTER 73 | sbb eax,ecx 74 | __LEAVE 75 | op_sbb ENDP 76 | ;################################ 77 | ; AND 78 | ;################################ 79 | op_and PROC 80 | __ENTER 81 | and eax,ecx 82 | __LEAVE 83 | op_and ENDP 84 | ;################################ 85 | ; XOR 86 | ;################################ 87 | op_xor PROC 88 | __ENTER 89 | xor eax,ecx 90 | __LEAVE 91 | op_xor ENDP 92 | ;################################ 93 | ; OR 94 | ;################################ 95 | op_or PROC 96 | __ENTER 97 | or eax,ecx 98 | __LEAVE 99 | op_or ENDP 100 | ;################################ 101 | ; INC 102 | ;################################ 103 | op_inc PROC 104 | __ENTER 105 | inc eax 106 | __LEAVE 107 | op_inc ENDP 108 | ;################################ 109 | ; DEC 110 | ;################################ 111 | op_dec PROC 112 | __ENTER 113 | dec eax 114 | __LEAVE 115 | op_dec ENDP 116 | ;################################ 117 | ; TEST 118 | ;################################ 119 | op_test PROC 120 | __ENTER 121 | test eax,ecx 122 | __LEAVE 123 | op_test ENDP 124 | ;################################ 125 | ; CMP 126 | ;################################ 127 | op_cmp PROC 128 | __ENTER 129 | cmp eax,ecx 130 | __LEAVE 131 | op_cmp ENDP 132 | ;################################ 133 | ; MUL 134 | ;################################ 135 | op_mul PROC 136 | __ENTER 137 | mul ecx 138 | __LEAVE 139 | op_mul ENDP 140 | ;################################ 141 | ; IMUL 142 | ;################################ 143 | op_imul PROC 144 | __ENTER 145 | imul ecx 146 | __LEAVE 147 | op_imul ENDP 148 | ;################################ 149 | ; DIV 150 | ;################################ 151 | op_div PROC 152 | __ENTER 153 | div ecx 154 | __LEAVE 155 | op_div ENDP 156 | ;################################ 157 | ; IDIV 158 | ;################################ 159 | op_idiv PROC 160 | __ENTER 161 | idiv ecx 162 | __LEAVE 163 | op_idiv ENDP 164 | ;################################ 165 | ; NOT 166 | ;################################ 167 | op_not PROC 168 | __ENTER 169 | not eax 170 | __LEAVE 171 | op_not ENDP 172 | ;################################ 173 | ; NEG 174 | ;################################ 175 | op_neg PROC 176 | __ENTER 177 | neg eax 178 | __LEAVE 179 | op_neg ENDP 180 | ;################################ 181 | ; SHR 182 | ;################################ 183 | op_shr PROC 184 | __ENTER 185 | shr eax,cl 186 | __LEAVE 187 | op_shr ENDP 188 | ;################################ 189 | ; SHL 190 | ;################################ 191 | op_shl PROC 192 | __ENTER 193 | shl eax,cl 194 | __LEAVE 195 | op_shl ENDP 196 | ;################################ 197 | ; SAR 198 | ;################################ 199 | op_sar PROC 200 | __ENTER 201 | sar eax,cl 202 | __LEAVE 203 | op_sar ENDP 204 | 205 | ;################################ 206 | ; ROL 207 | ;################################ 208 | op_rol PROC 209 | __ENTER 210 | rol eax,cl 211 | __LEAVE 212 | op_rol ENDP 213 | ;################################ 214 | ; ROR 215 | ;################################ 216 | op_ror PROC 217 | __ENTER 218 | ror eax,cl 219 | __LEAVE 220 | op_ror ENDP 221 | ;################################ 222 | ; RCL 223 | ;################################ 224 | op_rcl PROC 225 | __ENTER 226 | rcl eax,cl 227 | __LEAVE 228 | op_rcl ENDP 229 | ;################################ 230 | ; RCR 231 | ;################################ 232 | op_rcr PROC 233 | __ENTER 234 | rcr eax,cl 235 | __LEAVE 236 | op_rcr ENDP 237 | ;################################ 238 | ; CPUID 239 | ;################################ 240 | op_cpuid PROC 241 | __ENTER 242 | cpuid 243 | __LEAVE 244 | op_cpuid ENDP 245 | ;################################ 246 | ; RDTSC 247 | ;################################ 248 | op_rdtsc PROC 249 | __ENTER 250 | rdtsc 251 | __LEAVE 252 | op_rdtsc ENDP 253 | ;################################ 254 | ; BSWAP 255 | ;################################ 256 | op_bswap PROC 257 | __ENTER 258 | bswap eax 259 | __LEAVE 260 | op_bswap ENDP 261 | ;################################ 262 | ; BSF 263 | ;################################ 264 | op_bsf PROC 265 | __ENTER 266 | bsf eax,ecx 267 | __LEAVE 268 | op_bsf ENDP 269 | ;################################ 270 | ; BSR 271 | ;################################ 272 | op_bsr PROC 273 | __ENTER 274 | bsr eax,ecx 275 | __LEAVE 276 | op_bsr ENDP 277 | ;################################ 278 | ; BT 279 | ;################################ 280 | op_bt PROC 281 | __ENTER 282 | bt eax,ecx 283 | __LEAVE 284 | op_bt ENDP 285 | ;################################ 286 | ; BTS 287 | ;################################ 288 | op_bts PROC 289 | __ENTER 290 | bts eax,ecx 291 | __LEAVE 292 | op_bts ENDP 293 | ;################################ 294 | ; BTR 295 | ;################################ 296 | op_btr PROC 297 | __ENTER 298 | btr eax,ecx 299 | __LEAVE 300 | op_btr ENDP 301 | ;################################ 302 | ; BTC 303 | ;################################ 304 | op_btc PROC 305 | __ENTER 306 | btc eax,ecx 307 | __LEAVE 308 | op_btc ENDP 309 | ;################################# 310 | ;# MOVZX R32,R8 311 | ;################################# 312 | op_movzx_r8 PROC 313 | __ENTER 314 | movzx eax,cl 315 | __LEAVE 316 | op_movzx_r8 ENDP 317 | ;################################# 318 | ;# MOVZX R32,R16 319 | ;################################# 320 | op_movzx_r16 PROC 321 | __ENTER 322 | movzx eax,cx 323 | __LEAVE 324 | op_movzx_r16 ENDP 325 | ;################################# 326 | ;# MOVSX R32,R8 327 | ;################################# 328 | op_movsx_r8 PROC 329 | __ENTER 330 | movsx eax,cl 331 | __LEAVE 332 | op_movsx_r8 ENDP 333 | ;################################# 334 | ;# MOVSX R32,R16 335 | ;################################# 336 | op_movsx_r16 PROC 337 | __ENTER 338 | movsx eax,cx 339 | __LEAVE 340 | op_movsx_r16 ENDP 341 | ;################################ 342 | ; XADD 343 | ;################################ 344 | op_xadd PROC 345 | __ENTER 346 | xadd eax,ecx 347 | __LEAVE 348 | op_xadd ENDP 349 | ;################################ 350 | ; DAA 351 | ;################################ 352 | op_daa PROC 353 | __ENTER 354 | daa 355 | __LEAVE 356 | op_daa ENDP 357 | ;################################ 358 | ; DAS 359 | ;################################ 360 | op_das PROC 361 | __ENTER 362 | das 363 | __LEAVE 364 | op_das ENDP 365 | ;################################ 366 | ; AAA 367 | ;################################ 368 | op_aaa PROC 369 | __ENTER 370 | aaa 371 | __LEAVE 372 | op_aaa ENDP 373 | ;################################ 374 | ; AAS 375 | ;################################ 376 | op_aas PROC 377 | __ENTER 378 | aas 379 | __LEAVE 380 | op_aas ENDP 381 | ;################################ 382 | ; AAM 383 | ;################################ 384 | op_aam PROC 385 | __ENTER 386 | aam 387 | __LEAVE 388 | op_aam ENDP 389 | ;################################ 390 | ; AAD 391 | ;################################ 392 | op_aad PROC 393 | __ENTER 394 | aad 395 | __LEAVE 396 | op_aad ENDP 397 | ;################################ 398 | ;################################ 399 | END 400 | -------------------------------------------------------------------------------- /asm/gcc32.s: -------------------------------------------------------------------------------- 1 | .intel_syntax noprefix 2 | #ifdef __linux__ 3 | .section .note.GNU-stack,"",%progbits 4 | #endif 5 | .text 6 | 7 | .macro __ENTER 8 | push ebp 9 | mov ebp,esp 10 | push eax 11 | push edx 12 | push ecx 13 | push esi 14 | pushf 15 | 16 | mov esi,DWORD PTR[ebp+8] 17 | mov eax,DWORD PTR[esi+0] 18 | mov ecx,DWORD PTR[esi+4] 19 | mov edx,DWORD PTR[esi+8] 20 | mov ebx,DWORD PTR[esi+12] 21 | push DWORD PTR[esi+32] 22 | popf 23 | .endm 24 | 25 | .macro __LEAVE 26 | mov DWORD PTR[esi+16],eax 27 | mov DWORD PTR[esi+20],edx 28 | mov DWORD PTR[esi+24],ecx 29 | mov DWORD PTR[esi+28],ebx 30 | pushf 31 | pop DWORD PTR[esi+36] 32 | 33 | popf 34 | pop esi 35 | pop ecx 36 | pop edx 37 | pop eax 38 | mov esp,ebp 39 | pop ebp 40 | ret 41 | .endm 42 | ################################# 43 | # ADD 44 | ################################# 45 | .globl op_add 46 | op_add: 47 | __ENTER 48 | add eax,ecx 49 | __LEAVE 50 | ################################# 51 | # SUB 52 | ################################# 53 | .globl op_sub 54 | op_sub: 55 | __ENTER 56 | sub eax,ecx 57 | __LEAVE 58 | ################################# 59 | # ADC 60 | ################################# 61 | .globl op_adc 62 | op_adc: 63 | __ENTER 64 | adc eax,ecx 65 | __LEAVE 66 | ################################# 67 | # SBB 68 | ################################# 69 | .globl op_sbb 70 | op_sbb: 71 | __ENTER 72 | sbb eax,ecx 73 | __LEAVE 74 | ################################# 75 | # AND 76 | ################################# 77 | .globl op_and 78 | op_and: 79 | __ENTER 80 | and eax,ecx 81 | __LEAVE 82 | ################################# 83 | # XOR 84 | ################################# 85 | .globl op_xor 86 | op_xor: 87 | __ENTER 88 | xor eax,ecx 89 | __LEAVE 90 | ################################# 91 | # OR 92 | ################################# 93 | .globl op_or 94 | op_or: 95 | __ENTER 96 | or eax,ecx 97 | __LEAVE 98 | ################################# 99 | # INC 100 | ################################# 101 | .globl op_inc 102 | op_inc: 103 | __ENTER 104 | inc eax 105 | __LEAVE 106 | ################################# 107 | # DEC 108 | ################################# 109 | .globl op_dec 110 | op_dec: 111 | __ENTER 112 | dec eax 113 | __LEAVE 114 | ################################# 115 | # TEST 116 | ################################# 117 | .globl op_test 118 | op_test: 119 | __ENTER 120 | test eax,ecx 121 | __LEAVE 122 | ################################# 123 | # CMP 124 | ################################# 125 | .globl op_cmp 126 | op_cmp: 127 | __ENTER 128 | cmp eax,ecx 129 | __LEAVE 130 | ################################# 131 | # MUL 132 | ################################# 133 | .globl op_mul 134 | op_mul: 135 | __ENTER 136 | mul ecx 137 | __LEAVE 138 | ################################# 139 | # IMUL 140 | ################################# 141 | .globl op_imul 142 | op_imul: 143 | __ENTER 144 | imul ecx 145 | __LEAVE 146 | ################################# 147 | # DIV 148 | ################################# 149 | .globl op_div 150 | op_div: 151 | __ENTER 152 | div ecx 153 | __LEAVE 154 | ################################# 155 | # IDIV 156 | ################################# 157 | .globl op_idiv 158 | op_idiv: 159 | __ENTER 160 | idiv ecx 161 | __LEAVE 162 | ################################# 163 | # NOT 164 | ################################# 165 | .globl op_not 166 | op_not: 167 | __ENTER 168 | not eax 169 | __LEAVE 170 | ################################# 171 | # NEG 172 | ################################# 173 | .globl op_neg 174 | op_neg: 175 | __ENTER 176 | neg eax 177 | __LEAVE 178 | ################################# 179 | # SHR 180 | ################################# 181 | .globl op_shr 182 | op_shr: 183 | __ENTER 184 | shr eax,cl 185 | __LEAVE 186 | ################################# 187 | # SHL 188 | ################################# 189 | .globl op_shl 190 | op_shl: 191 | __ENTER 192 | shl eax,cl 193 | __LEAVE 194 | ################################# 195 | # SAR 196 | ################################# 197 | .globl op_sar 198 | op_sar: 199 | __ENTER 200 | sar eax,cl 201 | __LEAVE 202 | ################################# 203 | # ROL 204 | ################################# 205 | .globl op_rol 206 | op_rol: 207 | __ENTER 208 | rol eax,cl 209 | __LEAVE 210 | ################################# 211 | # ROR 212 | ################################# 213 | .globl op_ror 214 | op_ror: 215 | __ENTER 216 | ror eax,cl 217 | __LEAVE 218 | ################################# 219 | # RCL 220 | ################################# 221 | .globl op_rcl 222 | op_rcl: 223 | __ENTER 224 | rcl eax,cl 225 | __LEAVE 226 | ################################# 227 | # RCR 228 | ################################# 229 | .globl op_rcr 230 | op_rcr: 231 | __ENTER 232 | rcr eax,cl 233 | __LEAVE 234 | ################################# 235 | # CPUID 236 | ################################# 237 | .globl op_cpuid 238 | op_cpuid: 239 | __ENTER 240 | cpuid 241 | __LEAVE 242 | ################################# 243 | # RDTSC 244 | ################################# 245 | .globl op_rdtsc 246 | op_rdtsc: 247 | __ENTER 248 | rdtsc 249 | __LEAVE 250 | ################################# 251 | # BSWAP 252 | ################################# 253 | .globl op_bswap 254 | op_bswap: 255 | __ENTER 256 | bswap eax 257 | __LEAVE 258 | ################################# 259 | # BSF 260 | ################################# 261 | .globl op_bsf 262 | op_bsf: 263 | __ENTER 264 | bsf eax,ecx 265 | __LEAVE 266 | ################################# 267 | # BSR 268 | ################################# 269 | .globl op_bsr 270 | op_bsr: 271 | __ENTER 272 | bsr eax,ecx 273 | __LEAVE 274 | ################################# 275 | # BT 276 | ################################# 277 | .globl op_bt 278 | op_bt: 279 | __ENTER 280 | bt eax,ecx 281 | __LEAVE 282 | ################################# 283 | # BTS 284 | ################################# 285 | .globl op_bts 286 | op_bts: 287 | __ENTER 288 | bts eax,ecx 289 | __LEAVE 290 | ################################# 291 | # BTR 292 | ################################# 293 | .globl op_btr 294 | op_btr: 295 | __ENTER 296 | btr eax,ecx 297 | __LEAVE 298 | ################################# 299 | # BTC 300 | ################################# 301 | .globl op_btc 302 | op_btc: 303 | __ENTER 304 | btc eax,ecx 305 | __LEAVE 306 | ################################# 307 | # MOVZX R32,R8 308 | ################################# 309 | .globl op_movzx_r8 310 | op_movzx_r8: 311 | __ENTER 312 | movzx eax,cl 313 | __LEAVE 314 | ################################# 315 | # MOVZX R32,R16 316 | ################################# 317 | .globl op_movzx_r16 318 | op_movzx_r16: 319 | __ENTER 320 | movzx eax,cx 321 | __LEAVE 322 | ################################# 323 | # MOVSX R32,R8 324 | ################################# 325 | .globl op_movsx_r8 326 | op_movsx_r8: 327 | __ENTER 328 | movsx eax,cl 329 | __LEAVE 330 | ################################# 331 | # MOVSX R32,R16 332 | ################################# 333 | .globl op_movsx_r16 334 | op_movsx_r16: 335 | __ENTER 336 | movsx eax,cx 337 | __LEAVE 338 | ################################# 339 | # XADD 340 | ################################# 341 | .globl op_xadd 342 | op_xadd: 343 | __ENTER 344 | xadd eax,ecx 345 | __LEAVE 346 | ################################# 347 | # DAA 348 | ################################# 349 | .globl op_daa 350 | op_daa: 351 | __ENTER 352 | daa 353 | __LEAVE 354 | ################################# 355 | # DAS 356 | ################################# 357 | .globl op_das 358 | op_das: 359 | __ENTER 360 | das 361 | __LEAVE 362 | ################################# 363 | # AAA 364 | ################################# 365 | .globl op_aaa 366 | op_aaa: 367 | __ENTER 368 | aaa 369 | __LEAVE 370 | ################################# 371 | # AAS 372 | ################################# 373 | .globl op_aas 374 | op_aas: 375 | __ENTER 376 | aas 377 | __LEAVE 378 | ################################# 379 | # AAM 380 | ################################# 381 | .globl op_aam 382 | op_aam: 383 | __ENTER 384 | aam 385 | __LEAVE 386 | ################################# 387 | # AAD 388 | ################################# 389 | .globl op_aad 390 | op_aad: 391 | __ENTER 392 | aad 393 | __LEAVE 394 | -------------------------------------------------------------------------------- /THANKS.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | 4 | 15 | 16 | 17 | 18 | 32 | 33 | 34 | 35 | 49 | 50 | 51 | 52 | 66 | 67 | 68 | 69 | 77 | 78 | 79 | 80 | 94 | 95 | 96 | 97 | 111 | 112 | 113 | 114 | 125 | 126 | 127 | 128 | 142 | 143 | 144 | 145 | 159 | 160 | 161 | 162 | 176 | 177 | 178 | 179 | 190 | 191 | 192 | 193 | 201 | 202 | 203 | 204 | 215 | 216 | 217 | 218 | 229 | 230 | 231 | 232 | 243 | 244 | 245 | 246 | 257 | 258 | 259 | 260 | 268 | 269 | 270 | 271 | 282 | 283 | 284 | 285 | 296 | 297 | 298 | 299 | 307 | 308 | 309 | 310 | 318 | 319 | 320 | 321 | 332 | 333 | 334 | 335 | 349 | 350 | 351 | 352 | 360 | 361 | 362 | 363 | 371 | 372 |

5 |

6 | Adam Henault 7 |

8 |

9 | Website: http://adamhlt.com/ 10 |

11 |

12 | GitHub: adamhlt 13 |

14 |
19 |

20 | Adric Net 21 |

22 |

23 | Website: http://dfirnotes.net 24 |

25 |

26 | GitHub: adricnet 27 |

28 |

29 | Twitter: dfirnotes 30 |

31 |
36 |

37 | Ali Hadi 38 |

39 |

40 | Website: https://www.ashemery.com 41 |

42 |

43 | GitHub: ashemery 44 |

45 |

46 | Twitter: binaryz0ne 47 |

48 |
53 |

54 | Anderson Leite 55 |

56 |

57 | Website: https://reversing.codes 58 |

59 |

60 | GitHub: buzzer-re 61 |

62 |

63 | Twitter: buzz3r_ 64 |

65 |
70 |

71 | Christopher Layne 72 |

73 |

74 | GitHub: clayne 75 |

76 |
81 |

82 | Dan0xE 83 |

84 |

85 | Website: https://dev.to/ubervisor 86 |

87 |

88 | GitHub: Dan0xE 89 |

90 |

91 | Twitter: dan0xe 92 |

93 |
98 |

99 | Dav Clark 100 |

101 |

102 | Website: https://www.linkedin.com/in/davclark 103 |

104 |

105 | GitHub: davclark 106 |

107 |

108 | Twitter: davclark 109 |

110 |
115 |

116 | David Zimmer 117 |

118 |

119 | Website: http://sandsprite.com 120 |

121 |

122 | GitHub: dzzie 123 |

124 |
129 |

130 | Duncan Ogilvie 131 |

132 |

133 | Website: http://mrexodia.re 134 |

135 |

136 | GitHub: mrexodia 137 |

138 |

139 | Twitter: mrexodia 140 |

141 |
146 |

147 | elastic 148 |

149 |

150 | Website: https://www.elastic.co 151 |

152 |

153 | GitHub: elastic 154 |

155 |

156 | Twitter: elastic 157 |

158 |
163 |

164 | Fernando Mercês 165 |

166 |

167 | Website: https://www.mentebinaria.com.br 168 |

169 |

170 | GitHub: merces 171 |

172 |

173 | Twitter: mer0x36 174 |

175 |
180 |

181 | Filip Navara 182 |

183 |

184 | GitHub: filipnavara 185 |

186 |

187 | Twitter: filipnavara 188 |

189 |
194 |

195 | fr0zenbag 196 |

197 |

198 | GitHub: fr0zenbag 199 |

200 |
205 |

206 | FrenchYeti 207 |

208 |

209 | GitHub: FrenchYeti 210 |

211 |

212 | Twitter: frenchyeti 213 |

214 |
219 |

220 | Gilad Reich 221 |

222 |

223 | Website: https://greich.com 224 |

225 |

226 | GitHub: giladreich 227 |

228 |
233 |

234 | Derick Estrada 235 |

236 |

237 | Website: hamsteri.co 238 |

239 |

240 | GitHub: hmstk 241 |

242 |
247 |

248 | Integral-Tech 249 |

250 |

251 | Website: https://integral.org.cn/ 252 |

253 |

254 | GitHub: Integral-Tech 255 |

256 |
261 |

262 | Jason Jack Tan 263 |

264 |

265 | GitHub: Perthys 266 |

267 |
272 |

273 | João Vitor 274 |

275 |

276 | Website: http://joaovitor.gq 277 |

278 |

279 | GitHub: keowu 280 |

281 |
286 |

287 | Leandro Fróes 288 |

289 |

290 | GitHub: leandrofroes 291 |

292 |

293 | Twitter: leandrofr0es 294 |

295 |
300 |

301 | misonothx 302 |

303 |

304 | GitHub: miso-xyz 305 |

306 |
311 |

312 | miT231-spec 313 |

314 |

315 | GitHub: miT231-spec 316 |

317 |
322 |

323 | phithon 324 |

325 |

326 | Website: https://www.leavesongs.com 327 |

328 |

329 | GitHub: phith0n 330 |

331 |
336 |

337 | Robert Musser 338 |

339 |

340 | Website: https://rmusser.net/ 341 |

342 |

343 | GitHub: rmusser01 344 |

345 |

346 | Twitter: r_o_b_e_r_t_1 347 |

348 |
353 |

354 | sapdragon 355 |

356 |

357 | GitHub: sapdragon 358 |

359 |
364 |

365 | SpriteOvO 366 |

367 |

368 | GitHub: SpriteOvO 369 |

370 |
373 | -------------------------------------------------------------------------------- /asm_defs.h: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019-2024 hors 2 | * 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy 4 | * of this software and associated documentation files (the "Software"), to deal 5 | * in the Software without restriction, including without limitation the rights 6 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | * copies of the Software, and to permit persons to whom the Software is 8 | * furnished to do so, subject to the following conditions: 9 | * 10 | * The above copyright notice and this permission notice shall be included in all 11 | * copies or substantial portions of the Software. 12 | * 13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | * SOFTWARE. 20 | */ 21 | #ifndef ASM_DEFS_H 22 | #define ASM_DEFS_H 23 | 24 | #include "asm/asm.h" 25 | 26 | namespace ASM_DEF { 27 | struct VALUE_RECORD { 28 | const char *pszRegName; 29 | unsigned long long nMaxValue; 30 | }; 31 | 32 | enum OP { 33 | OP_UNKNOWN = 0, 34 | OP_ADD, 35 | OP_SUB, 36 | OP_ADC, 37 | OP_SBB, 38 | OP_AND, 39 | OP_XOR, 40 | OP_OR, 41 | OP_INC, 42 | OP_DEC, 43 | OP_TEST, 44 | OP_CMP, 45 | OP_MUL, 46 | OP_IMUL, 47 | OP_DIV, 48 | OP_IDIV, 49 | OP_NOT, 50 | OP_NEG, 51 | OP_SHR, 52 | OP_SHL, 53 | OP_SAR, 54 | OP_ROL, 55 | OP_ROR, 56 | OP_RCL, 57 | OP_RCR, 58 | OP_CPUID, 59 | OP_RDTSC, 60 | OP_BSWAP, 61 | OP_BT, 62 | OP_BSF, 63 | OP_BTS, 64 | OP_BTR, 65 | OP_BTC, 66 | OP_BSR, 67 | OP_XADD, 68 | OP_MOVZX_R8, 69 | OP_MOVZX_R16, 70 | OP_MOVSX_R8, 71 | OP_MOVSX_R16, 72 | #ifndef OPCODE64 73 | OP_DAA, 74 | OP_DAS, 75 | OP_AAA, 76 | OP_AAS, 77 | OP_AAM, 78 | OP_AAD 79 | #endif 80 | }; 81 | 82 | const XVALUE CF = 0x0001; 83 | const XVALUE PF = 0x0004; 84 | const XVALUE AF = 0x0010; 85 | const XVALUE ZF = 0x0040; 86 | const XVALUE SF = 0x0080; 87 | const XVALUE OF = 0x0800; 88 | 89 | const unsigned char LIMBS32 = 0x31; 90 | const unsigned char LIMBS64 = 0x63; 91 | const unsigned char LIM8 = 0xFF; 92 | const unsigned short LIM16 = 0xFFFF; 93 | const unsigned int LIM32 = 0xFFFFFFFF; 94 | const unsigned long long LIM64 = 0xFFFFFFFFFFFFFFFF; 95 | 96 | typedef void (*_asm_func)(RECDATA *pRecData); 97 | 98 | struct OPCODE_RECORD { 99 | OP opcode; 100 | _asm_func asm_func; 101 | const char *pszName; 102 | VALUE_RECORD vrOperand[4]; 103 | VALUE_RECORD vrResult[4]; 104 | const char *pszExample; 105 | }; 106 | 107 | #ifdef OPCODE32 108 | const OPCODE_RECORD asm_twooperands[] = { 109 | {OP_ADD, &op_add, "add", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "ADD EAX,ECX"}, 110 | {OP_SUB, &op_sub, "sub", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "SUB EAX,ECX"}, 111 | {OP_ADC, &op_adc, "adc", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "ADC EAX,ECX"}, 112 | {OP_SBB, &op_sbb, "sbb", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "SBB EAX,ECX"}, 113 | {OP_AND, &op_and, "and", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "AND EAX,ECX"}, 114 | {OP_XOR, &op_xor, "xor", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "XOR EAX,ECX"}, 115 | {OP_OR, &op_or, "or", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "OR EAX,ECX"}, 116 | {OP_TEST, &op_test, "test", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"", 0}, {"", 0}, {"", 0}, {"", 0}}, "TEST EAX,ECX"}, 117 | {OP_CMP, &op_cmp, "cmp", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"", 0}, {"", 0}, {"", 0}, {"", 0}}, "CMP EAX,ECX"}, 118 | {OP_XADD, &op_xadd, "xadd", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, "XADD EAX,ECX"}, 119 | {OP_MOVZX_R8, &op_movzx_r8, "movzx r32,r8", {{"EAX", LIM32}, {"CL", LIM8}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "MOVZX EAX,CL"}, 120 | {OP_MOVZX_R16, &op_movzx_r16, "movzx r32,r16", {{"EAX", LIM32}, {"CX", LIM16}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "MOVZX EAX,CX"}, 121 | {OP_MOVSX_R8, &op_movsx_r8, "movsx r32,r8", {{"EAX", LIM32}, {"CL", LIM8}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "MOVSX EAX,CL"}, 122 | {OP_MOVSX_R16, &op_movsx_r16, "movsx r32,r16", {{"EAX", LIM32}, {"CX", LIM16}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "MOVSX EAX,CX"}, 123 | }; 124 | const OPCODE_RECORD asm_oneoperand[] = { 125 | {OP_INC, &op_inc, "inc", {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "INC EAX"}, 126 | {OP_DEC, &op_dec, "dec", {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "DEC EAX"}, 127 | {OP_NOT, &op_not, "not", {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "NOT EAX"}, 128 | {OP_NEG, &op_neg, "neg", {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "NEG EAX"}, 129 | {OP_BSWAP, &op_bswap, "bswap", {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "BSWAP EAX"}, 130 | }; 131 | const OPCODE_RECORD asm_muldiv[] = { 132 | {OP_MUL, &op_mul, "mul", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"EDX", LIM32}, {"", 0}, {"", 0}}, "MUL ECX"}, 133 | {OP_IMUL, &op_imul, "imul", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"EDX", LIM32}, {"", 0}, {"", 0}}, "IMUL ECX"}, 134 | {OP_DIV, &op_div, "div", {{"EAX", LIM32}, {"ECX", LIM32}, {"EDX", LIM32}, {"", 0}}, {{"EAX", LIM32}, {"EDX", LIM32}, {"", 0}, {"", 0}}, "DIV ECX"}, 135 | {OP_IDIV, &op_idiv, "idiv", {{"EAX", LIM32}, {"ECX", LIM32}, {"EDX", LIM32}, {"", 0}}, {{"EAX", LIM32}, {"EDX", LIM32}, {"", 0}, {"", 0}}, "IDIV ECX"}, 136 | }; 137 | const OPCODE_RECORD asm_shift[] = { 138 | {OP_SHR, &op_shr, "shr", {{"EAX", LIM32}, {"CL", LIMBS32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "SHR EAX,CL"}, 139 | {OP_SHL, &op_shl, "shl", {{"EAX", LIM32}, {"CL", LIMBS32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "SHL EAX,CL"}, 140 | {OP_SAR, &op_sar, "sar", {{"EAX", LIM32}, {"CL", LIMBS32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "SAR EAX,CL"}, 141 | {OP_ROL, &op_rol, "rol", {{"EAX", LIM32}, {"CL", LIMBS32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "ROL EAX,CL"}, 142 | {OP_ROR, &op_ror, "ror", {{"EAX", LIM32}, {"CL", LIMBS32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "ROR EAX,CL"}, 143 | {OP_RCL, &op_rcl, "rcl", {{"EAX", LIM32}, {"CL", LIMBS32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "RCL EAX,CL"}, 144 | {OP_RCR, &op_rcr, "rcr", {{"EAX", LIM32}, {"CL", LIMBS32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "RCR EAX,CL"}, 145 | }; 146 | const OPCODE_RECORD asm_bits[] = { 147 | {OP_BT, &op_bt, "bt", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "BT EAX,ECX"}, 148 | {OP_BTS, &op_bts, "bts", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "BTS EAX,ECX"}, 149 | {OP_BTR, &op_btr, "btr", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "BTR EAX,ECX"}, 150 | {OP_BTC, &op_btc, "btc", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "BTC EAX,ECX"}, 151 | {OP_BSF, &op_bsf, "bsf", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "BSF EAX,ECX"}, 152 | {OP_BSR, &op_bsr, "bsr", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "BSR EAX,ECX"}, 153 | }; 154 | const OPCODE_RECORD asm_bcd[] = { 155 | {OP_DAA, &op_daa, "daa", {{"AX", LIM16}, {"", 0}, {"", 0}, {"", 0}}, {{"AX", LIM16}, {"", 0}, {"", 0}, {"", 0}}, "DAA"}, 156 | {OP_DAS, &op_das, "das", {{"AX", LIM16}, {"", 0}, {"", 0}, {"", 0}}, {{"AX", LIM16}, {"", 0}, {"", 0}, {"", 0}}, "DAS"}, 157 | {OP_AAA, &op_aaa, "aaa", {{"AX", LIM16}, {"", 0}, {"", 0}, {"", 0}}, {{"AX", LIM16}, {"", 0}, {"", 0}, {"", 0}}, "AAA"}, 158 | {OP_AAS, &op_aas, "aas", {{"AX", LIM16}, {"", 0}, {"", 0}, {"", 0}}, {{"AX", LIM16}, {"", 0}, {"", 0}, {"", 0}}, "AAS"}, 159 | {OP_AAM, &op_aam, "aam", {{"AX", LIM16}, {"", 0}, {"", 0}, {"", 0}}, {{"AX", LIM16}, {"", 0}, {"", 0}, {"", 0}}, "AAM"}, 160 | {OP_AAD, &op_aad, "aad", {{"AX", LIM16}, {"", 0}, {"", 0}, {"", 0}}, {{"AX", LIM16}, {"", 0}, {"", 0}, {"", 0}}, "AAD"}, 161 | }; 162 | const OPCODE_RECORD asm_special[] = { 163 | {OP_CPUID, &op_cpuid, "cpuid", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"EDX", LIM32}, {"ECX", LIM32}, {"EBX", LIM32}}, "CPUID"}, 164 | {OP_RDTSC, &op_rdtsc, "rdtsc", {{"", 0}, {"", 0}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"EDX", LIM32}, {"", 0}, {"", 0}}, "RDTSC"}, 165 | }; 166 | #else 167 | const OPCODE_RECORD asm_twooperands[] = { 168 | {OP_ADD, &op_add, "add", {{"RAX", LIM64}, {"RCX", LIM64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "ADD RAX,RCX"}, 169 | {OP_SUB, &op_sub, "sub", {{"RAX", LIM64}, {"RCX", LIM64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "SUB RAX,RCX"}, 170 | {OP_ADC, &op_adc, "adc", {{"RAX", LIM64}, {"RCX", LIM64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "ADC RAX,RCX"}, 171 | {OP_SBB, &op_sbb, "sbb", {{"RAX", LIM64}, {"RCX", LIM64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "SBB RAX,RCX"}, 172 | {OP_AND, &op_and, "and", {{"RAX", LIM64}, {"RCX", LIM64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "AND RAX,RCX"}, 173 | {OP_XOR, &op_xor, "xor", {{"RAX", LIM64}, {"RCX", LIM64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "XOR RAX,RCX"}, 174 | {OP_OR, &op_or, "or", {{"RAX", LIM64}, {"RCX", LIM64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "OR RAX,RCX"}, 175 | {OP_TEST, &op_test, "test", {{"RAX", LIM64}, {"RCX", LIM64}, {"", 0}, {"", 0}}, {{"", 0}, {"", 0}, {"", 0}, {"", 0}}, "TEST RAX,RCX"}, 176 | {OP_CMP, &op_cmp, "cmp", {{"RAX", LIM64}, {"RCX", LIM64}, {"", 0}, {"", 0}}, {{"", 0}, {"", 0}, {"", 0}, {"", 0}}, "CMP RAX,RCX"}, 177 | {OP_XADD, &op_xadd, "xadd", {{"RAX", LIM64}, {"RCX", LIM64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"RCX", LIM64}, {"", 0}, {"", 0}}, "XADD RAX,RCX"}, 178 | {OP_MOVZX_R8, &op_movzx_r8, "movzx r64,r8", {{"RAX", LIM64}, {"CL", LIM8}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "MOVZX RAX,CL"}, 179 | {OP_MOVZX_R16, &op_movzx_r16, "movzx r64,r16", {{"RAX", LIM64}, {"CX", LIM16}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "MOVZX RAX,CX"}, 180 | {OP_MOVSX_R8, &op_movsx_r8, "movsx r64,r8", {{"RAX", LIM64}, {"CL", LIM8}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "MOVSX RAX,CL"}, 181 | {OP_MOVSX_R16, &op_movsx_r16, "movsx r64,r16", {{"RAX", LIM64}, {"CX", LIM16}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "MOVSX RAX,CX"}, 182 | }; 183 | const OPCODE_RECORD asm_oneoperand[] = { 184 | {OP_INC, &op_inc, "inc", {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "INC RAX"}, 185 | {OP_DEC, &op_dec, "dec", {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "DEC RAX"}, 186 | {OP_NOT, &op_not, "not", {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "NOT RAX"}, 187 | {OP_NEG, &op_neg, "neg", {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "NEG RAX"}, 188 | {OP_BSWAP, &op_bswap, "bswap", {{"RAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, {{"RAX", LIM32}, {"", 0}, {"", 0}, {"", 0}}, "BSWAP RAX"}, 189 | }; 190 | const OPCODE_RECORD asm_muldiv[] = { 191 | {OP_MUL, &op_mul, "mul", {{"RAX", LIM64}, {"RCX", LIM64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"RDX", LIM64}, {"", 0}, {"", 0}}, "MUL RCX"}, 192 | {OP_IMUL, &op_imul, "imul", {{"RAX", LIM64}, {"RCX", LIM64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"RDX", LIM64}, {"", 0}, {"", 0}}, "IMUL RCX"}, 193 | {OP_DIV, &op_div, "div", {{"RAX", LIM64}, {"RCX", LIM64}, {"RDX", LIM64}, {"", 0}}, {{"RAX", LIM64}, {"RDX", LIM64}, {"", 0}, {"", 0}}, "DIV RCX"}, 194 | {OP_IDIV, &op_idiv, "idiv", {{"RAX", LIM64}, {"RCX", LIM64}, {"RDX", LIM64}, {"", 0}}, {{"RAX", LIM64}, {"RDX", LIM64}, {"", 0}, {"", 0}}, "IDIV RCX"}, 195 | }; 196 | const OPCODE_RECORD asm_shift[] = { 197 | {OP_SHR, &op_shr, "shr", {{"RAX", LIM64}, {"CL", LIMBS64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "SHR RAX,CL"}, 198 | {OP_SHL, &op_shl, "shl", {{"RAX", LIM64}, {"CL", LIMBS64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "SHL RAX,CL"}, 199 | {OP_SAR, &op_sar, "sar", {{"RAX", LIM64}, {"CL", LIMBS64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "SAR RAX,CL"}, 200 | {OP_ROL, &op_rol, "rol", {{"RAX", LIM64}, {"CL", LIMBS64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "ROL RAX,CL"}, 201 | {OP_ROR, &op_ror, "ror", {{"RAX", LIM64}, {"CL", LIMBS64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "ROR RAX,CL"}, 202 | {OP_RCL, &op_rcl, "rcl", {{"RAX", LIM64}, {"CL", LIMBS64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "RCL RAX,CL"}, 203 | {OP_RCR, &op_rcr, "rcr", {{"RAX", LIM64}, {"CL", LIMBS64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "RCR RAX,CL"}, 204 | }; 205 | const OPCODE_RECORD asm_bits[] = { 206 | {OP_BT, &op_bt, "bt", {{"RAX", LIM64}, {"RCX", LIM64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "BT RAX,RCX"}, 207 | {OP_BTS, &op_bts, "bts", {{"RAX", LIM64}, {"RCX", LIM64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "BTS RAX,RCX"}, 208 | {OP_BTR, &op_btr, "btr", {{"RAX", LIM64}, {"RCX", LIM64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "BTR RAX,RCX"}, 209 | {OP_BTC, &op_btc, "btc", {{"RAX", LIM64}, {"RCX", LIM64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "BTC RAX,RCX"}, 210 | {OP_BSF, &op_bsf, "bsf", {{"RAX", LIM64}, {"RCX", LIM64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "BSF RAX,RCX"}, 211 | {OP_BSR, &op_bsr, "bsr", {{"RAX", LIM64}, {"RCX", LIM64}, {"", 0}, {"", 0}}, {{"RAX", LIM64}, {"", 0}, {"", 0}, {"", 0}}, "BSR RAX,RCX"}, 212 | }; 213 | const OPCODE_RECORD asm_special[] = { 214 | {OP_CPUID, &op_cpuid, "cpuid", {{"EAX", LIM32}, {"ECX", LIM32}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"EDX", LIM32}, {"ECX", LIM32}, {"EBX", LIM32}}, "CPUID"}, 215 | {OP_RDTSC, &op_rdtsc, "rdtsc", {{"", 0}, {"", 0}, {"", 0}, {"", 0}}, {{"EAX", LIM32}, {"EDX", LIM32}, {"", 0}, {"", 0}}, "RDTSC"}, 216 | }; 217 | #endif 218 | } // namespace ASM_DEF 219 | 220 | #endif // ASM_DEFS_H 221 | -------------------------------------------------------------------------------- /gui_source/guimainwindow.cpp: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2019-2024 hors 2 | * 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy 4 | * of this software and associated documentation files (the "Software"), to deal 5 | * in the Software without restriction, including without limitation the rights 6 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | * copies of the Software, and to permit persons to whom the Software is 8 | * furnished to do so, subject to the following conditions: 9 | * 10 | * The above copyright notice and this permission notice shall be included in all 11 | * copies or substantial portions of the Software. 12 | * 13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | * SOFTWARE. 20 | */ 21 | #include "guimainwindow.h" 22 | 23 | #include "ui_guimainwindow.h" 24 | 25 | #include "bigint.h" 26 | 27 | GuiMainWindow::GuiMainWindow(QWidget *pParent) : QMainWindow(pParent), ui(new Ui::GuiMainWindow) 28 | { 29 | ui->setupUi(this); 30 | 31 | setWindowTitle(XOptions::getTitle(X_APPLICATIONDISPLAYNAME, X_APPLICATIONVERSION)); 32 | 33 | QFont font = ui->toolButtonOpcode->font(); 34 | font.setPointSizeF(font.pointSizeF() * 1.5); 35 | font.setBold(true); 36 | ui->toolButtonOpcode->setFont(font); 37 | 38 | g_xOptions.setName(X_OPTIONSFILE); 39 | 40 | g_xOptions.addID(XOptions::ID_VIEW_STYLE, "Fusion"); 41 | g_xOptions.addID(XOptions::ID_VIEW_STAYONTOP, false); 42 | 43 | g_xOptions.load(); 44 | 45 | adjustWindow(); 46 | 47 | ui->comboBoxOpcodeGroup->addItem(tr("Two operands"), OG_TWOOPERANDS); 48 | ui->comboBoxOpcodeGroup->addItem(tr("One operand"), OG_ONEOPERAND); 49 | ui->comboBoxOpcodeGroup->addItem(QString("Mul/Div"), OG_MULDIV); 50 | ui->comboBoxOpcodeGroup->addItem(QString("Shift"), OG_SHIFT); 51 | ui->comboBoxOpcodeGroup->addItem(QString("Bits"), OG_BITS); 52 | #ifndef OPCODE64 53 | ui->comboBoxOpcodeGroup->addItem(QString("BCD"), OG_BCD); 54 | #endif 55 | ui->comboBoxOpcodeGroup->addItem(QString("Special"), OG_SPECIAL); 56 | 57 | ui->comboBoxMode->addItem(QString("HEX"), XLineEditHEX::_MODE_HEX); 58 | ui->comboBoxMode->addItem(QString("Signed"), XLineEditHEX::_MODE_SIGN_DEC); 59 | ui->comboBoxMode->addItem(QString("Unsigned"), XLineEditHEX::_MODE_DEC); 60 | 61 | adjustMode(); 62 | } 63 | 64 | GuiMainWindow::~GuiMainWindow() 65 | { 66 | g_xOptions.save(); 67 | 68 | delete ui; 69 | } 70 | 71 | void GuiMainWindow::on_pushButtonExit_clicked() 72 | { 73 | this->close(); 74 | } 75 | 76 | void GuiMainWindow::on_pushButtonAbout_clicked() 77 | { 78 | DialogAbout di(this); 79 | 80 | di.exec(); 81 | } 82 | 83 | void GuiMainWindow::adjustWindow() 84 | { 85 | g_xOptions.adjustStayOnTop(this); 86 | } 87 | 88 | void GuiMainWindow::calc() 89 | { 90 | ui->lineEditOperand1->blockSignals(true); 91 | ui->lineEditOperand2->blockSignals(true); 92 | ui->lineEditOperand3->blockSignals(true); 93 | ui->lineEditOperand4->blockSignals(true); 94 | ui->lineEditResult1->blockSignals(true); 95 | ui->lineEditResult2->blockSignals(true); 96 | ui->lineEditResult3->blockSignals(true); 97 | ui->lineEditResult4->blockSignals(true); 98 | 99 | // ModeValidator::MODE mode = static_cast(ui->comboBoxMode->currentData().toInt()); 100 | ASM_DEF::OPCODE_RECORD currentRecord = g_mapOpcodes.value(static_cast(ui->comboBoxOpcode->currentData().toInt())); 101 | 102 | RECDATA data = RECDATA_INIT; 103 | 104 | data.OPERAND[0] = (XVALUE)ui->lineEditOperand1->getValue_uint64(); 105 | data.OPERAND[1] = (XVALUE)ui->lineEditOperand2->getValue_uint64(); 106 | data.OPERAND[2] = (XVALUE)ui->lineEditOperand3->getValue_uint64(); 107 | data.OPERAND[3] = (XVALUE)ui->lineEditOperand4->getValue_uint64(); 108 | data.FLAG[0] = (XVALUE)ui->lineEditOperand4->getValue_uint64(); 109 | 110 | data.FLAG[0] &= ((ASM_DEF::AF) | (ASM_DEF::CF) | (ASM_DEF::OF) | (ASM_DEF::PF) | (ASM_DEF::SF) | (ASM_DEF::ZF)); // Filter 111 | 112 | bool bSuccess = true; 113 | 114 | if ((currentRecord.opcode == ASM_DEF::OP_DIV) || (currentRecord.opcode == ASM_DEF::OP_IDIV)) { 115 | if (data.OPERAND[1] == 0) { 116 | bSuccess = false; 117 | } 118 | 119 | if (bSuccess) { 120 | BigInt a0(QString::number(data.OPERAND[0]).toStdString()); 121 | BigInt a1(QString::number(data.OPERAND[1]).toStdString()); 122 | BigInt a2(QString::number(data.OPERAND[2]).toStdString()); 123 | 124 | #ifdef OPCODE32 125 | BigInt biMax(QString::number(0xFFFFFFFF).toStdString()); 126 | BigInt biMax0(QString::number(0x7FFFFFFF).toStdString()); 127 | #endif 128 | #ifdef OPCODE64 129 | BigInt biMax(QString::number(0xFFFFFFFFFFFFFFFF).toStdString()); 130 | BigInt biMax0(QString::number(0x7FFFFFFFFFFFFFFF).toStdString()); 131 | #endif 132 | BigInt res = (a0 + (a2 * (biMax + 1))) / a1; 133 | 134 | #ifdef QT_DEBUG 135 | qDebug("a0: %s", a0.to_string().c_str()); 136 | qDebug("a1: %s", a1.to_string().c_str()); 137 | qDebug("a2: %s", a2.to_string().c_str()); 138 | qDebug("biMax: %s", biMax.to_string().c_str()); 139 | qDebug("biMax0: %s", biMax0.to_string().c_str()); 140 | qDebug("res: %s", res.to_string().c_str()); 141 | #endif 142 | 143 | if (res >= biMax) { 144 | bSuccess = false; 145 | } 146 | 147 | if (currentRecord.opcode == ASM_DEF::OP_IDIV) { 148 | if ((a0 >= biMax0) && (a1 >= biMax0)) { 149 | bSuccess = false; 150 | } 151 | if ((a2 > 0) && (a1 >= biMax0)) { 152 | bSuccess = false; 153 | } 154 | } 155 | } 156 | } 157 | 158 | if (bSuccess) { 159 | currentRecord.asm_func(&data); 160 | } 161 | 162 | if (bSuccess) { 163 | ui->lineEditResult1->setValue32_64((XVALUE)data.RESULT[0], XLineEditHEX::_MODE_UNKNOWN); 164 | 165 | if (currentRecord.opcode == ASM_DEF::OP_XADD) { 166 | ui->lineEditResult2->setValue32_64((XVALUE)data.RESULT[2], XLineEditHEX::_MODE_UNKNOWN); 167 | ui->lineEditResult3->setValue32_64((XVALUE)data.RESULT[1], XLineEditHEX::_MODE_UNKNOWN); 168 | } else { 169 | ui->lineEditResult2->setValue32_64((XVALUE)data.RESULT[1], XLineEditHEX::_MODE_UNKNOWN); 170 | ui->lineEditResult3->setValue32_64((XVALUE)data.RESULT[2], XLineEditHEX::_MODE_UNKNOWN); 171 | } 172 | 173 | ui->lineEditResult4->setValue32_64((XVALUE)data.RESULT[3], XLineEditHEX::_MODE_UNKNOWN); 174 | } else { 175 | ui->lineEditResult1->clear(); 176 | ui->lineEditResult2->clear(); 177 | ui->lineEditResult3->clear(); 178 | ui->lineEditResult4->clear(); 179 | 180 | data.FLAG[1] = data.FLAG[0]; 181 | } 182 | 183 | XVALUE nFlag = data.FLAG[1]; 184 | 185 | nFlag &= (~(static_cast(0x202))); // remove 186 | 187 | ui->lineEditFlagsAfter->setValue32_64(nFlag, XLineEditHEX::_MODE_UNKNOWN); 188 | 189 | bool bAF = nFlag & (ASM_DEF::AF); 190 | bool bCF = nFlag & (ASM_DEF::CF); 191 | bool bOF = nFlag & (ASM_DEF::OF); 192 | bool bPF = nFlag & (ASM_DEF::PF); 193 | bool bSF = nFlag & (ASM_DEF::SF); 194 | bool bZF = nFlag & (ASM_DEF::ZF); 195 | 196 | ui->labelFlagAF->setEnabled(bAF); 197 | ui->labelFlagCF->setEnabled(bCF); 198 | ui->labelFlagOF->setEnabled(bOF); 199 | ui->labelFlagPF->setEnabled(bPF); 200 | ui->labelFlagSF->setEnabled(bSF); 201 | ui->labelFlagZF->setEnabled(bZF); 202 | 203 | ui->labelJA->setEnabled((bCF == false) && (bZF == false)); 204 | ui->labelJBE->setEnabled((bCF == true) || (bZF == true)); 205 | ui->labelJGE->setEnabled(bSF == bOF); 206 | ui->labelJL->setEnabled(bSF != bOF); 207 | ui->labelJLE->setEnabled((bZF == true) || (bSF != bOF)); 208 | ui->labelJG->setEnabled((bZF == false) && (bSF == bOF)); 209 | ui->labelJB->setEnabled(bCF == true); 210 | ui->labelJAE->setEnabled(bCF == false); 211 | ui->labelJE->setEnabled(bZF == true); 212 | ui->labelJNE->setEnabled(bZF == false); 213 | ui->labelJP->setEnabled(bPF == true); 214 | ui->labelJNP->setEnabled(bPF == false); 215 | ui->labelJS->setEnabled(bSF == true); 216 | ui->labelJNS->setEnabled(bSF == false); 217 | ui->labelJO->setEnabled(bOF == true); 218 | ui->labelJNO->setEnabled(bOF == false); 219 | 220 | ui->lineEditOperand1->blockSignals(false); 221 | ui->lineEditOperand2->blockSignals(false); 222 | ui->lineEditOperand3->blockSignals(false); 223 | ui->lineEditOperand4->blockSignals(false); 224 | ui->lineEditResult1->blockSignals(false); 225 | ui->lineEditResult2->blockSignals(false); 226 | ui->lineEditResult3->blockSignals(false); 227 | ui->lineEditResult4->blockSignals(false); 228 | } 229 | 230 | void GuiMainWindow::loadOpcodes(const ASM_DEF::OPCODE_RECORD *pRecords, qint32 nRecordsSize) 231 | { 232 | #if QT_VERSION >= 0x050300 233 | QSignalBlocker blocker(ui->comboBoxOpcode); 234 | #else 235 | const bool bBlocked1 = ui->comboBoxOpcode->blockSignals(true); 236 | #endif 237 | 238 | g_mapOpcodes.clear(); 239 | ui->comboBoxOpcode->clear(); 240 | 241 | for (int i = 0; i < nRecordsSize; i++) { 242 | g_mapOpcodes.insert(pRecords[i].opcode, pRecords[i]); 243 | 244 | ui->comboBoxOpcode->addItem(pRecords[i].pszName, static_cast(pRecords[i].opcode)); 245 | } 246 | 247 | #if QT_VERSION < 0x050300 248 | ui->comboBoxOpcode->blockSignals(bBlocked1); 249 | #endif 250 | } 251 | 252 | void GuiMainWindow::on_comboBoxOpcode_currentIndexChanged(int nIndex) 253 | { 254 | if (nIndex != -1) { 255 | adjustMode(); 256 | calc(); 257 | } 258 | } 259 | 260 | void GuiMainWindow::adjustValue(QGroupBox *pGroupBox, ASM_DEF::VALUE_RECORD vr) 261 | { 262 | if (vr.nMaxValue) { 263 | pGroupBox->show(); 264 | pGroupBox->setTitle(vr.pszRegName); 265 | } else { 266 | pGroupBox->hide(); 267 | } 268 | } 269 | 270 | void GuiMainWindow::adjustMode() 271 | { 272 | ASM_DEF::OPCODE_RECORD currentRecord = g_mapOpcodes.value(static_cast(ui->comboBoxOpcode->currentData().toInt())); 273 | 274 | ui->lineEditOperand1->setMaxValue(currentRecord.vrOperand[0].nMaxValue); 275 | ui->lineEditOperand2->setMaxValue(currentRecord.vrOperand[1].nMaxValue); 276 | ui->lineEditOperand3->setMaxValue(currentRecord.vrOperand[2].nMaxValue); 277 | ui->lineEditOperand4->setMaxValue(currentRecord.vrOperand[3].nMaxValue); 278 | 279 | ui->toolButtonOpcode->setText(currentRecord.pszExample); 280 | 281 | adjustValue(ui->groupBoxOperand1, currentRecord.vrOperand[0]); 282 | adjustValue(ui->groupBoxOperand2, currentRecord.vrOperand[1]); 283 | adjustValue(ui->groupBoxOperand3, currentRecord.vrOperand[2]); 284 | adjustValue(ui->groupBoxOperand4, currentRecord.vrOperand[3]); 285 | adjustValue(ui->groupBoxResult1, currentRecord.vrResult[0]); 286 | adjustValue(ui->groupBoxResult2, currentRecord.vrResult[1]); 287 | adjustValue(ui->groupBoxResult3, currentRecord.vrResult[2]); 288 | adjustValue(ui->groupBoxResult4, currentRecord.vrResult[3]); 289 | } 290 | 291 | void GuiMainWindow::on_lineEditOperand1_textChanged(const QString &arg1) 292 | { 293 | Q_UNUSED(arg1) 294 | 295 | calc(); 296 | } 297 | 298 | void GuiMainWindow::on_lineEditOperand2_textChanged(const QString &arg1) 299 | { 300 | Q_UNUSED(arg1) 301 | 302 | calc(); 303 | } 304 | 305 | void GuiMainWindow::on_lineEditOperand3_textChanged(const QString &arg1) 306 | { 307 | Q_UNUSED(arg1) 308 | 309 | calc(); 310 | } 311 | 312 | void GuiMainWindow::on_lineEditOperand4_textChanged(const QString &arg1) 313 | { 314 | Q_UNUSED(arg1) 315 | 316 | calc(); 317 | } 318 | 319 | void GuiMainWindow::on_lineEditResult1_textChanged(const QString &arg1) 320 | { 321 | Q_UNUSED(arg1) 322 | 323 | calc(); 324 | } 325 | 326 | void GuiMainWindow::on_lineEditResult2_textChanged(const QString &arg1) 327 | { 328 | Q_UNUSED(arg1) 329 | 330 | calc(); 331 | } 332 | 333 | void GuiMainWindow::on_lineEditResult3_textChanged(const QString &arg1) 334 | { 335 | Q_UNUSED(arg1) 336 | 337 | calc(); 338 | } 339 | 340 | void GuiMainWindow::on_lineEditResult4_textChanged(const QString &arg1) 341 | { 342 | Q_UNUSED(arg1) 343 | 344 | calc(); 345 | } 346 | 347 | void GuiMainWindow::on_pushButtonFlagCF_toggled(bool checked) 348 | { 349 | adjustFlags(ASM_DEF::CF, checked); 350 | calc(); 351 | } 352 | 353 | void GuiMainWindow::on_pushButtonFlagPF_toggled(bool checked) 354 | { 355 | adjustFlags(ASM_DEF::PF, checked); 356 | calc(); 357 | } 358 | 359 | void GuiMainWindow::on_pushButtonFlagAF_toggled(bool checked) 360 | { 361 | adjustFlags(ASM_DEF::AF, checked); 362 | calc(); 363 | } 364 | 365 | void GuiMainWindow::on_pushButtonFlagZF_toggled(bool checked) 366 | { 367 | adjustFlags(ASM_DEF::ZF, checked); 368 | calc(); 369 | } 370 | 371 | void GuiMainWindow::on_pushButtonFlagSF_toggled(bool checked) 372 | { 373 | adjustFlags(ASM_DEF::SF, checked); 374 | calc(); 375 | } 376 | 377 | void GuiMainWindow::on_pushButtonFlagOF_toggled(bool checked) 378 | { 379 | adjustFlags(ASM_DEF::OF, checked); 380 | calc(); 381 | } 382 | 383 | void GuiMainWindow::on_lineEditFlagsBefore_textChanged(const QString &arg1) 384 | { 385 | Q_UNUSED(arg1) 386 | 387 | XVALUE nFlag = (XVALUE)ui->lineEditFlagsBefore->getValue_uint64(); 388 | 389 | ui->pushButtonFlagAF->setChecked(nFlag & (ASM_DEF::AF)); 390 | ui->pushButtonFlagCF->setChecked(nFlag & (ASM_DEF::CF)); 391 | ui->pushButtonFlagOF->setChecked(nFlag & (ASM_DEF::OF)); 392 | ui->pushButtonFlagPF->setChecked(nFlag & (ASM_DEF::PF)); 393 | ui->pushButtonFlagSF->setChecked(nFlag & (ASM_DEF::SF)); 394 | ui->pushButtonFlagZF->setChecked(nFlag & (ASM_DEF::ZF)); 395 | 396 | calc(); 397 | } 398 | 399 | void GuiMainWindow::on_comboBoxMode_currentIndexChanged(int index) 400 | { 401 | if (index != -1) { 402 | XLineEditHEX::_MODE mode = static_cast(ui->comboBoxMode->currentData().toInt()); 403 | 404 | ui->lineEditOperand1->setMode(mode); 405 | ui->lineEditOperand2->setMode(mode); 406 | ui->lineEditOperand3->setMode(mode); 407 | ui->lineEditOperand4->setMode(mode); 408 | ui->lineEditResult1->setMode(mode); 409 | ui->lineEditResult2->setMode(mode); 410 | ui->lineEditResult3->setMode(mode); 411 | ui->lineEditResult4->setMode(mode); 412 | ui->lineEditFlagsBefore->setMode(mode); 413 | ui->lineEditFlagsAfter->setMode(mode); 414 | 415 | adjustMode(); 416 | 417 | calc(); 418 | } 419 | } 420 | 421 | void GuiMainWindow::adjustFlags(XVALUE nFlag, bool bState) 422 | { 423 | XVALUE nValue = (XVALUE)ui->lineEditFlagsBefore->getValue_uint64(); 424 | 425 | if (bState) { 426 | nValue |= nFlag; 427 | } else { 428 | nValue &= (~nFlag); 429 | } 430 | 431 | ui->lineEditFlagsBefore->setValue32_64(nValue, XLineEditHEX::_MODE_UNKNOWN); 432 | } 433 | 434 | void GuiMainWindow::on_comboBoxOpcodeGroup_currentIndexChanged(int index) 435 | { 436 | if (index != -1) { 437 | switch (ui->comboBoxOpcodeGroup->currentData(Qt::UserRole).toUInt()) { 438 | case OG_TWOOPERANDS: loadOpcodes(ASM_DEF::asm_twooperands, sizeof(ASM_DEF::asm_twooperands) / sizeof(ASM_DEF::OPCODE_RECORD)); break; 439 | case OG_ONEOPERAND: loadOpcodes(ASM_DEF::asm_oneoperand, sizeof(ASM_DEF::asm_oneoperand) / sizeof(ASM_DEF::OPCODE_RECORD)); break; 440 | case OG_MULDIV: loadOpcodes(ASM_DEF::asm_muldiv, sizeof(ASM_DEF::asm_muldiv) / sizeof(ASM_DEF::OPCODE_RECORD)); break; 441 | case OG_SHIFT: loadOpcodes(ASM_DEF::asm_shift, sizeof(ASM_DEF::asm_shift) / sizeof(ASM_DEF::OPCODE_RECORD)); break; 442 | case OG_BITS: loadOpcodes(ASM_DEF::asm_bits, sizeof(ASM_DEF::asm_bits) / sizeof(ASM_DEF::OPCODE_RECORD)); break; 443 | #ifndef OPCODE64 444 | case OG_BCD: loadOpcodes(ASM_DEF::asm_bcd, sizeof(ASM_DEF::asm_bcd) / sizeof(ASM_DEF::OPCODE_RECORD)); break; 445 | #endif 446 | case OG_SPECIAL: loadOpcodes(ASM_DEF::asm_special, sizeof(ASM_DEF::asm_special) / sizeof(ASM_DEF::OPCODE_RECORD)); break; 447 | } 448 | 449 | adjustMode(); 450 | calc(); 451 | } 452 | } 453 | 454 | void GuiMainWindow::on_pushButtonOptions_clicked() 455 | { 456 | DialogOptions dialogOptions(this, &g_xOptions); 457 | 458 | dialogOptions.exec(); 459 | 460 | adjustWindow(); 461 | } 462 | 463 | void GuiMainWindow::on_toolButtonOpcode_clicked() 464 | { 465 | calc(); 466 | } 467 | -------------------------------------------------------------------------------- /gui_source/guimainwindow.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | GuiMainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 429 10 | 752 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 200 25 | 0 26 | 27 | 28 | 29 | Opcode group 30 | 31 | 32 | 33 | 1 34 | 35 | 36 | 1 37 | 38 | 39 | 1 40 | 41 | 42 | 1 43 | 44 | 45 | 46 | 47 | 48 | 0 49 | 0 50 | 51 | 52 | 53 | 54 | 100 55 | 0 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | Mode 67 | 68 | 69 | 70 | 1 71 | 72 | 73 | 1 74 | 75 | 76 | 1 77 | 78 | 79 | 1 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | Opcode 95 | 96 | 97 | 98 | 1 99 | 100 | 101 | 1 102 | 103 | 104 | 1 105 | 106 | 107 | 1 108 | 109 | 110 | 111 | 112 | 113 | 0 114 | 0 115 | 116 | 117 | 118 | 119 | 100 120 | 0 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 0 133 | 0 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | Input 147 | 148 | 149 | 150 | 0 151 | 152 | 153 | 0 154 | 155 | 156 | 0 157 | 158 | 159 | 0 160 | 161 | 162 | 163 | 164 | 165 | 166 | Operand1 167 | 168 | 169 | 170 | 1 171 | 172 | 173 | 1 174 | 175 | 176 | 1 177 | 178 | 179 | 1 180 | 181 | 182 | 1 183 | 184 | 185 | 186 | 187 | Qt::AlignCenter 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | Qt::Horizontal 198 | 199 | 200 | 201 | 40 202 | 20 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | Operand2 211 | 212 | 213 | 214 | 1 215 | 216 | 217 | 1 218 | 219 | 220 | 1 221 | 222 | 223 | 1 224 | 225 | 226 | 1 227 | 228 | 229 | 230 | 231 | Qt::AlignCenter 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | Operand3 246 | 247 | 248 | 249 | 1 250 | 251 | 252 | 1 253 | 254 | 255 | 1 256 | 257 | 258 | 1 259 | 260 | 261 | 1 262 | 263 | 264 | 265 | 266 | Qt::AlignCenter 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | Qt::Horizontal 277 | 278 | 279 | 280 | 40 281 | 20 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | Operand4 290 | 291 | 292 | 293 | 1 294 | 295 | 296 | 1 297 | 298 | 299 | 1 300 | 301 | 302 | 1 303 | 304 | 305 | 1 306 | 307 | 308 | 309 | 310 | Qt::AlignCenter 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | Flags 323 | 324 | 325 | 326 | 1 327 | 328 | 329 | 1 330 | 331 | 332 | 1 333 | 334 | 335 | 1 336 | 337 | 338 | 1 339 | 340 | 341 | 342 | 343 | 344 | 0 345 | 0 346 | 347 | 348 | 349 | 350 | 30 351 | 0 352 | 353 | 354 | 355 | 356 | 30 357 | 16777215 358 | 359 | 360 | 361 | CF 362 | 363 | 364 | true 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 0 373 | 0 374 | 375 | 376 | 377 | 378 | 30 379 | 0 380 | 381 | 382 | 383 | 384 | 30 385 | 16777215 386 | 387 | 388 | 389 | PF 390 | 391 | 392 | true 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 0 401 | 0 402 | 403 | 404 | 405 | 406 | 30 407 | 0 408 | 409 | 410 | 411 | 412 | 30 413 | 16777215 414 | 415 | 416 | 417 | AF 418 | 419 | 420 | true 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 0 429 | 0 430 | 431 | 432 | 433 | 434 | 30 435 | 0 436 | 437 | 438 | 439 | 440 | 30 441 | 16777215 442 | 443 | 444 | 445 | ZF 446 | 447 | 448 | true 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 0 457 | 0 458 | 459 | 460 | 461 | 462 | 30 463 | 0 464 | 465 | 466 | 467 | 468 | 30 469 | 16777215 470 | 471 | 472 | 473 | SF 474 | 475 | 476 | true 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 0 485 | 0 486 | 487 | 488 | 489 | 490 | 30 491 | 0 492 | 493 | 494 | 495 | 496 | 30 497 | 16777215 498 | 499 | 500 | 501 | OF 502 | 503 | 504 | true 505 | 506 | 507 | 508 | 509 | 510 | 511 | Qt::Horizontal 512 | 513 | 514 | 515 | 40 516 | 20 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | Qt::AlignCenter 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | Qt::Vertical 538 | 539 | 540 | 541 | 20 542 | 40 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | Result 551 | 552 | 553 | 554 | 0 555 | 556 | 557 | 0 558 | 559 | 560 | 0 561 | 562 | 563 | 0 564 | 565 | 566 | 567 | 568 | 569 | 570 | Result1 571 | 572 | 573 | 574 | 1 575 | 576 | 577 | 1 578 | 579 | 580 | 1 581 | 582 | 583 | 1 584 | 585 | 586 | 1 587 | 588 | 589 | 590 | 591 | Qt::AlignCenter 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | Qt::Horizontal 602 | 603 | 604 | 605 | 40 606 | 20 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | Result2 615 | 616 | 617 | 618 | 1 619 | 620 | 621 | 1 622 | 623 | 624 | 1 625 | 626 | 627 | 1 628 | 629 | 630 | 1 631 | 632 | 633 | 634 | 635 | Qt::AlignCenter 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | Result3 650 | 651 | 652 | 653 | 1 654 | 655 | 656 | 1 657 | 658 | 659 | 1 660 | 661 | 662 | 1 663 | 664 | 665 | 1 666 | 667 | 668 | 669 | 670 | Qt::AlignCenter 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | Qt::Horizontal 681 | 682 | 683 | 684 | 40 685 | 20 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | Result4 694 | 695 | 696 | 697 | 1 698 | 699 | 700 | 1 701 | 702 | 703 | 1 704 | 705 | 706 | 1 707 | 708 | 709 | 1 710 | 711 | 712 | 713 | 714 | Qt::AlignCenter 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 725 | 726 | Flags 727 | 728 | 729 | 730 | 1 731 | 732 | 733 | 1 734 | 735 | 736 | 1 737 | 738 | 739 | 1 740 | 741 | 742 | 1 743 | 744 | 745 | 746 | 747 | 748 | 30 749 | 0 750 | 751 | 752 | 753 | 754 | 30 755 | 16777215 756 | 757 | 758 | 759 | QFrame::Box 760 | 761 | 762 | CF 763 | 764 | 765 | Qt::AlignCenter 766 | 767 | 768 | 769 | 770 | 771 | 772 | 773 | 30 774 | 0 775 | 776 | 777 | 778 | 779 | 30 780 | 16777215 781 | 782 | 783 | 784 | QFrame::Box 785 | 786 | 787 | PF 788 | 789 | 790 | Qt::AlignCenter 791 | 792 | 793 | 794 | 795 | 796 | 797 | 798 | 30 799 | 0 800 | 801 | 802 | 803 | 804 | 30 805 | 16777215 806 | 807 | 808 | 809 | QFrame::Box 810 | 811 | 812 | AF 813 | 814 | 815 | Qt::AlignCenter 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 30 824 | 0 825 | 826 | 827 | 828 | 829 | 30 830 | 16777215 831 | 832 | 833 | 834 | QFrame::Box 835 | 836 | 837 | ZF 838 | 839 | 840 | Qt::AlignCenter 841 | 842 | 843 | 844 | 845 | 846 | 847 | 848 | 30 849 | 0 850 | 851 | 852 | 853 | 854 | 30 855 | 16777215 856 | 857 | 858 | 859 | QFrame::Box 860 | 861 | 862 | SF 863 | 864 | 865 | Qt::AlignCenter 866 | 867 | 868 | 869 | 870 | 871 | 872 | 873 | 30 874 | 0 875 | 876 | 877 | 878 | 879 | 30 880 | 16777215 881 | 882 | 883 | 884 | QFrame::Box 885 | 886 | 887 | OF 888 | 889 | 890 | Qt::AlignCenter 891 | 892 | 893 | 894 | 895 | 896 | 897 | Qt::Horizontal 898 | 899 | 900 | 901 | 40 902 | 20 903 | 904 | 905 | 906 | 907 | 908 | 909 | 910 | Qt::AlignCenter 911 | 912 | 913 | 914 | 915 | 916 | 917 | 918 | 919 | 920 | Qt::Vertical 921 | 922 | 923 | 924 | 20 925 | 40 926 | 927 | 928 | 929 | 930 | 931 | 932 | 933 | 934 | 935 | QFrame::Box 936 | 937 | 938 | 0 939 | 940 | 941 | JNS 942 | 943 | 944 | Qt::AlignCenter 945 | 946 | 947 | 948 | 949 | 950 | 951 | QFrame::Box 952 | 953 | 954 | 0 955 | 956 | 957 | JB/JNAE/JC 958 | 959 | 960 | Qt::AlignCenter 961 | 962 | 963 | 964 | 965 | 966 | 967 | QFrame::Box 968 | 969 | 970 | 0 971 | 972 | 973 | JS 974 | 975 | 976 | Qt::AlignCenter 977 | 978 | 979 | 980 | 981 | 982 | 983 | QFrame::Box 984 | 985 | 986 | 0 987 | 988 | 989 | JGE/JNL 990 | 991 | 992 | Qt::AlignCenter 993 | 994 | 995 | 996 | 997 | 998 | 999 | QFrame::Box 1000 | 1001 | 1002 | 0 1003 | 1004 | 1005 | JL/JNGE 1006 | 1007 | 1008 | Qt::AlignCenter 1009 | 1010 | 1011 | 1012 | 1013 | 1014 | 1015 | QFrame::Box 1016 | 1017 | 1018 | 0 1019 | 1020 | 1021 | JNO 1022 | 1023 | 1024 | Qt::AlignCenter 1025 | 1026 | 1027 | 1028 | 1029 | 1030 | 1031 | QFrame::Box 1032 | 1033 | 1034 | 0 1035 | 1036 | 1037 | JLE/JNG 1038 | 1039 | 1040 | Qt::AlignCenter 1041 | 1042 | 1043 | 1044 | 1045 | 1046 | 1047 | QFrame::Box 1048 | 1049 | 1050 | 0 1051 | 1052 | 1053 | JA/JNBE 1054 | 1055 | 1056 | Qt::AlignCenter 1057 | 1058 | 1059 | 1060 | 1061 | 1062 | 1063 | QFrame::Box 1064 | 1065 | 1066 | 0 1067 | 1068 | 1069 | JBE/JNA 1070 | 1071 | 1072 | Qt::AlignCenter 1073 | 1074 | 1075 | 1076 | 1077 | 1078 | 1079 | QFrame::Box 1080 | 1081 | 1082 | 0 1083 | 1084 | 1085 | JG/JNLE 1086 | 1087 | 1088 | Qt::AlignCenter 1089 | 1090 | 1091 | 1092 | 1093 | 1094 | 1095 | QFrame::Box 1096 | 1097 | 1098 | 0 1099 | 1100 | 1101 | JAE/JNB/JNC 1102 | 1103 | 1104 | Qt::AlignCenter 1105 | 1106 | 1107 | 1108 | 1109 | 1110 | 1111 | QFrame::Box 1112 | 1113 | 1114 | 0 1115 | 1116 | 1117 | JO 1118 | 1119 | 1120 | Qt::AlignCenter 1121 | 1122 | 1123 | 1124 | 1125 | 1126 | 1127 | QFrame::Box 1128 | 1129 | 1130 | 0 1131 | 1132 | 1133 | JE/JZ 1134 | 1135 | 1136 | Qt::AlignCenter 1137 | 1138 | 1139 | 1140 | 1141 | 1142 | 1143 | QFrame::Box 1144 | 1145 | 1146 | 0 1147 | 1148 | 1149 | JNE/JNZ 1150 | 1151 | 1152 | Qt::AlignCenter 1153 | 1154 | 1155 | 1156 | 1157 | 1158 | 1159 | QFrame::Box 1160 | 1161 | 1162 | 0 1163 | 1164 | 1165 | JP/JPE 1166 | 1167 | 1168 | Qt::AlignCenter 1169 | 1170 | 1171 | 1172 | 1173 | 1174 | 1175 | QFrame::Box 1176 | 1177 | 1178 | 0 1179 | 1180 | 1181 | JNP/JPO 1182 | 1183 | 1184 | Qt::AlignCenter 1185 | 1186 | 1187 | 1188 | 1189 | 1190 | 1191 | 1192 | 1193 | 1194 | 1195 | 1196 | Qt::Vertical 1197 | 1198 | 1199 | 1200 | 20 1201 | 40 1202 | 1203 | 1204 | 1205 | 1206 | 1207 | 1208 | 1209 | Qt::Vertical 1210 | 1211 | 1212 | 1213 | 20 1214 | 40 1215 | 1216 | 1217 | 1218 | 1219 | 1220 | 1221 | 1222 | Qt::Vertical 1223 | 1224 | 1225 | 1226 | 20 1227 | 40 1228 | 1229 | 1230 | 1231 | 1232 | 1233 | 1234 | 1235 | 1236 | 1237 | Options 1238 | 1239 | 1240 | 1241 | 1242 | 1243 | 1244 | Qt::Horizontal 1245 | 1246 | 1247 | 1248 | 40 1249 | 20 1250 | 1251 | 1252 | 1253 | 1254 | 1255 | 1256 | 1257 | About 1258 | 1259 | 1260 | 1261 | 1262 | 1263 | 1264 | Exit 1265 | 1266 | 1267 | 1268 | 1269 | 1270 | 1271 | 1272 | 1273 | 1274 | 1275 | 1276 | XLineEditHEX 1277 | QLineEdit 1278 |

xlineedithex.h
1279 | 1280 | 1281 | 1282 | 1283 | 1284 | --------------------------------------------------------------------------------