This file details the changelog of Unicorn Engine. ------------------------------- [Version 2.1.1]: TBD - Remove pkg_resources usage - Fix wheels distribution for x86_64 macos - Fix redundant wheel hacks - Support musllinux distribution ------------------------------- [Version 2.1.0]: Sept 22nd, 2024 It has been a while since the last release, and 2.1.0 brings several exciting features. Below is the changelog from the latest to the oldest (though not strictly). Highlights - Revive QEMU logs, now we have `-DUNICORN_LOGGING=yes` to enable all qemu logs. @BitMaskMixer - Faster (up to 40x) write performance by not always doing `store_helper` and cleaning page locks. @tunz @boborjan2 - Brand new python bindings, with strongly typed and many improvements. @elicn - Fix to a long-standing MinGW random segfault bug. - We bring python2 compatibility back. - We now fully support M1, both building and a pre-built wheel. - We support snapshot memory now, with a very low overhead copy-on-write fashion. @PhilippTakacs - An option to bypass MMU is also added, check our FAQ. @PhilippTakacs - A brand new (and modern) java bindings. We are also working to publish it to maven. @nneonneo - We have zig integrated. @kassane @atipls - Now Unicorn no longer allocates 2GB memory for every instance. The memory will be only committed once used and the upper limit can be adjusted with `uc_ctl`. - New DotNet binding, with published to both Github and Nuget. @TSRBerry - The release will attach all binaries, thanks to @marameref Fixes & Improvements - RISCV improvements, but we still have a long way to go. @apparentlymart @ks0777 - cmake improvements @scribam @es3n1n - Various python bindings fix and improvements @bet4it @rhelmot - Docs. @gerph @BitMaskMixer - Rust bindings. @lockbox @mlgiraud @deadash - TCG backend fixes. @redoste @StalkR @dglynos - PPC32 fixes. @dotCirill - Haiku fixes. @kallisti5 - Improvements to avoid simulator detection. @mrexodia New Contributors * @ks0777 made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1736 * @LG3696 made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1764 * @PhilippTakacs made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1765 * @edsky made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1754 * @tunz made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1790 * @kassane made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1809 * @Xeonacid made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1807 * @nneonneo made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1830 * @lockbox made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1847 * @mlgiraud made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1849 * @basavesh made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1861 * @hamarituc made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1886 * @StalkR made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1907 * @dotCirill made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1910 * @marameref made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1897 * @redoste made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1922 * @xclusivor made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1929 * @elicn made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1629 * @nganhkhoa made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1942 * @es3n1n made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1960 * @BitMaskMixer made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1977 * @apparentlymart made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1995 * @atipls made their first contribution in https://github.com/unicorn-engine/unicorn/pull/1985 * @omer54463 made their first contribution in https://github.com/unicorn-engine/unicorn/pull/2005 Full Changelog: https://github.com/unicorn-engine/unicorn/compare/2.0.1...2.1.0 Again, thanks for all contributors and sorry if I missed your name here (please tell me @wtdcode !). 2.1.1 is also coming because we expect some minor break changes to fix. ------------------------------- [Version 2.0.1.post1]: Nov 22nd, 2022 This is a small release to complement the previous 2.0.1 release. Fix: - Fix the endianness detection in tests. - Fix the version number in CMakeLists.txt. ------------------------------- [Version 2.0.1]: Nov 1st, 2022 Unicorn2 makes the first step to [Debian packages](https://tracker.debian.org/pkg/unicorn-engine) and [vcpkg](https://github.com/microsoft/vcpkg/pull/26101)! Thanks @roehling and @LilyWangL ! Features: - Support building & running on BE hosts. #1710 - Fix and support `clang-cl` on Windows. #1687 - Fix python `sdist` and add aarch64 Linux wheels. Note `pip` can build Unicorn2 on M1 now! - C# binding is refined and upgraded to .Net 6. #1723 Fix/Improvements: - Various bindings improvements. #1723 - Improvements for tests. #1684 #1683 #1691 #1711 - Fail explicitly when VEX.L is set. #1658 - Fix endianness when writing PPC32 CR register. #1659 - Fix a bug in `uc_ctl_set_cpu_model` check. - Fix Tricore PC not updating. #1668 - Fix the mapping not updated if users modify the mappings in the hooks. - Handle pathological cases consistently. #1651 - Fix memory leaks in PPC target. #1680 - Fix memory leaks in Tricore target. #1681 - Fix MSVC handling in cmake. #1693 - Fix PC sync-ing problems for `UC_HOOK_BLOCK` hooks. - Fix PC sync-ed twice when users request a soft restart. - Prevent overflow with pre-allocated RAM blocks. #1712 - Add FPCR and FPSR registers #1722 - Fix ARM CPU state not deep copied. - Fix PC not sync-ed for memory operation on aarch64. - Exit invalid store operations early to avoid the target registers being overwritten. - Improve the support for ARM BE32. Thanks: @roehling @LilyWangL @mrexodia @zachriggle @Yu3H0 @rhelmot @relapids @sh4w1 @TSRBerry ------------------------------- [Version 2.0.0]: July 7th, 2022 Features: - TriCore Support (#1568) Fixes/Improvements: - Build both shared library and static archive as unicorn1 does. - Misc bindings improvements. #1569 #1600 #1609 #1613 #1616 - Make sure setjmp-setjmp-wrapper-win32 participates in the build. #1604 - Improve Rust bindings build logic. - Fix wrong python binding for UC_CTL_TB_REMOVE_CACHE - Flush translation blocks when the count hook is removed. - Fix unicorn crash when nested `uc_emu_start` deletes a hook - Fix CPU not fully resumed when writing PC. - Don't quit TB if `uc_mem_protect` doesn't change the protection of current TB memory. - Add type annotations for python bindings. - Add CPUID hook for python bindings. #1618 - Don't repeat memory hooks if there is already an unhandled error. #1618 - Support reads and writes over all Arm SIMD registers #1621 - Fix wrong registers range in python bindings. - Fix uc_mem_protect on mmio regions - Fix a UAF caused by hook cache. - Fix the value collision between UC_MODE_ARMBE8 and UC_MODE_ARM926 Thanks: @AfoHT @mrexodia @bet4it @lowlyw @ekilmer @ondryaso @QDucasse @PalumboN @uberwoozle ---------------------------------- [Version 2.0.0 rc7]: April 17, 2022 This release is expected to be the real last RC release of Unicorn2. ;) Features: - Correctly generate static archives for the static build and have CI auto-tested. - Rust bindings revised. #1584 - Compatible with clang-cl compiler. #1581 - Implement UC_HOOK_INSN for aarch64 MRS/MSR/SYS/SYSL Fixes/Improvements: - Several corner cases on our API. #1587 #1595 - Fix the codegen buffer leak. - Rust bindins improvements. #1574 #1575 - Add "holes" to allow unicorn lib as a drop-in replacement for older ones. #1572 - s390x backports. #1570 - Fix exits wrongly removed in nested uc_emu_start - Fix a possible endless loop for only one translation block in a multithreaded environment. - Fix wrong PC without `UC_HOOK_CODE` installed. - Update vb6 bindings license. #1563 - Fix buffer allocation failure on M1. #1559 - Fix wrong EFLAGS on startup. - Fix wrong internal states on nested uc_emu_start. - Remove armeb-softmmu and aarcheb-softmmu which are usermode targets. - Advance PPC32 PC. #1558 - Support UC_PPC_REG_CR. - Update CI to windows-2019 Thanks: @shuffle2 @liyansong2018 @rose4096 @nviennot @n1tram1 @iii-i @dzzie @yrashk @bet4it ---------------------------------- [Version 2.0.0 rc6]: Feburary 13, 2022 This release is expected to be the last RC release of Unicorn2. Features: - SystemZ (aka. s390x) support. #1521 #1547 - CPUID hook now may return a bool to indicate whether skipping the CPUID instruction. - ARM/AARCH64 coprocessor registers read/write support. #889 Fixes/Improvements: - Rust improvements. More registers enums #1504 Easier to use #1543 #1545 - M68k improvements. #1507 - Golang improvements. Enable `uc_ctl_set_model` #1506 - Unit tests improvements. #1512 - Various ARM system mode fixes. #1500 #1520 #1525 #1531 - Read/write arm FPSCR and FPSID. #1453 - Fix the support for ARMv8 - Fix a large number of memory leaks and unicorn2 now goes with google/oss-fuzz! - Add more X87 registers. #1524 - Add more PPC registers. - Fix the exception not cleared in python bindings. #1537 - Correctly support ARM big endian and drops `armeb-softmmu` and `aarch64eb-softmmu` - Fix ARM CPSR.E not reflected during runtime. - Resolve fuzzing speed problem on macOS. - Modernize CmakeFileLists.txt. #1544 - Fix an issue in nested `uc_emu_start` Thanks: @Kritzefitz @zznop @QDucasse @gerph @bet4it @mrexodia @iii-i @jbcayrou @scribam ---------------------------------- [Version 2.0.0 rc5]: November 25, 2021 This release fixes a few urgent bugs and improves performance. Fixes/Improvements: - Rust bindings improvements. #1480 #1483 - Allow R/W to cp15 registers. #1481 - Fix `UC_HOOK_EDGE_GENERATED` not calling for indirect jumps. - Python bindings build improvements. #1486 - Fix bindings on m1 macOS. - Support nested `uc_emu_start` calls without context save/restore - Fix wrong MMIO offset for 32bit targets. - Fix wrong `uc_mem_unmap` logic for both ram and mmio memory. - Inline `uc_trace_code` and PC sync to improve performance. - Various fixes in tests. - Allow writing to CPSR to switch bank registers. - Implement MMIO in rust bindings. #1499 Thanks: - @domenukk - @bet4it - @mid-kid - @Kritzefitz ---------------------------------- [Version 2.0.0 rc4]: November 09, 2021 This is a big release of Unicorn and introduces a few powerful new features and a bunch of fixes. New Features: - New API: uc_ctl, by which you could control CPU models, TB caches or multiple exits etc. - New Hook: UC_HOOK_EDGE_GENERATED, UC_HOOK_TCG_OPCODE - RISCV CSR read/write. - Support reading MIPS hi/lo regs. 7268c2a19bce2db72b90e3ea3b133482c3ff4e58 - OSS Fuzzing building support. - MSVC 32bit and Android build support. - Introduce clang-format. Fixes/Improvements: - Java bindings improvements. unicorn-engine/unicorn#1461 - API Documents updates. unicorn-engine/unicorn#1459 - Rust bindings improvements. unicorn-engine/unicorn#1462 - Add a go.mod for go bindings. - CMakeLists.txt improvements as a subproject. #1373 - Fix rust bindings build script and add CI. - Use binary search to find mappings. unicorn-engine/unicorn#1414 - RISCV: - Update pc when exiting execution. unicorn-engine/unicorn#1465 - Add RISCV control status registers to enable floating. unicorn-engine/unicorn#1469 unicorn-engine/unicorn#1478 - After `ecall`, pc not advanced. unicorn-engine/unicorn#1477 - Fix tb not invalidated when exiting. - Fix bindings makefile. - Fix uc_mem_protect not working. unicorn-engine/unicorn#1468 Thanks: - @bet4it - @kabeor - @chfl4gs - @QDucasse - @h33p - @geohot - @cla7aye15I4nd - @jcalabres ---------------------------------- [Version 2.0.0 rc3]: October 06, 2021 This is an urgent pre-release regarding python bindings on older Linux systems. - Support older Linux distribution, e.g. prior to Ubuntu 19.04 - Fix a memory leak in `uc_close` - Support building on Android - Support hooking CPUID instruction. Enjoy. ---------------------------------- [Version 2.0.0 rc2]: October 05, 2021 This is an urgent pre-release regarding the packaging problem of python bindings. - Set `zip_false` and `is_pure` to `False` to avoid issues on some Linux distributions. - Link to `libm` to make sure our libraries work. - Support to read ST registers in rust bindings. - Fix #1450 Enjoy. ---------------------------------- [Version 2.0.0 rc1]: October 04, 2021 Unicorn2 first release candidate! - Based on Qemu 5.0.1 - Remain backward compatible with Unicorn 1.x - Update ISA of all existing architectures - Support 2 new architectures in PowerPC & RISCV ---------------------------------- [Unicorn2-beta]: October 3rd, 2021 - Release Unicorn2 beta to public. - New logo to celebrate this important milestone! ---------------------------------- [Version 1.0.1]: April 20th, 2017 - Properly handle selected-architecture build. - Fix compilation issues on PPC & S390x. - Fix a memory leak on uc_mem_protect(). - ARM: - Support big-endian mode. - Correct instruction size of Thumb/Thumb2 code. - Support read/write APSR register. - ARM64: - Support read/write NEON registers. - Support read/write NZCV registers. - Mips: Support read/write Mips64 registers. - X86: Support read/write MSR. - Haskell binding: update to the latest API. - Python: allow not having PATH setup. ---------------------------------- [Version 1.0]: February 23rd, 2017 - Fix build script for BSD host. - Fix building Unicorn on Arm/PPC/Sparc/S390 hosts. - X86: - Fix 16bit address computation. - Fix initial state of segment registers. ---------------------------------- [Version 1.0-rc3]: January 25th, 2017 - Rename API uc_context_free() to uc_free(). - ARM: - uc_reg_write() now can modify CPSR register. - Add some ARM coproc registers. - ARM64: uc_reg_read|write() now handles W0-W31 registers. - Windows: fix a double free bug in uc_close(). - New VB6 binding. - Java: update to support new APIs from v1.0-rc1. - Python: - Fix memory leaking that prevents UC instances from being GC. - Remove some dependencies leftover from glib time. - Add new method mem_regions() (linked to uc_mem_regions() API) ---------------------------------- [Version 1.0-rc2]: January 4th, 2017 - Remove glib & pkconfig dependency. - Python: fix an issue to restore support for FreeBSD (and other *BSD Unix). - ARM: support MCLASS cpu (Cortex-M3). - Windows: export a static lib that can be used outside of Mingw ---------------------------------- [Version 1.0-rc1]: December 22nd, 2016 - Lots of bugfixes in all architectures. - Better support for ARM Thumb. - Fix many memory leaking issues. - New bindings: Haskell, MSVC. - Better support for Python3. - New APIs: uc_query, uc_reg_write_batch, uc_reg_read_batch, uc_mem_map_ptr, uc_mem_regions, uc_context_alloc, uc_context_save & uc_context_restore. - New memory hook type: UC_HOOK_MEM_READ_AFTER. - Add new version macros UC_VERSION_{MAJOR, MINOR, EXTRA} ---------------------------------- [Version 0.9]: October 15th, 2015 - Initial public release.