* Rename 'pm' as 'pf' (print formatted data)

* pm is the print magic command
  - uses libmagic .. used for templatting data
* Added 'psp' command to print pascal strings
This commit is contained in:
pancake 2011-02-23 19:11:39 +01:00
parent d9483833c9
commit be7307338b
6 changed files with 40 additions and 5 deletions

View File

@ -32,3 +32,4 @@ WITHNONPIC=@WITHNONPIC@
HAVE_LIB_TCC=@HAVE_LIB_TCC@
HAVE_LIB_GMP=@HAVE_LIB_GMP@
HAVE_LIB_OPENSSL=@HAVE_LIB_OPENSSL@
HAVE_LIB_MAGIC=@HAVE_LIB_MAGIC@

3
configure vendored
View File

@ -262,7 +262,7 @@ parse_options $1
shift
done
ENVWORDS="MANDIR INFODIR LIBDIR INCLUDEDIR LOCALSTATEDIR SYSCONFDIR DATADIR LIBEXECDIR SBINDIR BINDIR EPREFIX PREFIX SPREFIX TARGET HOST BUILD INSTALL INSTALL_LIB INSTALL_MAN INSTALL_PROGRAM INSTALL_DIR INSTALL_SCRIPT INSTALL_DATA HOST_OS HOST_CPU BUILD_OS BUILD_CPU TARGET_OS TARGET_CPU PKGNAME VPATH VERSION CONTACT CONTACT_NAME CONTACT_MAIL CC CFLAGS LDFLAGS HAVE_LANG_C DEBUGGER HAVE_LIB_DL DL_LIBS LIL_ENDIAN BIG_ENDIAN BYTEORDER HAVE_LIB_EWF HAVE_EWF HAVE_LIB_GMP HAVE_GMP HAVE_LIB_SSL HAVE_OPENSSL HAVE_LIB_LUA5_1 HAVE_LIB_TCC USERCC USEROSTYPE WITHPIC WITHNONPIC"
ENVWORDS="MANDIR INFODIR LIBDIR INCLUDEDIR LOCALSTATEDIR SYSCONFDIR DATADIR LIBEXECDIR SBINDIR BINDIR EPREFIX PREFIX SPREFIX TARGET HOST BUILD INSTALL INSTALL_LIB INSTALL_MAN INSTALL_PROGRAM INSTALL_DIR INSTALL_SCRIPT INSTALL_DATA HOST_OS HOST_CPU BUILD_OS BUILD_CPU TARGET_OS TARGET_CPU PKGNAME VPATH VERSION CONTACT CONTACT_NAME CONTACT_MAIL CC CFLAGS LDFLAGS HAVE_LANG_C DEBUGGER HAVE_LIB_DL DL_LIBS LIL_ENDIAN BIG_ENDIAN BYTEORDER HAVE_LIB_EWF HAVE_EWF HAVE_LIB_GMP HAVE_GMP HAVE_LIB_MAGIC HAVE_LIB_SSL HAVE_OPENSSL HAVE_LIB_LUA5_1 HAVE_LIB_TCC USERCC USEROSTYPE WITHPIC WITHNONPIC"
create_environ
@ -350,6 +350,7 @@ HAVE_LIB_EWF="0"; fi
check_library HAVE_LIB_GMP gmp 0
if [ "$HAVE_GMP" = "0" ]; then
HAVE_LIB_GMP="0"; fi
check_library HAVE_LIB_MAGIC magic 0
check_library HAVE_LIB_SSL ssl 0
if [ "$HAVE_OPENSSL" = "0" ]; then
HAVE_LIB_SSL="0"; fi

View File

@ -18,6 +18,8 @@ CHKLIB gmp
ARG_WITHOUT HAVE_GMP gmp disable GMP dependency ;
IFNOT HAVE_GMP { HAVE_LIB_GMP = 0 ; }
CHKLIB magic
CHKLIB ssl
ARG_WITHOUT HAVE_OPENSSL ssl disable openssl dependency ;
IFNOT HAVE_OPENSSL { HAVE_LIB_SSL = 0 ; }

View File

@ -11,3 +11,7 @@ CFLAGS+=-DPREFIX=\"${PREFIX}\"
LDFLAGS+=${DL_LIBS}
include ../rules.mk
ifeq ($(HAVE_LIB_MAGIC),1)
LDFLAGS+=-lmagic
endif

View File

@ -11,6 +11,9 @@
#include <sys/types.h>
#include <stdarg.h>
#if HAVE_LIB_MAGIC
#include <magic.h>
#endif
static int printzoomcallback(void *user, int mode, ut64 addr, ut8 *bufz, ut64 size) {
RCore *core = (RCore *) user;
@ -1094,7 +1097,7 @@ static int cmd_yank(void *data, const char *input) {
r_core_yank_paste (core, r_num_math(core->num, input+2), 0);
break;
case 'p':
r_cons_memcat (core->yank, core->yank_len);
r_cons_memcat ((const char*)core->yank, core->yank_len);
r_cons_newline ();
break;
case 't':
@ -1675,6 +1678,20 @@ static int cmd_info(void *data, const char *input) {
return 0;
}
static void do_magic_here(RCore *core, const char *file) {
#if HAVE_LIB_MAGIC
magic_t ck;
if (*file == ' ') file++;
if (!*file) file = NULL;
ck = magic_open (0);
magic_load (ck, file);
r_cons_printf ("%s\n", magic_buffer (ck, core->block, core->blocksize));
magic_close (ck);
#else
eprintf ("Compiled without magic :(\n");
#endif
}
static int cmd_print(void *data, const char *input) {
RCore *core = (RCore *)data;
int i, l, len = core->blocksize;
@ -1750,11 +1767,18 @@ static int cmd_print(void *data, const char *input) {
} else r_print_disasm (core->print, core, core->offset, core->block, len, l);
break;
case 's':
r_print_string (core->print, core->offset, core->block, len, 0, 1, 0); //, 78, 1);
if (input[1]=='p') {
int mylen = core->block[0];
// TODO: add support for 2-4 byte length pascal strings
r_print_string (core->print, core->offset, core->block+1, mylen, 0, 1, 0); //, 78, 1);
} else r_print_string (core->print, core->offset, core->block, len, 0, 1, 0); //, 78, 1);
break;
case 'S':
r_print_string (core->print, core->offset, core->block, len, 1, 1, 0); //, 78, 1);
break;
case 'm':
do_magic_here (core, input+1);
break;
case 'u':
r_print_string (core->print, core->offset, core->block, len, 0, 1, 1); //, 78, 1);
break;
@ -1798,7 +1822,7 @@ static int cmd_print(void *data, const char *input) {
case '8':
r_print_bytes (core->print, core->block, len, "%02x");
break;
case 'm':
case 'f':
r_print_format (core->print, core->offset, core->block, len, input+1);
break;
case 'n': // easter penis
@ -1863,8 +1887,10 @@ static int cmd_print(void *data, const char *input) {
" pD [len] disassemble N bytes\n"
" po [len] octal dump of N bytes\n"
" pc [len] output C format\n"
" pm [fmt] print formatted memory\n" // TODO: rename to pf??
" pf [fmt] print formatted data\n"
" pm [magic] print libmagic data\n"
" ps [len] print string\n"
" psp print pascal string\n"
" pS [len] print wide string\n"
" pt [len] print diferent timestamps\n"
" pr [len] print N raw bytes\n"

View File

@ -12,6 +12,7 @@
#define PREFIX "@PREFIX@"
#define R2_VERSION "@VERSION@"
#define HAVE_LIB_MAGIC @HAVE_LIB_MAGIC@
#define CPU_ENDIAN @BIG_ENDIAN@