HowtoForge Forums | HowtoForge - Linux Howtos and Tutorials

HowtoForge Forums | HowtoForge - Linux Howtos and Tutorials (http://www.howtoforge.com/forums/index.php)
-   Programming/Scripts (http://www.howtoforge.com/forums/forumdisplay.php?f=7)
-   -   Want Perl equivalent of linux strings command to extract strings from binary file (http://www.howtoforge.com/forums/showthread.php?t=41338)

rjamesd 25th November 2009 14:28

Want Perl equivalent of linux strings command to extract strings from binary file
 
Hi,
I'm looking for a Perl function that does the same thing as the Linux strings command.

The strings command will output a list of strings contained in any file, including a binary file that has strings embedded with in.

Regular expressions don't seem to work very well (or at all) with searching for strings in binary files.

I've searched here already but not found answers.

I want a Perl equivalent as I want to make my Perl code platform independent. If I call strings from Perl then I have made my code dependent on the strings command being available from the underlying operating system.

id10t 25th November 2009 15:17

So include a copy of strings!

Its already on *nix systems - including OS X - and there are win32 versions available precompiled.

rjamesd 25th November 2009 19:16

Quote:

Originally Posted by id10t (Post 211922)
So include a copy of strings!

Its already on *nix systems - including OS X - and there are win32 versions available precompiled.

Thanks - yes Windows strings is at:

http://technet.microsoft.com/en-us/s.../bb897439.aspx

I downloaded unzipped and placed this in the same folder as the Perl script.

It works straight out of the box (on Windows XP at least) but be aware that first time it is run it will ask for a license agreement, thereafter you wont be asked.

Just for info, I can then regex match the string I am looking for from this - and extract it out using the following code

Code:

# get just printable character sequences from binary file called the string stored in $binaryFilename
my $fileStrings = `strings $binaryFilename`; # note backward single quote to capture output of executing command enclosed

# $fileStrings is just the printable character sequences in the file (minimum 3 chars - see technet link above about how to change)

# do the regex
if ( $fileStrings =~ # a regex here # )
{
# if got here regex found match
# so
# get start and beginning of string using $` and $& Perl global system variables set to values from the last regex
my $embeddedStringStart = length($`);
my $embeddedStringLength = length($&);
my $embeddedString = substr( $fileStrings, $embeddedStringStart, $embeddedStringLength );

# go on to do something with the $embeddedString ...
}


id10t 30th November 2009 15:46

You don't need to DL from microsoft for strings... strings is part of binutils, and there is a GPL win32 version from http://www.mingw.org/wiki/MinGW


All times are GMT +2. The time now is 18:48.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2014, vBulletin Solutions, Inc.