Data-ParseBinary
view release on metacpan or search on metacpan
lib/Data/ParseBinary/Executable/PE32.pm view on Meta::CPAN
package Data::ParseBinary::Executable::PE32;
use strict;
use warnings;
use Data::ParseBinary;
#Portable Executable (PE) 32 bit, little endian
#Used on MSWindows systems (including DOS) for EXEs and DLLs
#
#1999 paper:
#http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/pecoff.doc
#
#2006 with updates relevant for .NET:
#http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/pecoff_v8.doc
sub UTCTimeStamp {
my ($name) = @_;
return Data::ParseBinary::lib::ExecPE32::UTCTimeStampAdapter->create(ULInt32($name));
}
my $msdos_header = Struct("msdos_header",
Magic("MZ"),
ULInt16("partPag"),
ULInt16("page_count"),
ULInt16("relocation_count"),
ULInt16("header_size"),
ULInt16("minmem"),
ULInt16("maxmem"),
ULInt16("relocation_stackseg"),
ULInt16("exe_stackptr"),
ULInt16("checksum"),
ULInt16("exe_ip"),
ULInt16("relocation_codeseg"),
ULInt16("table_offset"),
ULInt16("overlay"),
Padding(8),
ULInt16("oem_id"),
ULInt16("oem_info"),
Padding(20),
ULInt32("coff_header_pointer"),
Anchor("_assembly_start"),
Field("code", sub { $_->ctx->{coff_header_pointer} - $_->ctx->{_assembly_start} } ),
);
my $symbol_table = Struct("symbol_table",
String("name", 8, padchar => "\x00"),
ULInt32("value"),
Enum(
Data::ParseBinary::lib::ExecPE32::OneDownAdapter->create(SLInt16("section_number")),
#ExprAdapter(SLInt16("section_number"),
# encoder => sub { $_->obj + 1 },
# decoder => sub { $_->obj - 1 },
#),
UNDEFINED => -1,
ABSOLUTE => -2,
DEBUG => -3,
_default_ => $DefaultPass,
),
Enum(ULInt8("complex_type"),
NULL => 0,
POINTER => 1,
FUNCTION => 2,
ARRAY => 3,
),
Enum(ULInt8("base_type"),
NULL => 0,
VOID => 1,
CHAR => 2,
SHORT => 3,
INT => 4,
LONG => 5,
FLOAT => 6,
DOUBLE => 7,
STRUCT => 8,
UNION => 9,
ENUM => 10,
MOE => 11,
BYTE => 12,
WORD => 13,
UINT => 14,
DWORD => 15,
),
Enum(ULInt8("storage_class"),
END_OF_FUNCTION => 255,
NULL => 0,
AUTOMATIC => 1,
EXTERNAL => 2,
STATIC => 3,
REGISTER => 4,
EXTERNAL_DEF => 5,
LABEL => 6,
UNDEFINED_LABEL => 7,
MEMBER_OF_STRUCT => 8,
ARGUMENT => 9,
STRUCT_TAG => 10,
( run in 0.591 second using v1.01-cache-2.11-cpan-524268b4103 )