⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exetype.pl

📁 UNIX下perl实现代码
💻 PL
字号:
#!perl -wuse strict;# All the IMAGE_* structures are defined in the WINNT.H file# of the Microsoft Platform SDK.my %subsys = (NATIVE    => 1,              WINDOWS   => 2,              CONSOLE   => 3,              POSIX     => 7,              WINDOWSCE => 9);unless (0 < @ARGV && @ARGV < 3) {    printf "Usage: $0 exefile [%s]\n", join '|', sort keys %subsys;    exit;}$ARGV[1] = uc $ARGV[1] if $ARGV[1];unless (@ARGV == 1 || defined $subsys{$ARGV[1]}) {    (my $subsys = join(', ', sort keys %subsys)) =~ s/, (\w+)$/ or $1/;    print "Invalid subsystem $ARGV[1], please use $subsys\n";    exit;}my ($record,$magic,$signature,$offset,$size);open EXE, "+< $ARGV[0]" or die "Cannot open $ARGV[0]: $!\n";binmode EXE;# read IMAGE_DOS_HEADER structureread EXE, $record, 64;($magic,$offset) = unpack "Sx58L", $record;die "$ARGV[0] is not an MSDOS executable file.\n"    unless $magic == 0x5a4d; # "MZ"# read signature, IMAGE_FILE_HEADER and first WORD of IMAGE_OPTIONAL_HEADERseek EXE, $offset, 0;read EXE, $record, 4+20+2;($signature,$size,$magic) = unpack "Lx16Sx2S", $record;die "PE header not found" unless $signature == 0x4550; # "PE\0\0"die "Optional header is neither in NT32 nor in NT64 format"    unless ($size == 224 && $magic == 0x10b) || # IMAGE_NT_OPTIONAL_HDR32_MAGIC           ($size == 240 && $magic == 0x20b);   # IMAGE_NT_OPTIONAL_HDR64_MAGIC# Offset 68 in the IMAGE_OPTIONAL_HEADER(32|64) is the 16 bit subsystem codeseek EXE, $offset+4+20+68, 0;if (@ARGV == 1) {    read EXE, $record, 2;    my ($subsys) = unpack "S", $record;    $subsys = {reverse %subsys}->{$subsys} || "UNKNOWN($subsys)";    print "$ARGV[0] uses the $subsys subsystem.\n";}else {    print EXE pack "S", $subsys{$ARGV[1]};}close EXE;__END__=head1 NAMEexetype - Change executable subsystem type between "Console" and "Windows"=head1 SYNOPSIS	C:\perl\bin> copy perl.exe guiperl.exe	C:\perl\bin> exetype guiperl.exe windows=head1 DESCRIPTIONThis program edits an executable file to indicate which subsystem theoperating system must invoke for execution.You can specify any of the following subsystems:=over=item CONSOLEThe CONSOLE subsystem handles a Win32 character-mode application thatuse a console supplied by the operating system.=item WINDOWSThe WINDOWS subsystem handles an application that does not require aconsole and creates its own windows, if required.=item NATIVEThe NATIVE subsystem handles a Windows NT device driver.=item WINDOWSCEThe WINDOWSCE subsystem handles Windows CE consumer electronicsapplications.=item POSIXThe POSIX subsystem handles a POSIX application in Windows NT.=back=head1 AUTHORJan Dubois <jand@activestate.com>=cut

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -