The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

B::Disassembler - Disassemble Perl bytecode

SYNOPSIS

        use Disassembler qw(print_insn);
        my $fh = new FileHandle "<$ARGV[0]";
        disassemble_fh($fh, \&print_insn);

DESCRIPTION

disassemble_fh takes an filehandle with bytecode and a printer function. The printer function gets three arguments: insn, arg (optional) and the comment.

Two default printer functions are provided: print_insn print_insn_bare

See lib/B/Disassembler.pm and scripts/disassemble.

disassemble_fh (filehandle, printer_coderef, [ verbose ])

disassemble_fh takes an filehandle with bytecode and a printer coderef.

Two default printer functions are provided:

  print_insn 
  print_insn_bare

print_insn

Callback function for disassemble_fh, which gets three arguments from the disassembler. insn (a string), arg (a string or number or undef) and the comment (an optional string).

This supports the new behaviour in scripts/disassemble. It prints each insn and optional argument with some additional comments, which looks similar to B::Assembler with option -S (commented source).

print_insn_bare

This is the same as the old behaviour of scripts/disassemble. It prints each insn and optional argument without any comments. Line per line.

get_header

Returns the .plc header as array of ( $magic, $archname, $blversion, $ivsize, $ptrsize, $byteorder, $longsize )

$magic is always "PLBC"

$archname is the archname string and is in the ByteLoader up to 0.06 checked strictly. No platform compatibility yet implemented.

$blversion is the matching ByteLoader version as string. Up to ByteLoader 0.06 this version must have matched exactly, since 0.07 earlier ByteLoader versions are also accepted in the ByteLoader.

$ivsize matches $Config{ivsize} of the assembling perl. A number, 4 or 8 only supported.

$ptrsize matches $Config{ptrsize} of the assembling perl. A number, 4 or 8 only supported.

$longsize is $Config{longsize} of the assembling perl. A number, 4 or 8.

$byteorder is a string of "12345678" on big-endian or "56781234" (?) on little-endian machines.

AUTHORS

Malcolm Beattie, mbeattie@sable.ox.ac.uk. Reini Urban <rurban@cpan.org> since 2008.