Radare2: 4.1.0 – codename ‘antull’

12/19/2019 12:07 am

Radare2: 4.1.0 – codename ‘antull’

Release Notes

Version: 4.1.0
From: 4.0.0
To: 4.1.0
Commits: 252
Contributors: 40

Authors

Changes

anal

  • Improve SP based variable analysis
  • Some more helpful messages for anal.verbose
  • Fix first r_anal_op call after asm.bits change
  • Improve SP based var analysis
  • Fix ms cc wrong argument analysis
  • Fix r_type_del() for typedefs (Fix #15337)
  • Add base64: for afn
  • Move the fcn preludes into RAnal and add anal.jmp.tailcall (-1,0,N)
  • Fix typo in ios-syscalls.txt (#15436)
  • Initial implementation of afvf – show bp-relative stackvars
  • Insert arguments into types SDB on function analysis

arch

  • Add support for or1k (OpenRISC) disasm+analysis (#15515)

asm

  • Fix ignored asm.bits settings because of RBin overrides
  • Fix for #15459 – Also set the first operant to the right value on a mov from pointer with offset
  • Add ARM strd support (#15388)

bin

  • Add 64-bit iOS SEP xtr plugin
  • Add PIE flag check in kernelcache detection
  • bin.str.enc: Accept UTF hyphen aliases (#15492)
  • Support UTF32-BE decoding (#15472)
  • Recognize Unicode BOMs (#15469)
  • Use pj in the izj and izzj commands
  • Fix #15445 – Add support for Mach-O external relocs
  • Add support for C64 PRG fileformat
  • pd: Don’t abort string printing on initial null if bin.str.enc != guess (#15446)
  • Fix #14279 – Ignore entrypoint on non-executable ELFs
  • Analyse HIOS and LOOS symbol types by default. (#15411)

build

  • Fix #15485 – Improve argument parsing in sys/{install,build} (#15486)
  • FIx 32bit windows
  • Rename “asan” to “sanitize” (#15412)
  • Fix build for 32bit Linux systems
  • Fix build of the onefied shared lib\xa0

command

  • Very simple tree sitter integration (#15414)

config

  • Pass R2_CONFIG file to ! commands and serialize methods

cons

  • Fix #14197 – Don’t highlight control chars on hud filter (#15552)
  • Include last line when greping using foo~n.. (#15524)

core

  • Fix some Race Conditions with the thready task scheduler (#15667)
  • Make Task Scheduling Explicit (#15511)
  • asm.cmt.off: Accept 0 & 1 as aliases for false & true respectively (#15500)
  • Use sigaction instead of signal
  • CPU affinity API introduction
  • Honor cfg.editor in ‘vi’ instead of always using ‘vi’
  • Implement $foo:=,+=,-= and $foo to alias some flags commands
  • Support ‘f foo+=4’ and ‘f foo-=4’ syntax for flags

debug

  • Improve debug rebasing and fix partial windows rebase
  • Refactor debug native’s wait function
  • Fix native debug not working with files that were opened as RW
    • Add ppid to win32 debug and ‘dp”s display/json
    • Add process selection to w32 debug
  • Fixed a crash caused by reopening gdb
  • Fixed not killing child processes and added detach
  • Fixed gdbr warnings and a dpt crash after debug was over
  • Added an event to signal the end of the debug session
  • Fix ‘oo’ rebasing when leaving debug and add ‘doc’ to exit
  • Silence drr warning on UT64_MAX registers
  • Fixed an issue with detached child breakpoint inheretence
  • Added oodf\\doof to enable rebasing for remote debug
  • Rebase Breakpoints for PIEs
  • Added dp processes info support to gdbr
  • Add breaking to ood in linux to avoid execvp freezing
  • Allow debug plugins to modify pid/tid on select
  • Fix linux_set_options error
  • Add process selection to linux native debug
  • Setting parent pid on pid list on BSD
  • Show all processes for pid 0 using dp
  • Improve linux native debug dp output
  • Fix getting DRX breakpoint size
  • Fixed overflow that broke remote debugger reopening
  • Impl. list modules for WinDbg
  • Fix WinDbg IO in page boundaries
  • Fixed windbg concurrency and added missing locks
  • Fixed windbg pipe timeout behavior on linux
  • Added rebuild rules for windbg
  • Fixed windbg continue on windows 7 64bit
  • Allow breaking for WinDbg
  • Update hardcoded gdbr registers for 16/32bit x86 (#15488)
  • Added parsing support to all gdb registers
  • Fix gdbr’s reg_write and reg_next_diff for reverse stepping
  • Reduced gdbr’s tcp connect timeout and added a break
  • Fix gdbr not closing sockets after connect failed
  • Add break to gdbr’s read_packet and move isbreaked to libgdbr
  • Fix gdbr_write_registers and refactor gdbr_write_reg
  • Replaced lock_check with tryenter in gdbr_read_registers
  • Add breaking to gdbr connect to avoid waiting on invalid connections (#15442)
  • Add experimental ymm regs support for linux-x64 and extend drm command
  • Add Windows 8 and 8.1 WinDbg profiles
  • Fix attaching to a pid on Windows (#15406)
  • Fixed w32dbg breaking issues (#15386)
  • Add support for printing xmm* as packed floats and doubles (#15378)

disasm

  • Fix hidden hint.lea for hint.pos==0
  • Improve switch-statements in disassembly
  • Add refs, xrefs and esil columns to pdt
  • Add asm.cmt.esil to show ESIL as comment

doc

  • Improve macOS installation documentation (#15438)
  • Fix links to Doxygen documentation (#15377)

gdbclient

  • gdbclient reduces risk of use after free down the road

io

  • Uses the setitimer api instead for the alarm in self://
  • Automatically set the debug plugin when opening debug uris (#15403)

json

  • Add current process field to dpj

network

  • Fix r_socket_connect not using the given timeout in unix

print

  • Fix #14661 – Support parsing binary protobuf data (#15423)
  • Add utf-8 support in r_print_rangebar (#15389)

r_debug

  • Refactor signal handling for FreeBSD

search

  • Introduce the r_magic_load_buffer() api and boolify a bit
  • Update RSA key search to find larger keys (#15494)
  • Search for AES 128, 192 and 256-bit keys (#15426)

signatures

  • Add auto zignspace generation for the zg command (#15402)

test

  • Implement asm, fuzz and json test runner in r2r.v

util

  • Add RIntervalTree data structure
  • Added r_th_lock_tryenter API (#15454)
  • Use HtPP for RStrConstPool (#15424)

visual

  • Improve the interaction with decompilers in panels
  • Reduce the blocksize on some hexvisual modes

windows

  • Add command to identify window under cursor
  • Fix #15456 – Fix reopening in write mode
  • Fix hang when running dc in a task

To Review

  • Release 4.1.0 – Codename ‘antull’
  • Fix lock ordering of RCoreTaskScheduler.lock vs. RCoreTask.dispatch_lock
  • Remove RThreadLock.refs
  • Fix a race in tasks
  • Make SP based variable analysis aware of changes to SP
  • Use delta inside stack to identify the variable used instead of offset to SP
  • Keep track of offsets to SP used to access the variable
  • Fix argument printing order for reg args
  • Add test
  • Revert pe coverity fixes to fix ihj
  • The format is reused for printing and internal type representation,
  • breaking the JSON by making the value field in ihj empty since “llx”
  • isn’t a valid type
  • Fix ESIL UB
  • Mark fixed tests as such
  • Fix some FX Tests
  • Separate windows, linux and *bsd/apple since they have vastly different
  • logic and the ifdef jungle implementation was too confusing
  • sys/meson.py: Use == ‘vs2017’ instead
  • The FD was kept open and ptrace was prevented from opening it with the
  • error “Could not execvp: Text file busy”. Fixes issue #15650.
  • Solving r_debug_handle_signals build warning issue.
  • Fix #15653: Silence MSVC XP deprecation warning
  • Use eprintf instead
  • Fix typo
  • Make it possible to use sysmagic again (#15658)
  • Compile tree-sitter with std=c99 flag (#15654)
  • SystemZ analysis logic error
  • Fix some MSVC warnings
  • Add ppid to dp and fix dp= for windows (#15649)
  • Previously, dp= wouldn’t fully switch to the given process since it
  • was treated like dpt thread switching, leaving the debugger in
  • an undefined state.
  • Function r_anal_cc_arg should just return NULL when nothing is available (#15646)
  • Function r_anal_cc_arg should just return NULL when nothing is available
  • Callers should be able to handle NULLs
  • Fix memory leaks in unit tests
  • Some coverity fixes (#15643)
  • The plugin would try to work with an old version of desc that was already
  • freed by r_io_close_all after closing the session. I set debug_gdb’s
  • global ‘desc’ to NULL in detach as a temporary solution. We should convert
  • to **desc to keep an updated copy of the pointer.
  • Fix warnings in or1k_disas.c
  • Fix #15545 – Fix NULL derefs after r_file_slurp() fails
  • Fix format string in windows_message.c
  • Replace some strstr() calls with strchr()
  • Fix Alignment Check in aae on bit change
  • RDebugPid not being initialized with NULL resulted in a free on an invalid
  • pointer after gdbr_threads_list failed.
  • Fix memleak in r_anal_free() (#15631)
  • Fix heap-buffer-overflow bug in get_src_regname() (#15630)
  • r2r.v: Fix test skipping (#15629)
  • r2r.v: Move threads into r2r (#15628)
  • Some Coverity defect fixes (#15626)
  • Not all of the data was rebased after reopening the original file and
  • there was warning message from set_baddr which isn’t needed here.
  • Switched to __rebase_everything instead of the old methods that were used.
  • r2r.v: Support running of just 1 cmd testfile (#15616)
  • r2r.v: Fix invocation of json tests (#15624)
  • Fix AppVeyor (#15623)
  • Refix magic’s bgets()
  • Fix another infite loop in RMagic.loadBuffer()
  • Fix bread in RMagic.loadBuffer()
  • Loading json tests is not the same as running them (#15618)
  • In this way 64-bit SEP kernels aren\u2019t wrongly detected as XNU kernel caches.
  • Rename or1k insns global (#15613)
  • As in certain build configurations it conflicts with the Capstone\u2019s symbol of the same name, raising errors in the linking phase.
  • The warning:
  • WARNING: r_core_anal_hasrefs_to_depth: assertion ‘core && value != UT64_MAX’
  • failed (line 2062)
  • This way registers like ‘orax’ will simply have an empty reference like before,
  • just without an annoying warning when there really is nothing to telescope.
  • {“reg”:”orax”,”value”:”0xffffffffffffffff”,”ref”:””}
  • Use ONE_STREAM=1 instead and assume it sets scr.onestream
  • Name variables based on their offset from the start of the stack frame
  • Fix tests
  • Fully implement the asm test runner in r2r.v
    • Must use the native api to speedup
    • TODO: Multiple cores to run in parallel
  • Fix N and V results in 6502 BIT ESIL (#15562)
  • r2r.v – better portability
  • Fix some more asm tests and use the same warning style for r2r.v
  • Fix crash on oom when command line is too long. Aim to fix #15543
  • Initial implementation of the asm/dis tests support in the V suite
  • Remove broken Threading Code from main for #12996 (#15554)
  • Previously, forked children would instantly die if the fork was stepped
  • over using a breakpoint which is accessible to the child process.
  • Removed deprecation messages (#15557)
  • Moved the information in the help messages
  • Add RRangeTree
  • Inclusive/Exclusive
  • Add r_interval_tree_delete and r_interval_tree_resize
  • Fix r_interval_tree_all_at()
  • Fix a bug of the tab (#15559)
  • Imports Tests from radare2-regressions (#15546)
  • Fix some warnings (#15549)
  • Fix signed integer overflow in r_asm_massemble (#15551)
  • Fix an int Overflow in r_asm_massemble() for #15543
  • Fix length type in r_str_trim_tail()
  • Aim to fix another integer overflow in r_file_slurp
  • Fix integer overflow when assembling a 2GB file
  • Blindfix for #15543 – aka CVE-2019-19590
  • Most servers/clients should have xml support by now so it should behave
  • like dp in any other debugger. vFile is the only way to get detailed pid info unfortunately.
  • Execvp may hang until a signal is received on some systems(reproduced in
  • arch linux) in case the file can’t be executed for some reason(broken
  • symlink, different arch, etc).
  • Previously, when using dp=, the debug plugin would set a new tid based
  • on the requested pid, but r_debug_select would set the old tid as dbg->tid,
  • resulting in issues interacting with the current thread. This could also
  • be an issue when the requested pid/tid is invalid and the plugin selects
  • something else.
  • Previously, setting options would fail sometimes since PT_ATTACH’s attach
  • SIGSTOP wasn’t hit before reaching linux_set_options.
  • Previously, dp= wouldn’t fully switch to the given process since it was
  • treated like dpt thread switching, leaving the debugger in an undefined state.
  • Add user Pointer to RBNodeFree (#15540)
  • Fix sj current position marker after buffer wrapping. (#15538)
  • Coverity Scan GitHub Action (#15539)
  • ONE_STREAM_HACK & scr.onestream: Force expected ONE_STREAM order if necessary (#15535)
  • Fix spp warning (#15530)
  • Try showing offset when there are no redo items.
  • Fix handling of many seek history items and other edge cases.
  • Previously, the command didn’t show the pid’s path, replaced the path
  • field with current/ppid, and showed the ppid instead of only showing the
  • requested process and the children of the requested process.
  • Fix some warnings on Windows (#15532)
  • opt->sz is initialized with r_buf_size at r_bin_open_io using an io
  • buffer if r_bin_open_io can’t open a file buffer. Since the debuggers
  • returned unsigned values to opt->sz which is signed, opt->sz would
  • overflow and contain a negative value, causing r_bin_open_buf to fail.
  • Went ahead and modified CUR_END values for all debuggers even though this
  • should only affect remote debuggers. ST64_MAX should be enough.
  • Python and VS updates for Windows/clang (#15526)
  • Python and VS updates for Windows/clang
  • Fix labeler environment
  • windbg module build warning fix (#15514)
  • Switch labeler to periodic-labeler (#15517)
  • With actions/labeler#12
  • being an issue, the action’s labeler is useless for PRs that come from a fork.
  • This one runs on a cron timer instead and doesn’t suffer from the same issue.
  • fixed bin.libs loads and dex use after free (#15522)
  • Fix a Double Free for Dex (Fix #15519) (#15521)
  • Add Comments to RCore and kill some unused Members (#15513)
  • Fix #15498 – Fix stdcall stack calling convention (#15508)
  • Remove unnecessary RConfig Members (#15509)
  • Fix a Double Free in tms320/c55x+ (#15505)
  • Before we didn’t check if a virtual address read/write would go through a page boundary. This fixes it.
  • Also do some formatting and re-enable some useful error messages
  • Fix XP build
  • Partially decouple Tasks from RCore
  • Add pull request labeler (#15503)
  • Previously, windbg_break would freeze waiting on a lock instead of breaking,
  • taks other than wait weren’t breakable and read regs would freeze the
  • process while waiting for a mutex.
  • Previously, linux would timeout when trying to connect and would timeout
  • too frequently since milliseconds were treated as microseconds.
  • ContinueApi2 only worked on XP 32bit while ContinueApi works on both.
  • Previously, continue would do a single step.
  • Fix OOB read in windbg_reg_read
  • Add locks to prevent collision
  • Enable timeouts on the pipe backend
  • Fix #15495 – show current seek history position in sj
  • bin.str.enc: Accept uppercase aliases (#15496)
  • bin.str.enc: Check for NULL (#15493)
  • Fix anal.timeout calculation in r_cons_break_timeout (#15490)
  • Remove broken Task Pausing and unnecessary RCore.lock (#15489)
  • Fix null deref when using waf on non-valid file
  • Inital GitHub Actions (#15467)
  • Inital GitHub Actions
  • Disable Windows for now
  • Disable tests for now
  • Add missing BT instruction optype for x86
  • There are still platforms that don’t support the target xml format.
  • Added parsing of gdbr arm/arm64 register features and added a default to >64bit registers
  • Since r2 doesn’t support set/get to large/vector registers (it will still work
  • when printing gdb’s registers with dr/drt or restoring the registers
  • with reverse stepping), there’s a possible issue that the user will get
  • lots of prints of “r_reg_[get/set]_value: Bit size 128 not supported”
  • when running various debug commands that use those functions. This fix
  • simply moves those registers away from gpr to avoid those prints while
  • still being able to view/restore the registers.
  • Minor Refactoring and Comments for RBTree
  • Fix the flags.prefix with flags.inline glitch
  • The previous implementation was limited to 64bit registers and didn’t
  • parse the ‘feature’ field.
  • Writing registers with gdbr worked with single registers because
  • reg_next_diff started at delta 0 and only had to run the diff once for
  • the single register that was changed. When running reverse
  • stepping/continue, multiple registers are changed at once so
  • r_reg_next_diff would fail every time due to incorrect offset calculation.
  • The new r_reg_next_diff also support different register sizes to restore
  • all registers correctly.
  • The endianity swapping part from reg_write isn’t needed since the arena
  • is the return value of ‘g’ which is already in the correct target byte
  • order (see: https://sourceware.org/gdb/onlinedocs/gdb/Packets.html#read-registers-packet)
  • Fix #15451 – Update Windows compilation documentation
  • Connect isn’t effected by r_socket_block_time since it can only change the
  • timeout of read(and not implemented, write) actions with setsockopt.
  • Also, connect may wait for an unspecified amount of time so we have to use
  • select.
  • The socket object was free’d without closing the fd. In the following
  • gdbr_connect attempts, tcp’s connect would freeze on a valid socket since
  • connection based protocol sockets may successfully connect only once,
  • any connections beyond that are undefined behavior.
  • Remove printf debug leftover
  • Some fixew for the graphviz code (#15470)
  • Add TODO comment for overlong strings
  • No more hacky base64
  • iz != izz, before izz was iz+izz
  • Fix x86 lahf instruction
  • Fix autocomplete
  • Don’t contribute with patches
  • Emit sp-based var offset as a number
  • The output of afvsj shows offsets of sp-based variables as strings.
  • This fix changes the offset to be shown as a number, just like sp-based arguments and bp-based variables.
  • Since read_packet has a large number of retries you would wait for it
  • for a couple of seconds after breaking in functions like connect and
  • vcont
  • Previously, write_registers sent a partial string instead of the
  • correct register format which specifies that each byte should be
  • represented by two hex digits.
  • This change allows reading registers when calling read_registers in
  • a thread that holds the recursive mutex.
  • r_th_lock_check only returns the refcount which isn’t enough to know if
  • the current thread is holding the mutex when a recursive mutex is enabled.
  • Support UTF16-BE decoding (#15450)
  • Support UTF16-BE decoding
  • Add spaces
  • Fix few warnings for the gdb client
  • Fix crash
  • Cleanup tab-completion initialization code
  • R2 will hang while waiting for any resolvable port to respond, this takes
  • a long while since connect is attempted twice in r_core_file_open.
  • Update capstone v4/next from Git
  • Added break to gdbserver vCont and refactored the code to use locks (#15433)
  • The previous gdbr implementation didn’t allow interrupting background
  • tasks with &b since send_vcon wasn’t properly configured with the cons
  • api. In addition to that, gdbserver doesn’t support processing multiple
  • commands at the same time, resulting in undefined behavior once cons
  • were set up for vcont.
  • This commit adds the relevant cons api and solves the concurrency issues
  • by adding locks on all socket related logic.
  • Fix r_sys_sigaction not setting up the requested signals (#15440)
  • The for loop’s iterator was initialized with the first member of sig[]
  • instead of 0. Added an error to avoid this issue going unnoticed.
  • r_list_free() -> r_list_free ()
  • r_list_new() -> r_list_new ()
  • __exit was listed twice with same number (1), and fork was missing.
  • Fix broken pkg uninstall command on macOS (#15437)
  • Provide a proper package ID to get rid of the following error:
  • No receipt for 'radare2.pkg' found at '/'.
  • Prepend a / for each returned path by the pkgutil command, to make
  • it an absolute path instead of a relative one.
  • Avoid invoking the sudo command for each file, which speeds up the
  • command significantly.
  • Avoid ambiguous signing certificates on macOS.
  • If a user manually installed a new code signing certificate into the
  • login keychain as documented, the install script will fail to sign r2
  • because the sys/macos-cert.sh script generates a new certificate in
  • the System keychain. This results in the following error when signing:
  • org.radare.radare2: ambiguous (matches “org.radare.radare2” in /Users/user/Library/Keychains/login.keychain-db and “org.radare.radare2” in /Library/Keychains/System.keychain)
  • To be constistent with sys/macos-cert.sh, change manual certificate
  • generation steps to install to System keychain instead of login
  • keychain.
  • Mention that code signing certificate generation is automated by the
  • install script before listing the manual steps to generate a new
  • code signing certificate.
  • r_list_newf(..) -> r_list_newf (..)
  • Use free() instead of R_FREE() in r_list_delete()
  • Same reason as #15430.
  • Use PJ in oj (#15434)
  • This fixes escaping issues
  • Fix Leak of Flag Zones (#15432)
  • Use free() instead of R_FREE() in r_list_free() (#15430)
  • Refactor r_flag_color() to r_flag_item_set_color() (#15429)
  • Add r_spaces_purge() (#15428)
  • Fix comment about RFlag.ht_name (#15427)
  • Faster interactions — can be improved still
  • Add missing entry for meson
  • Fix r_strbuf dependency on r_cons
  • This allows the ‘zg’ command to auto generate zignspaces from function
  • names by utilising the ‘:’ convention used in zignatures. Now when ‘zg’ is
  • run if any funtion names are in the format ZIGNSPACE:FUNCTION, the
  • zignspace will be extracted, created and the function applied under its
  • scope.
  • Fix build (#15422)
  • Fix #15419 – Fix bytes field in aoj
  • Hold this analop warning under anal.verbose
  • tree-sitter-integration: support tmp-seek, arged, and interpret commands
  • Make meson automatically download tree-sitter and radare2-shell-parser grammar
  • Add tree-sitter/radare2-shell-parser directories in gitignore
  • Add Support for tree-sitter in acr/makefile
  • Just use one script to download 3rd party repositories in shlr
  • Use cfg.newshell
  • Fixes for Windows debugging (#15418)
  • Fix error when continuing after attaching to process
  • Get threads correct EIP
  • Fix some memory corruptions and small refactor
  • Remove core->oobi because not used (#15413)
  • Fix leaddrs leak (#15417)
  • $foo:=123 f foo = 123
  • $foo+=4 f foo @ foo + 4
  • $foo s foo
  • Strip bins and libs for the Debian package
  • sys/meson.py: –asan accepts sanitizer list (#15405)
  • Fix #15407 – Fix using unexpected ACP for input on Windows (#15408)
  • Fill op->mnemonic in anal-gb
  • Use RPUSH in anal-gb
  • Clarifying yara-to-r2 integration documentation. (#15404)
  • Sync default sanitizer list of sys/asan.sh and sys/meson.py (#15397)
  • Sync default sanitizer list of sys/asan.sh and sys/meson.py
  • Keep signed-integer-overflow
  • Hardening esil-dfg
  • Modified debug_native to handle break’s thread switching behavior
  • The user was interrupted during continue and switched to a different
  • thread since DebugBreakProcess creates a thread that triggers a breakpoint.
  • With these changes the DebugBreak thread is recorded to skip the breakpoint
  • event afterwards.
  • Modified r_debug_native_wait to avoid switching between threads for each event
  • The debugger should return to the requested thread after handling events
  • in other threads except for breakpoints.
  • Refactor drm to be ready for the YMM registers (#15394)
  • Fix Appveyor hang. (#15396)
  • fix linux x86 build (#15395)
  • Fix assert
  • Fix build
  • After release version bump
  • Add some asserts in rreg
  • Fixed w32dbg breaking issues and moved break_push to w32_dbg_wait to support stepping as well
  • Previously, breaking would only work during ‘dc’ because it was pushed
  • in debug.c specifically for continue. This change moves the
  • responsibility of pushing/popping w32_break_process_wrapper to
  • windows_debug.c instead to support calls to w32_dbg_wait from anywhere.
  • sys/meson.py: Use -fsanitize=… instead of -lasan when linking (#15390)
  • Use pj api in drrj (#15391)
  • This also solves an issue with drrj in windows since the code relied
  • on iter->p to know if a comma should be prepended, but windows always
  • has it initialized so it was always prepended – invalidating the JSON.
  • Make the generated r2.bat use bat path_relative syntax instead of hardcoding. (#15383)
  • Fix double-free in canvas.c (#15379)
  • stack.nl is no longer active