123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- (*
- * This file is part of ilLib
- * Copyright (c)2004-2013 Haxe Foundation
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
- *)
- open PeData;;
- open Printf;;
- let machine_type_s m = match m with
- | TUnknown -> "TUnknown"
- | Ti386 -> "Ti386"
- | TR3000 -> "TR3000"
- | TR4000 -> "TR4000"
- | TR10000 -> "TR10000"
- | TWCeMipsV2 -> "TWCeMipsV2"
- | TAlpha -> "TAlpha"
- | TSh3 -> "TSh3"
- | TSh3Dsp -> "TSh3Dsp"
- | TSh3e -> "TSh3e"
- | TSh4 -> "TSh4"
- | TSh5 -> "TSh5"
- | TArm -> "TArm"
- | TArmN -> "TArmN"
- | TArm64 -> "TArm64"
- | TEbc -> "TEbc"
- | TThumb -> "TThumb"
- | TAm33 -> "TAm33"
- | TPowerPC -> "TPowerPC"
- | TPowerPCFP -> "TPowerPCFP"
- | TItanium64 -> "TItanium64"
- | TMips16 -> "TMips16"
- | TAlpha64 -> "TAlpha64"
- | TMipsFpu -> "TMipsFpu"
- | TMipsFpu16 -> "TMipsFpu16"
- | TTriCore -> "TTriCore"
- | TAmd64 -> "TAmd64"
- | TM32R -> "TM32R"
- let coff_prop_s p = match p with
- | RelocsStripped -> "RelocsStripped"
- | ExecutableImage -> "ExecutableImage"
- | LineNumsStripped -> "LineNumsStripped"
- | LocalSymsStripped -> "LocalSymsStripped"
- | AgressiveWsTrim -> "AgressiveWsTrim"
- | LargeAddressAware -> "LargeAddressAware"
- | BytesReversedLO -> "BytesReversedLO"
- | Machine32Bit -> "Machine32Bit"
- | DebugStripped -> "DebugStripped"
- | RemovableRunFromSwap -> "RemovableRunFromSwap"
- | NetRunFromSwap -> "NetRunFromSwap"
- | FileSystem -> "FileSystem"
- | FileDll -> "FileDll"
- | UpSystemOnly -> "UpSystemOnly"
- | BytesReversedHI -> "BytesReversedHI"
- let coff_header_s h =
- sprintf "#COFF_HEADER\n\tmachine: %s\n\tnsections: %d\n\ttimestamp: %ld\n\tsymbol_tbl_pointer: %ld\n\tnsymbols: %d\n\toptheader_size: %x\n\tprops: [%s]\n"
- (machine_type_s h.coff_machine)
- h.coff_nsections
- h.coff_timestamp
- h.coff_symbol_table_pointer
- h.coff_nsymbols
- h.coff_optheader_size
- (String.concat ", " (List.map coff_prop_s h.coff_props))
- let pe_magic_s = function
- | P32 -> "P32"
- | PRom -> "PRom"
- | P64 -> "P64"
- let subsystem_s = function
- | SUnknown -> "SUnknown" (* 0 *)
- | SNative -> "SNative" (* 1 *)
- | SWGui -> "SWGui" (* 2 *)
- | SWCui -> "SWCui" (* 3 *)
- | SPCui -> "SPCui" (* 7 *)
- | SWCeGui -> "SWCeGui" (* 9 *)
- | SEfi -> "SEfi" (* 10 *)
- | SEfiBoot -> "SEfiBoot" (* 11 *)
- | SEfiRuntime -> "SEfiRuntime" (* 12 *)
- | SEfiRom -> "SEfiRom" (* 13 *)
- | SXbox -> "SXbox" (* 14 *)
- let dll_prop_s = function
- | DDynamicBase -> "DDynamicBase" (* 0x0040 *)
- | DForceIntegrity -> "DForceIntegrity" (* 0x0080 *)
- | DNxCompat -> "DNxCompat" (* 0x0100 *)
- | DNoIsolation -> "DNoIsolation" (* 0x0200 *)
- | DNoSeh -> "DNoSeh" (* 0x0400 *)
- | DNoBind -> "DNoBind" (* 0x0800 *)
- | DWdmDriver -> "DWdmDriver" (* 0x2000 *)
- | DTerminalServer -> "DTerminalServer" (* 0x8000 *)
- let section_prop_s = function
- | SNoPad -> "SNoPad"
- | SHasCode -> "SHasCode"
- | SHasIData -> "SHasIData"
- | SHasData -> "SHasData"
- | SHasLinkInfo -> "SHasLinkInfo"
- | SLinkRemove -> "SLinkRemove"
- | SGlobalRel -> "SGlobalRel"
- | SHas16BitMem -> "SHas16BitMem"
- | SAlign1Bytes -> "SAlign1Bytes"
- | SAlign2Bytes -> "SAlign2Bytes"
- | SAlign4Bytes -> "SAlign4Bytes"
- | SAlign8Bytes -> "SAlign8Bytes"
- | SAlign16Bytes -> "SAlign16Bytes"
- | SAlign32Bytes -> "SAlign32Bytes"
- | SAlign64Bytes -> "SAlign64Bytes"
- | SAlign128Bytes -> "SAlign128Bytes"
- | SAlign256Bytes -> "SAlign256Bytes"
- | SAlign512Bytes -> "SAlign512Bytes"
- | SAlign1024Bytes -> "SAlign1024Bytes"
- | SAlign2048Bytes -> "SAlign2048Bytes"
- | SAlign4096Bytes -> "SAlign4096Bytes"
- | SAlign8192Bytes -> "SAlign8192Bytes"
- | SHasExtRelocs -> "SHasExtRelocs"
- | SCanDiscard -> "SCanDiscard"
- | SNotCached -> "SNotCached"
- | SNotPaged -> "SNotPaged"
- | SShared -> "SShared"
- | SExec -> "SExec"
- | SRead -> "SRead"
- | SWrite -> "SWrite"
- let pe_section_s s =
- Printf.sprintf "\t%s :\n\t\trva: %lx\n\t\traw size: %lx\n\t\tprops: [%s]"
- s.s_name
- s.s_vaddr
- s.s_raw_size
- (String.concat ", " (List.map section_prop_s s.s_props))
- let data_dirs_s a =
- let lst = Array.to_list (Array.mapi (fun i (r,l) ->
- let _,s = directory_type_info (directory_type_of_int i) in
- Printf.sprintf "%s: %lx (%lx)" s r l
- ) a) in
- String.concat "\n\t\t" lst
- let pe_header_s h =
- sprintf "#PE_HEADER\n\tmagic: %s\n\tmajor.minor %d.%d\n\tsubsystem: %s\n\tdll props: [%s]\n\tndata_dir: %i\n\t\t%s\n#SECTIONS\n%s"
- (pe_magic_s h.pe_magic)
- h.pe_major h.pe_minor
- (subsystem_s h.pe_subsystem)
- (String.concat ", " (List.map dll_prop_s h.pe_dll_props))
- h.pe_ndata_dir
- (data_dirs_s h.pe_data_dirs)
- (String.concat "\n" (List.map pe_section_s (Array.to_list h.pe_sections)))
- let symbol_lookup_s = function
- | SName (hint,s) -> "SName(" ^ string_of_int hint ^ ", " ^ s ^ ")"
- | SOrdinal i -> "SOrdinal(" ^ string_of_int i ^ ")"
- let idata_table_s t =
- sprintf "#IMPORT %s:\n\t%s"
- t.imp_name
- (String.concat "\n\t" (List.map symbol_lookup_s t.imp_imports))
- let clr_flag_s = function
- | FIlOnly -> "FIlOnly" (* 0x1 *)
- | F32BitRequired -> "F32BitRequired" (* 0x2 *)
- | FIlLibrary -> "FIlLibrary" (* 0x4 *)
- | FSigned -> "FSigned" (* 0x8 *)
- | FNativeEntry -> "FNativeEntry" (* 0x10 *)
- | FTrackDebug -> "FTrackDebug" (* 0x10000 *)
- let clr_header_s h =
- sprintf "#CLR v%d.%d\n\tflags: %s"
- h.clr_major
- h.clr_minor
- (String.concat ", " (List.map clr_flag_s h.clr_flags))
|