in reply to Re: Fun with duff's device and AUTOLOAD
in thread Fun with duff's device and AUTOLOAD

I get "double 8" on ActiveState under win2k, yet the obfu doesn't work.

It does seem to have some issue with %c not working the same as printf, though. Printing 65 gives a nul character output, not 'A'. Printing 3.14 gives the bytes FD 91 BA B8 94 9F. Your print 2.14321574942828e-312, 2.29175545480573e-312; example prints "perl" as expected!

  • Comment on Re: Re: Fun with duff's device and AUTOLOAD

Replies are listed 'Best First'.
Re: Re: Re: Fun with duff's device and AUTOLOAD
by ambrus (Abbot) on Feb 25, 2004 at 21:41 UTC

    Maybe I wasn't clear in the explanation.

    $#="%c";print 65; should not print an A. It pushes 65.0 (a double) and "%x" on the C stack, and calls sprintf. Then sprintf sees "%c", so tries to pop an int from the stack. 65.0 is represented as the bytes (00 00 00 00 00 40 50 40)hex, but an int is just 4 bytes so it pops (00 00 00 00)hex which is 0 as an int so it prints a nul char. (On sparc, however, it will get (40 50 40 00)hex, which is 67437568, so it will either print a null character or a multibyte character sequence corresponding to unicode chr 67437568, depending on the version of Perl.)

    Dlugosz, I guess your cpu is an x86, correct me if it isn't.