@@ -224,37 +224,58 @@ int argmain(int argc, char **argv)
224224
225225 if (!strcmp (argv [0 ], "ssearch" ))
226226 {
227- if (argc != 3 )
227+ if (argc != 3 || argc != 4 )
228228 goto help ;
229229
230- u8 u8query = 0 ;
231- u16 u16query = 0 ;
232- u32 u32query = 0 ;
233- u64 u64query = 0 ;
230+ u8 u8LowQuery = 0 ;
231+ u16 u16LowQuery = 0 ;
232+ u32 u32LowQuery = 0 ;
233+ u64 u64LowQuery = 0 ;
234+
235+ u8 u8UppQuery = 0 ;
236+ u16 u16UppQuery = 0 ;
237+ u32 u32UppQuery = 0 ;
238+ u64 u64UppQuery = 0 ;
234239
235240 if (!strcmp (argv [1 ], "u8" ))
236241 {
237242 search = VAL_U8 ;
238- u8query = strtoul (argv [2 ], NULL , 10 );
243+ u8LowQuery = strtoul (argv [2 ], NULL , 10 );
239244 }
240245 else if (!strcmp (argv [1 ], "u16" ))
241246 {
242247 search = VAL_U16 ;
243- u16query = strtoul (argv [2 ], NULL , 10 );
248+ u16LowQuery = strtoul (argv [2 ], NULL , 10 );
244249 }
245250 else if (!strcmp (argv [1 ], "u32" ))
246251 {
247252 search = VAL_U32 ;
248- u32query = strtoul (argv [2 ], NULL , 10 );
253+ u32LowQuery = strtoul (argv [2 ], NULL , 10 );
249254 }
250255 else if (!strcmp (argv [1 ], "u64" ))
251256 {
252257 search = VAL_U64 ;
253- u64query = strtoull (argv [2 ], NULL , 10 );
258+ u64LowQuery = strtoull (argv [2 ], NULL , 10 );
254259 }
255260 else
256261 goto help ;
257262
263+ if (argc == 4 ) {
264+ if (search == VAL_U8 )
265+ {
266+ u8UppQuery = strtoul (argv [3 ], NULL , 10 );
267+ } else if (search == VAL_U16 )
268+ {
269+ u16UppQuery = strtoul (argv [3 ], NULL , 10 );
270+ } else if (search == VAL_U32 )
271+ {
272+ u32UppQuery = strtoul (argv [3 ], NULL , 10 );
273+ } else if (search == VAL_U64 )
274+ {
275+ u64UppQuery = strtoull (argv [3 ], NULL , 10 );
276+ }
277+ }
278+
258279 MemoryInfo meminfo ;
259280 memset (& meminfo , 0 , sizeof (MemoryInfo ));
260281
@@ -286,7 +307,12 @@ int argmain(int argc, char **argv)
286307 u8 * u8buf = (u8 * )outbuf ;
287308 for (u64 i = 0 ; i < chunksize / sizeof (u8 ); i ++ )
288309 {
289- if (u8buf [i ] == u8query && searchSize < SEARCH_ARR_SIZE )
310+ if (searchSize >= SEARCH_ARR_SIZE )
311+ {
312+ break ;
313+ }
314+
315+ if (u8buf [i ] == u8LowQuery || (argc == 4 && (u8buf [i ] >= u8LowQuery && u8buf [i ] <= u8UppQuery )))
290316 {
291317 printf ("Got a hit at %lx!\r\n" , curaddr + i * sizeof (u8 ));
292318 searchArr [searchSize ++ ] = curaddr + i * sizeof (u8 );
@@ -299,7 +325,12 @@ int argmain(int argc, char **argv)
299325 u16 * u16buf = (u16 * )outbuf ;
300326 for (u64 i = 0 ; i < chunksize / sizeof (u16 ); i ++ )
301327 {
302- if (u16buf [i ] == u16query && searchSize < SEARCH_ARR_SIZE )
328+ if (searchSize >= SEARCH_ARR_SIZE )
329+ {
330+ break ;
331+ }
332+
333+ if (u16buf [i ] == u16LowQuery || (argc == 4 && (u16buf [i ] >= u16LowQuery && u16buf [i ] <= u16UppQuery )))
303334 {
304335 printf ("Got a hit at %lx!\r\n" , curaddr + i * sizeof (u16 ));
305336 searchArr [searchSize ++ ] = curaddr + i * sizeof (u16 );
@@ -312,7 +343,12 @@ int argmain(int argc, char **argv)
312343 u32 * u32buf = (u32 * )outbuf ;
313344 for (u64 i = 0 ; i < chunksize / sizeof (u32 ); i ++ )
314345 {
315- if (u32buf [i ] == u32query && searchSize < SEARCH_ARR_SIZE )
346+ if (searchSize >= SEARCH_ARR_SIZE )
347+ {
348+ break ;
349+ }
350+
351+ if (u32buf [i ] == u32LowQuery || (argc == 4 && (u32buf [i ] >= u32LowQuery && u32buf [i ] <= u32UppQuery )))
316352 {
317353 printf ("Got a hit at %lx!\r\n" , curaddr + i * sizeof (u32 ));
318354 searchArr [searchSize ++ ] = curaddr + i * sizeof (u32 );
@@ -325,7 +361,12 @@ int argmain(int argc, char **argv)
325361 u64 * u64buf = (u64 * )outbuf ;
326362 for (u64 i = 0 ; i < chunksize / sizeof (u64 ); i ++ )
327363 {
328- if (u64buf [i ] == u64query && searchSize < SEARCH_ARR_SIZE )
364+ if (searchSize >= SEARCH_ARR_SIZE )
365+ {
366+ break ;
367+ }
368+
369+ if (u64buf [i ] == u64LowQuery || (argc == 4 && (u64buf [i ] >= u64LowQuery && u64buf [i ] <= u64UppQuery )))
329370 {
330371 printf ("Got a hit at %lx!\r\n" , curaddr + i * sizeof (u64 ));
331372 searchArr [searchSize ++ ] = curaddr + i * sizeof (u32 );
@@ -350,6 +391,7 @@ int argmain(int argc, char **argv)
350391 {
351392 if (argc != 2 )
352393 goto help ;
394+
353395 if (search == VAL_NONE )
354396 {
355397 printf ("You need to start a search first!" );
0 commit comments