#
# You may distribute under the terms of either the GNU General Public
# License or the Artistic License, as specified in the README file.
-package B::Disassembler::BytecodeStream;
-our $VERSION = '1.01';
+$B::Disassembler::VERSION = '1.05';
+
+package B::Disassembler::BytecodeStream;
use FileHandle;
use Carp;
my $fh = shift;
my $str = $fh->readn(4);
croak "reached EOF while reading I32" unless length($str) == 4;
- return cast_I32(unpack("L", $str));
+ return unpack("l", $str);
}
sub GET_objindex {
sub GET_op_tr_array {
my $fh = shift;
- my @ary = unpack("S256", $fh->readn(256 * 2));
- return join(",", @ary);
+ my $len = unpack "S", $fh->readn(2);
+ my @ary = unpack "S*", $fh->readn($len*2);
+ return join(",", $len, @ary);
}
sub GET_IV64 {
my $fh = shift;
- my ($hi, $lo) = unpack("LL", $fh->readn(8));
- return sprintf("0x%x%08x", $hi, $lo); # cheat
+ my $str = $fh->readn(8);
+ croak "reached EOF while reading I32" unless length($str) == 8;
+ return sprintf "0x%09llx", unpack("q", $str);
}
sub GET_IV {
$Config{ivsize} == 4 ? &GET_I32 : &GET_IV64;
}
+sub GET_PADOFFSET {
+ $Config{ptrsize} == 8 ? &GET_IV64 : &GET_U32;
+}
+
+sub GET_long {
+ $Config{longsize} == 8 ? &GET_IV64 : &GET_U32;
+}
+
+
package B::Disassembler;
use Exporter;
@ISA = qw(Exporter);
use B::Asmdata qw(%insn_data @insn_name);
-our( $magic, $archname, $blversion, $ivsize, $ptrsize, $byteorder );
+our( $magic, $archname, $blversion, $ivsize, $ptrsize );
sub dis_header($){
my( $fh ) = @_;
$blversion = $fh->GET_strconst();
$ivsize = $fh->GET_U32();
$ptrsize = $fh->GET_U32();
- $byteorder = $fh->GET_strconst();
}
sub get_header(){
- return( $magic, $archname, $blversion, $ivsize, $ptrsize, $byteorder );
+ return( $magic, $archname, $blversion, $ivsize, $ptrsize);
}
sub disassemble_fh {