[prev in list] [next in list] [prev in thread] [next in thread] 

List:       radare
Subject:    [radare] internal scripiting and visual enhacements
From:       pancake () youterm ! com (pancake)
Date:       2007-08-20 22:35:23
Message-ID: 20070821003523.03b48607.pancake () youterm ! com
[Download RAW message or body]

I've been working on the head-0.8.4 branch (ale!) adding some
nice stuff... something that will probably finish on a libreadline
replacement. It's an unnecesary dependency and should die.

First, a little note...i have fixed radare to work better with serial consoles.
Now it's possible to log a radare session using tee:

 $ radare /bin/ls | tee ls.log

ATM I have partially replaced the history stuff. The libreadline looks
not very nice and it's hardly connected to the input stuff. So it is
the first piece to be wrapped.

Now you can access to the history commands and run them using a shell-like
syntax:

!h  -> show history commands of the current session
!l  -> list labels and offset into history string
!~  -> remove all labels and session history
!#  -> # is a number from 0 to infinite-1 that means to run the command number '#'

The history code has been used to manage comment commands. Yeah that's new
stuff. A comment command (cocos for the friends) are defined as:

 ;label:
 :x 20
 s +0x40
 ;loop 3 label

The previous code looks pretty selfexplanatory, but i will explain:

 The comments are now used to define code to be executed by radare, in the
 history format way. This is a bit limitated at the moment, so, you cannot
 actually load external scripts or share local/global variables, but here
 is the way.

Commands implemented are:

 ;break   - stops a loop
 ;foo:    - all strings starting with ';' and ending with ':' are understood as labels
 ;loop <times> <label> - repeates a goto N times
 ;goto <label>    - jumps to the label and executes until break or EOH
 ;hdump <file>   - dumps history to a file
 ;hload <file>   - load history from a file (replace current one)

Help is available via ;? command.

You can type !+ or !- to enable or disable command execution. this can be used
to inline scripts with copypasta. but you cant interpret more than one time the
same, because the label implementation. But I will fix that too.

As you see.. this is something like an internal scripting. This can be joined
with

I have used ioctl to get the columns of the terminal, and automatically
resize the view. In visual mode the print dump is autoadapted from an
alarm(), some code cleanup has been done and more print commands accept
colors (+40%! :D) I will happily accept ideas for colorization and so. 

Look at the latest two commits fmi:

  http://news.nopcode.org/miau/pvc.cgi?prj=radare

0: f12ca246
author: pancake at dazo
date: 20070820-23:43:29

* Yay: Now we have ;goto and ;loop  commands to move around history.
  This looks like a turing machine ;)
* config.h has changed. make clean is recommended to avoid segfaults
* Labels are now defined with ';:' for example:
* Add '!+' and '!-' commands to enable/disable execution (history.c)

  > ;show-var:

* Add label_get and label_show functions. this is all done from history.c
  so they can be static.
* Add '!l' command to list all labels
* Loop break (;break)
* TODO: conditionals for jumps

1: 2ffa5757
author: pancake at dazo
date: 20070820-22:33:09

* Fix the %COLUMNS weirdness. Use winsize structures.
  On visual mode an alarm is scheduled to automatically resize
  the terminal providing a better look and feel
* Make HEXB fit better on %COLUMNS
* Autodetect when radare is working with non terminal output (serial console)
  This is useful when you want to log a radare session easily.

  $ radare /bin/ls | tee log.file

  This way %COLUMNS are forced to be 80 at startup. You can redefine this
  by hand if you want :)
* Split the drawing part from the input code. This way I can throw it from the alarm
* Add history.c with lot of hiztory_ functions. This is a wrapper for the libreadline
  one, allowing you to emulate the history functionality in a better way without
  the need of libreadline.
* This is dupped info, so in the future I plan to completely replace libreadline,
  or at least provide a minimalistic version if you want to link against libreadline,
  this will be good for the BSD family that uses libedit or so
* Hijack '!h' command to show the history list
* Reorder all print modes for nicer readibility (still shitty)
* Colorize the rest of print modes. Maybe I should test it more and define new color
  palettes.


  --pancake


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic