B-C
view release on metacpan or search on metacpan
script/pl2exe.pl view on Meta::CPAN
# Next comes the code.
# It performs fixups, prepends "perl -x " to the command line,
# launches perl, and returns perl's exit status. See at the end.
print OUT pack ("H*", "b8cc114000833dcc1140000074168b1085d27d06");
print OUT pack ("H*", "01500483c004ff0283c00483380075eaa1481140");
print OUT pack ("H*", "00ffd089c389c731c0b9f7fffffffcf2ae89f829");
print OUT pack ("H*", "d883e1fc01ccbec311400089e7b908000000f3a4");
print OUT pack ("H*", "89de89c1f3a489e383ec7cb91b00000089e731c0");
print OUT pack ("H*", "f3ab895c2404c74424284400000089e083c02889");
print OUT pack ("H*", "44242083c04489442424a140114000ffd021c075");
print OUT pack ("H*", "046a64eb258b4424446aff50a14c114000ffd021");
print OUT pack ("H*", "c074046a65eb0f8b4424446a665450a150114000");
print OUT pack ("H*", "ffd0a144114000ffd0");
print OUT "\015\012\015\012";
print OUT "-------here's the data, at file offset 760: -------";
print OUT "\015\012\015\012";
# Print out a dummy relocation table.
# The code is not relocatable--it must be loaded at 0x400000.
# But to allow programs to load it with LoadLibrary() and access
# its resources, the file must contain this table.
print OUT pack ('LL', 0x1000,8);
# The import table. Contains RVAs and names.
# (we import 5 functions from KERNEL32.DLL)
print OUT pack ('L5', 0x1128, # (unbound IAT)
0, # TimeDateStamp
0, # ForwarderChain
0x1158, # DLL Name RVA
0x1140);# Import Address Table RVA
print OUT pack ('L5', 0,0,0,0,0); # Ordinals of our KERNEL32 names, 0=unused
print OUT pack ('L6', 0x1166, 0x1178, 0x1186, 0x1198, 0x11ae, 0);
# Not sure if we really need to do this twice, but why argue:
print OUT pack ('L6', 0x1166, 0x1178, 0x1186, 0x1198, 0x11ae, 0);
# Gee it would be nice if C<pack> knew how to align things...
print OUT "KERNEL32.DLL\0\0";
print OUT "\0\0CreateProcessA\0\0"; # 1140
print OUT "\0\0ExitProcess\0"; # 1144
print OUT "\0\0GetCommandLineA\0"; # 1148
print OUT "\0\0WaitForSingleObject\0"; # 114c
print OUT "\0\0GetExitCodeProcess\0"; # 1150
# Our initialized data:
print OUT "perl -x \0"; # 11c3
# align 4
print OUT pack ('L*', 0);
# Let Perl know we're done. We no longer care about CRLF.
print OUT "\nEXE_STUFF\nif 0;\n\n";
$_ = <IN>;
unless ($_ =~ /^\#!.*perl/ ) {
print OUT "#!perl\n";
}
print OUT $_, <IN>;
close IN;
close OUT;
chmod 0755, $name;
__END__
=pod
# base: 401000
objdump -D --target=binary --architecture i386 $code
0: b8 cc 11 40 00 mov $0x4011cc,%eax
5: 83 3d cc 11 40 00 00 cmpl $0x0,0x4011cc
c: 74 16 je 0x24
e: 8b 10 mov (%eax),%edx
10: 85 d2 test %edx,%edx
12: 7d 06 jge 0x1a
14: 01 50 04 add %edx,0x4(%eax)
17: 83 c0 04 add $0x4,%eax
1a: ff 02 incl (%edx)
1c: 83 c0 04 add $0x4,%eax
1f: 83 38 00 cmpl $0x0,(%eax)
22: 75 ea jne 0xe
24: a1 48 11 40 00 mov 0x401148,%eax
29: ff d0 call *%eax ; GetCommandLineA
2b: 89 c3 mov %eax,%ebx
2d: 89 c7 mov %eax,%edi
2f: 31 c0 xor %eax,%eax
31: b9 f7 ff ff ff mov $0xfffffff7,%ecx
36: fc cld
37: f2 ae repnz scas %es:(%edi),%al
39: 89 f8 mov %edi,%eax
3b: 29 d8 sub %ebx,%eax
3d: 83 e1 fc and $0xfffffffc,%ecx
40: 01 cc add %ecx,%esp
42: be c3 11 40 00 mov $0x4011c3,%esi ; prepend 'perl -x '
47: 89 e7 mov %esp,%edi
49: b9 08 00 00 00 mov $0x8,%ecx
4e: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
50: 89 de mov %ebx,%esi
52: 89 c1 mov %eax,%ecx
54: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
56: 89 e3 mov %esp,%ebx
58: 83 ec 7c sub $0x7c,%esp
5b: b9 1b 00 00 00 mov $0x1b,%ecx
60: 89 e7 mov %esp,%edi
62: 31 c0 xor %eax,%eax
64: f3 ab rep stos %eax,%es:(%edi)
66: 89 5c 24 04 mov %ebx,0x4(%esp)
6a: c7 44 24 28 44 00 00 movl $0x44,0x28(%esp)
71: 00
72: 89 e0 mov %esp,%eax
74: 83 c0 28 add $0x28,%eax
77: 89 44 24 20 mov %eax,0x20(%esp)
7b: 83 c0 44 add $0x44,%eax
7e: 89 44 24 24 mov %eax,0x24(%esp)
82: a1 40 11 40 00 mov 0x401140,%eax
87: ff d0 call *%eax ; if (!CreateProcessA)
89: 21 c0 and %eax,%eax
8b: 75 04 jne 0x91
8d: 6a 64 push $0x64
8f: eb 25 jmp 0xb6 ; abnormal exit
91: 8b 44 24 44 mov 0x44(%esp),%eax ; else
( run in 1.210 second using v1.01-cache-2.11-cpan-5837b0d9d2c )