radare2 0.9.2
After about 10 months of development I'm proud to announce a new release of radare2. It has been delayed many times and I'm not happy about that, but stability requires some time. I'm happy to see new contributors and users interested on the project.
This document describes a compacted list of all the changes done from the previous release (0.9) and this one (0.9.2).
As always, if you want to use the r2 api from python, nodejs or others you need to install the r2-bindings package which depends on valabind and swig.
Big news for this release are an official Android package maintained by Pau Oliva (pof) and an embedded http-1.0 webserver which provides a simple way to implement an user interface.
Lot of bugs has been fixed and new CPUs are supported while code analysis gets better and is focused on x86-16,32,64, arm and mips.
Enjoy!
--pancake
Commit Authors
git log 0.9..HEAD | grep Author| sort -u
Main Developer
pancake [email protected]
Contributors
- Anton Kochkov - xvilka - build system
- earada [email protected] - bug fixes
- Eduard Burtescu - eddyb - nodejs bindings
- Pau Oliva [email protected] - android installer and apk
- Rodrigo Chiossi [email protected] - fix rasm2 -D infinite loop
- Roi Martin (@nibble_ds) [email protected] - code analysis x86 and arm
- Simon Ruderich - cfg.pager and random bugfixes
- rudi_s - test write cache, improve seek/undo, fix segfault in r_cons
- flux - add arm assembler patches to support barrel shift and fix bitwise ops
- Anton Bolotinksy - use absolute path for libraries in OSX linker
- vext01 - test suite and openbsd bug reporting
- l0gic - reporting bugs
- thuxnder - dalvik payload opcodes
- nics - requested support for dumping huge files with 'wt'
- w_levin patch fixing memory leaks
- ac1d3 - fixes in the build system
License
LGPLv3
Numbers
More than 300 commits
Time range
Date: Mon Oct 1 17:48:10 2012 +0200
Date: Tue Dec 6 03:03:50 2011 +0100
Web Server
- Added an embedded webserver that listens on 9090 port
- r2 -c=H /bin/ls
- Use http. env vars to configure
- Implemented a basic web UI
- Autodetect osx, win, linux and android browsers
Binaries
- mach0
- section perms are properly handled now
- support mach0 files with multiple sections using the same name
- Fix delta bug with fat mach-o
- Find main symbol on new platforms
- Fixed lot of bugs and vulnerabilities in the ELF parser
- Fix string parsing in rabin2 -z and more random fixes
- Add support for wide string dump in r_bin
- RBinSize implemented for elf, mach0 and plan9
- Dwarf info with null filenames are now supported
- Initial implementation of r_bin_size (rabin2 -Z)
- Initial support for Classes in RBin (java, dalvik, objc, c++..)
- Add 'id' command to show debug info
- Add r_bin/mz plugin (old EXE binaries)
- Add support for Java debug line information
- Fix parsing of ELF binaries generated by TCC
Debugger
- Add 'dbs' command to swap/toggle breakpoints
- r2 -b 32|64 selects sub-binary and debugger mode for osx and linux
- Assume -w when running r2 with -d
- dbt - backtrace accepts an argument to redefine ebp
- Fix backtrace for osx-x86-32
- regdiff colorizer fixes (dro works again)
- Fix dcr (continue until ret)
Assembler/Disassembler
- New CPUs supported:
z80 : assembler + disassembler + basic code analysis
m68k : disassembler + basic branch analysis
dcpu16 : assembler + disassembler
arc : disassembler and analysis of few branch instructions
Changes in current supported platforms
mips : rewritten code analysis and added pseudodisasm and debugger
arm : import and use arm.winedbg (arm and thumb) and disassembler
x86 : enhace x86olly disasm, add more instructions to the x86.nz assembler
dalvik : add android4.x new opcodes and payload ones. added pseudo disasm
avr : use standard disassembly syntax
- Fix rasm2 infinite loop for -D option.
- QNX/arm port (this is bb10 and playbook devices) (no debugger yet)
- Implemented 'pdr' recursive disassembler
- Add coprocessor move operators to arm.winedbg
- Added iOS/arm register profile for the native debugger
- Fixes in r_core_disassemble() Honor delta and r_asm_set_pc()
- Show breakpoints in disassembly
Print commands
- Compacted many commands like pw -> pxw
- Added yx command to show yank buffer in hexadecimal
- Fix pZ-pz help message and stuff
- Add python print buffer (pcp)
- Added 'pa' command to print assembled instructions
- Add 'pz' (print ascii until zero) command
- p6[de] Fix and use the base64 encoder/decoder
- Add 'pif' command. as in 'pdf' one resizes the blocksize
- Entropy bars with 'p='
- Add pf c for signed bytes
Commands
- Add ?ip to take input from ?I and select path to file
- ?i stores the input into the yank buffer now
- ?I accepts a file name as argument which is loaded as hud
- ?k used as key=value temporal storage
- Add support for temporary block contents (from file, string or data)
- Renamed ?z to ?l
- Added dummy 7bit<->8bit char encoding
- Quoted strings can now be temporary seeked "x"@239
- Fix quoted commands parser
- Fix nested command repeaters
- Better parser of commands, macros, pipes and quotes
- Better error reporting when using unexisting flags or wrong syntax
- r2 -q flag now quits after processing -c or -i
- Add b+ and b- commands
- Grep
- Implement RCons grep ~foo? as an alias for ~?foo
-
pd|!grep eax~ebx now works
- Add ^ and $ in cons grep expressions
- Implement ~& attribute to match all words
- Add ~?? to show help of grep
- Implement support for >- (pipe to editor)
- Allow to load multiple files with -i
- Support for quoted strings and backspaced spaces in macro arguments
- Added support for anonymous macros
- Add support for !! command to use r_cons
- Obey q! in scripts
- Use (* to list macros
Search
- e search.show = true # by default
- Implemented support for visual search and search.in=block
- Add visual search and enhace search output
- Added support for binmask searches
- /x 123456 ffc0e3
- Add /x key:msk (':' separator)
- Fix search counter
- Add search.in=block
- Add support for nibble-level search keywords
Visual mode
- Added Visual diff mode (press 'D' in visual) (tab to swap columns)
- Added 'cc' command to compare bytes with column hexdiff
- Added diff.from and diff.to eval configuration variables
- Chop RLine buffer when > console columns
- Mark cursor in visual for pw and pq
- Do not prompt or clear screen when using V in batch mode
- New HUD input method for the visual mode ('_' key)
- Toggle breakpoints with 'b' in visual
- Visual keystrokes for dcu and dcr with cursor mode and sS
- Refactor some visual keybindings
- fF in visual is now nN
- nN in visual has been deprecated. Use > and <
- Rename Vw to Vi (write->insert)
IO
- Handle zip:// and apk:// uri in r_io
- Add 16bit x86 segment IO addressing mode XXXX:YYYY
- Add support for local networking in RSocket
- Added 'om' command to create, destroy and list IO maps
- Fix invalid write in r_io_cache_read().
- 'om' now works without size (file size)
- Add r2 -m to specify the load map address
- max blocksize is now configurable via io.maxblk
- Fix bug in r_core_read when io.va and sections used
- Fix o- segfault where r_io_desc_free called twice
- Lot of fixes and regressions tests for the io api
- Create file if not exist when -w is used
- Fix bugs in r_io_maps and io.va
- Fix 'ao N' command
Bindings
- Requires valabind 0.7.2
- Vala, Python and NodeJS are the official bindings
- LUA, Perl, ... are also supported with valabind->swig
- Updated all vapi bindings
- Added nodejs bindings
- Add r2irc.js example (nodejs r2 irc bot)
- Fix segfault in xtr_fatmach0 on small files
New features
- Added yesno dialog input method "?iy"
- Initial support for dwarf and java debug information
- id command will show debug information of loaded binary
- Added new command ?y to get and set yank buffer contents to stdout
- Add --with-rpath to fix build on linux with !/usr
- Add support for multiple cons grep attributes
- rax2 -f -> floating point support
Fixes
- Fix ragg2 -d for one byte writes
- Fix memleaks, nullref and undef (clang-analyzer)
- Fix infinite loop in rasm2 -D
Updates
- Update sdb to 0.5, sdb is now public api
- use acr 0.9.1
- valabind 0.7.2
Enhacements
- r_num_math reimplemented with r_num_calc for proper parenthesis support
- added support for floating point calculations in r_num
- Handle ^Z in dietline
- Drop interactive mode when '>' is used
- r2 - is an alias for r2 malloc://512
- Improve startup times by using r_file_mmap instead of malloc+read
- rarun2 now supports connect/listen with r_socket
- Added BLOCK and BYTES in r_core_sysenv_begin()
- Fix parsing of commands with nested quotes
- r2 -e now evaluates before and after loading file
- ?p print error if VA is not
- ?k (keyvalue) command is now more usable. supports ``..` strings
Removed
- The gear bindings, they're obsolete.
- armthumb moved to radare2-extras. Replaced by arm.winedbg.
- Remove tests/ and use r2-regressions from vext01 github
- ranal2 is not installed anymore
Code Analysis
- Fix the ff25 x86-64 opcode analysis
- Add file.analyze eval config variable from radare1
- Fix analysis of 16 bit word opcodes on x86
- Better support for 16bit x86 code analysis
- Guess base arch anal.plugin when asm.arch is set
- Resolve address of jmp [(rip+)0xoffset] and call [(rip+)0xoffset] in r_anal
- Properly detect end of functions in visual
- Traps and unknown jumps are now end-of-block opcodes
- Show strings referenced by relative LEAs
- Fix code analysis blocksize issue
- afr and VtR to rename functions
- Removing a function now deletes all sub-functions-locs
- afl will list functions
Graphs
- Add 'agv' command to view graphs with cmd.graph
- Add demo graph view for www, add pad command remove a8
- Added htmlgraph.sh as a cmd.graph html5 graph backend
- Affected by scr.html (useful for www)
Behind the scenes
- Add binr/blob to build r2 like busybox (used in android build)
- Single binary with symlinks (main dispatcher)
- Show git HEAD hash in r2 -v
- Moved to GIT (from hg)
- Lot of code cleanup, bugs fixes and speed ups
- Added a regression test suite (vext01 repo)
- Revised use of RList
- Add r_str_unescape() helper function
- Swap eval/cmd load order in r2
- Add r_core_cmd_str_pipe()
Experimental
- cparse support to load function and struct info from .h
- uses the lemon parser, supports vala-like attributes
- not yet integrated (./configure --enable-cparse)
- Check and use flex in configure.acr
- Initial parser dwarf implementation (incomplete)
- Support for classes in rbin, not yet extended