-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi,
/m defines mask: m ...
ie:
[0x00000000000000]> /m ff ff ff
[0x00000000000000]> %MASK[0]
m ff ff ff
[0x00000000000000]>
where should be %MASK[0] be just ff ff ff .
PD: I've updated the search part of the wiki, have a look at it please!
esteve espuna wrote:
> An example :
>
> [0x00000000000000]> %MASK[0] ff 00 ff ff
> %MASK[0]='ff 00 ff ff'
>
> [0x00000000000000]> / [A-Z]CEC
>
> 0x00000040 'hit0[0]'
> ECEC\xa4h\x0b\x8c\xa4h\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
>
> 0x00023440 'hit0[1]'
> [EMAIL PROTECTED]@[EMAIL PROTECTED]
> \x9e\xe5\x00\x00R\xe3\x000\x94\x05\x18 \x93\x05\x000\x94\xe5\x00
> \x8e\x05\x1c0\x93\xe5\x020C\xe0\x01\x00S\xe1
>
> 0x00023794 'hit0[2]'
> ECEC\x00r\x04\x8ct\x0c\x04\x8cSRPXh\x0c\x04\x8c\xf0C-\xe9\xe7\xdfM\xe2\xb83\x9f\xe5\x00
> \xa0\xe3\x04
> \x8d\xe5\x00P\x93\xe5\x01\x00u\xe3\x000\xa0\x03\x1b\x00\x00\x0a 0\x95\xe5
>
> 0x0003A34F 'hit0[3]' [EMAIL PROTECTED]:
> 0x\x00\x00\x00AT-Command Interpreter ready\x00\x00\x00
>
> 0x0003A35D 'hit0[4]' CHECKSUM: 0x\x00\x00\x00AT-Command Interpreter
> ready\x00\x00\x00\x00\x00 \x00\xac ^\x04\x8c ^\x04\x8c\x1f
> [0x00000000000000]>
>
>
> esteve espuna wrote:
>
>>>And the git-diff which might be easier to follow... :
>>>
>>>
>>>diff --git a/src/binparse.c b/src/binparse.c
>>>index bea4507..73bf959 100644
>>>--- a/src/binparse.c
>>>+++ b/src/binparse.c
>>>@@ -118,9 +118,10 @@ void print_tok_list(tokenlist* toklist)
>>>
>>> printf ("TOKLIST %s:\n",toklist->name);
>>> for (i=0; i<toklist->numtok; i++)
>>>- printf ("TOK : %c , range : %d \n",
>>>+ printf ("TOK : %c , range : %d mask : %x\n",
>>> toklist->tl[i].mintok,
>>>- toklist->tl[i].range);
>>>+ toklist->tl[i].range,
>>>+ toklist->tl[i].mask);
>>> NEWLINE;
>>> printf ("\n");
>>> }
>>>@@ -301,6 +302,43 @@ tokenizer* binparse_new_from_file(char *
>>> return tll ;
>>> }
>>>
>>>+int binparse_get_mask_list ( char* mask , char* maskout )
>>>+{
>>>+ int i,j,k ;
>>>+ char num [3];
>>>+
>>>+ num[2] = 0;
>>>+
>>>+ i = 0; j = 0; k = 0;
>>>+ while ( mask[i] != 0 )
>>>+ {
>>>+ if ( mask[i] != ' ' ) {
>>>+ num[j] = mask[i];
>>>+ j++;
>>>+ }
>>>+ i++;
>>>+ if ( j == 2 )
>>>+ {
>>>+ sscanf ( num, "%x", &maskout[k] );
>>>+ k++;
>>>+ j = 0;
>>>+ }
>>>+
>>>+ }
>>>+
>>>+ return k;
>>>+}
>>>+void binparse_apply_mask (char * maskout, int masklen , token* tlist ,
>>>int ntok)
>>>+{
>>>+ int i;
>>>+ for ( i = 0; i < ntok ; i ++ )
>>>+ {
>>>+ tlist[i].mask = maskout[i%masklen];
>>>+
>>>+ }
>>>+
>>>+
>>>+}
>>> static tokenlist *binparse_token_mask(char *name, char *token, char *mask)
>>> {
>>> tokenlist *tls;
>>>@@ -308,6 +346,8 @@ static tokenlist *binparse_token_mask(ch
>>> void *tlist = 0;
>>> int ntok = 0;
>>> int len;
>>>+ int masklen;
>>>+ char maskout[300];
>>>
>>> tls = malloc(sizeof( tokenlist )) ;
>>> // TODO mask not yet done
>>>@@ -320,7 +360,16 @@ static tokenlist *binparse_token_mask(ch
>>> tls->lastpos = 0;
>>> tls->estat = 0;
>>> strcpy ( tls->name , name ); // XXX bof here!
>>>+
>>>+ if ( mask == NULL )
>>>+ {
>>>+ mask = "ff" ;
>>>+ }
>>>+
>>>+ masklen = binparse_get_mask_list ( mask , maskout );
>>>+ binparse_apply_mask ( maskout, masklen , tlist , ntok ) ;
>>>
>>>+ //print_tok_list ( tls ) ;
>>> return tls;
>>> }
>>>
>>>@@ -341,17 +390,32 @@ int binparse_add(tokenizer *t, char *str
>>>
>>> void update_tlist(tokenizer* t, unsigned char inchar, off_t where )
>>> {
>>>- int cmin;
>>>- int cmax;
>>>+ unsigned char cmin;
>>>+ unsigned char cmax;
>>>+ unsigned char cmask;
>>> int i;
>>>
>>> for (i=0; i<t->nlists; i++ ) {
>>> cmin = (t->tls[i]->tl[t->tls[i]->estat]).mintok;
>>>- cmax = cmin + (t->tls[i]->tl[t->tls[i]->estat]).range;
>>>-
>>>- if ( (inchar >= cmin) && ( inchar <= cmax ) )
>>>- t->tls[i]->actp[t->tls[i]->estat++] = inchar;
>>>- else t->tls[i]->estat = 0;
>>>+
>>>+ if ( (t->tls[i]->tl[t->tls[i]->estat]).range > 0 )
>>>+ {
>>>+ // RANGE
>>>+ cmax = cmin + (t->tls[i]->tl[t->tls[i]->estat]).range;
>>>+
>>>+ if ( (inchar >= cmin) && ( inchar <= cmax ) )
>>>+ t->tls[i]->actp[t->tls[i]->estat++] = inchar;
>>>+ else t->tls[i]->estat = 0;
>>>+ }
>>>+ else
>>>+ {
>>>+ // 1 char
>>>+ cmask = (t->tls[i]->tl[t->tls[i]->estat]).mask;
>>>+ if ( (inchar&cmask) == (cmin&cmask) )
>>>+ t->tls[i]->actp[t->tls[i]->estat++] = inchar;
>>>+ else t->tls[i]->estat = 0;
>>>+
>>>+ }
>>>
>>> if ( t->tls[i]->estat == (t->tls[i]->numtok) ) {
>>> t->tls[i]->actp[t->tls[i]->estat+1] = 0 ;
>>>diff --git a/src/binparse.h b/src/binparse.h
>>>index ae8cfb4..2a666c0 100644
>>>--- a/src/binparse.h
>>>+++ b/src/binparse.h
>>>@@ -6,6 +6,7 @@
>>> typedef struct _token {
>>> unsigned char mintok; //Token, or base
>>> unsigned char range; //0 nomes el mintok, ( maxtoken - mintoken )
>>>+ unsigned char mask;
>>> } token;
>>>
>>> typedef struct _tokenlist {
>>>@@ -25,6 +26,7 @@ typedef struct _tokenizer {
>>>
>>> tokenizer* binparse_new();
>>> tokenizer* binparse_new_from_file(char *file);
>>>+int binparse_get_mask_list ( char* mask , char* maskout );
>>> int binparse_add_search(tokenizer *t, int id);
>>> int binparser_free(tokenizer* ptokenizer);
>>> void update_tlist( tokenizer* ptok, unsigned char inchar, off_t where);
>>>@@ -36,5 +38,6 @@ tokenlist* get_tok_list( char* line, in
>>> tokenizer* build_tokenizer( char * file ) ;
>>> void tokenize(int fd, tokenizer* ptok);
>>> int binparse_add(tokenizer *t, char *string, char *mask);
>>>+void binparse_apply_mask (char * maskout, int masklen , token* tlist ,
>>>int ntok) ;
>>>
>>> #endif
>>>
>>>
>>>esteve espuna wrote:
>>>
>>>
>>>>>Hi,
>>>>>
>>>>>Here is the new binparser which includes the mask. Needs more testing as
>>>>>I have just tried that it works... I have finally separated the range
>>>>>feature from the mask one, if range is defined then mask is not applied,
>>>>>as it is hard to tell the expected behaviour...
>>>>>
>>>>>
>>>
>>>-------------- next part --------------
>>>A non-text attachment was scrubbed...
>>>Name: binparse.c
>>>Type: text/x-csrc
>>>Size: 9097 bytes
>>>Desc: not available
>>>Url :
>>>https://lists.nopcode.org/mailman/private/radare/attachments/20070408/9ca9df1f/attachment.c
>>>
>>>-------------- next part --------------
>>>A non-text attachment was scrubbed...
>>>Name: binparse.h
>>>Type: text/x-chdr
>>>Size: 1278 bytes
>>>Desc: not available
>>>Url :
>>>https://lists.nopcode.org/mailman/private/radare/attachments/20070408/9ca9df1f/attachment.h
>>>
>>>_______________________________________________
>>>radare mailing list
>>>[email protected]
>>>https://lists.nopcode.org/mailman/listinfo/radare
>>>
>
> _______________________________________________
> radare mailing list
> [email protected]
> https://lists.nopcode.org/mailman/listinfo/radare
>
_______________________________________________
radare mailing list
[email protected]
https://lists.nopcode.org/mailman/listinfo/radare
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.6 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org
iD8DBQFGGhvhHCkwMET/DRYRAr4MAKCpzbaJ07ejfWbANo6RaAOrBhwYgQCfQppL
l3415TMyR+MZlZ58QiERvFo=
=3dAQ
-----END PGP SIGNATURE-----
_______________________________________________
radare mailing list
[email protected]
https://lists.nopcode.org/mailman/listinfo/radare