1# $OpenBSD: freebsd,v 1.2 2004/06/03 03:14:20 tedu Exp $ 2 3#------------------------------------------------------------------------------ 4# freebsd: file(1) magic for FreeBSD objects 5# 6# All new-style FreeBSD magic numbers are in host byte order (i.e., 7# little-endian on x86). 8# 9# XXX - this comes from the file "freebsd" in a recent FreeBSD version of 10# "file"; it, and the NetBSD stuff in "netbsd", appear to use different 11# schemes for distinguishing between executable images, shared libraries, 12# and object files. 13# 14# FreeBSD says: 15# 16# Regardless of whether it's pure, demand-paged, or none of the 17# above: 18# 19# if the entry point is < 4096, then it's a shared library if 20# the "has run-time loader information" bit is set, and is 21# position-independent if the "is position-independent" bit 22# is set; 23# 24# if the entry point is >= 4096 (or >4095, same thing), then it's 25# an executable, and is dynamically-linked if the "has run-time 26# loader information" bit is set. 27# 28# On x86, NetBSD says: 29# 30# If it's neither pure nor demand-paged: 31# 32# if it has the "has run-time loader information" bit set, it's 33# a dynamically-linked executable; 34# 35# if it doesn't have that bit set, then: 36# 37# if it has the "is position-independent" bit set, it's 38# position-independent; 39# 40# if the entry point is non-zero, it's an executable, otherwise 41# it's an object file. 42# 43# If it's pure: 44# 45# if it has the "has run-time loader information" bit set, it's 46# a dynamically-linked executable, otherwise it's just an 47# executable. 48# 49# If it's demand-paged: 50# 51# if it has the "has run-time loader information" bit set, 52# then: 53# 54# if the entry point is < 4096, it's a shared library; 55# 56# if the entry point is = 4096 or > 4096 (i.e., >= 4096), 57# it's a dynamically-linked executable); 58# 59# if it doesn't have the "has run-time loader information" bit 60# set, then it's just an executable. 61# 62# (On non-x86, NetBSD does much the same thing, except that it uses 63# 8192 on 68K - except for "68k4k", which is presumably "68K with 4K 64# pages - SPARC, and MIPS, presumably because Sun-3's and Sun-4's 65# had 8K pages; dunno about MIPS.) 66# 67# I suspect the two will differ only in perverse and uninteresting cases 68# ("shared" libraries that aren't demand-paged and whose pages probably 69# won't actually be shared, executables with entry points <4096). 70# 71# I leave it to those more familiar with FreeBSD and NetBSD to figure out 72# what the right answer is (although using ">4095", FreeBSD-style, is 73# probably better than separately checking for "=4096" and ">4096", 74# NetBSD-style). (The old "netbsd" file analyzed FreeBSD demand paged 75# executables using the NetBSD technique.) 76# 770 lelong&0377777777 041400407 FreeBSD/i386 78>20 lelong <4096 79>>3 byte&0xC0 &0x80 shared library 80>>3 byte&0xC0 0x40 PIC object 81>>3 byte&0xC0 0x00 object 82>20 lelong >4095 83>>3 byte&0x80 0x80 dynamically linked executable 84>>3 byte&0x80 0x00 executable 85>16 lelong >0 not stripped 86 870 lelong&0377777777 041400410 FreeBSD/i386 pure 88>20 lelong <4096 89>>3 byte&0xC0 &0x80 shared library 90>>3 byte&0xC0 0x40 PIC object 91>>3 byte&0xC0 0x00 object 92>20 lelong >4095 93>>3 byte&0x80 0x80 dynamically linked executable 94>>3 byte&0x80 0x00 executable 95>16 lelong >0 not stripped 96 970 lelong&0377777777 041400413 FreeBSD/i386 demand paged 98>20 lelong <4096 99>>3 byte&0xC0 &0x80 shared library 100>>3 byte&0xC0 0x40 PIC object 101>>3 byte&0xC0 0x00 object 102>20 lelong >4095 103>>3 byte&0x80 0x80 dynamically linked executable 104>>3 byte&0x80 0x00 executable 105>16 lelong >0 not stripped 106 1070 lelong&0377777777 041400314 FreeBSD/i386 compact demand paged 108>20 lelong <4096 109>>3 byte&0xC0 &0x80 shared library 110>>3 byte&0xC0 0x40 PIC object 111>>3 byte&0xC0 0x00 object 112>20 lelong >4095 113>>3 byte&0x80 0x80 dynamically linked executable 114>>3 byte&0x80 0x00 executable 115>16 lelong >0 not stripped 116 117# XXX gross hack to identify core files 118# cores start with a struct tss; we take advantage of the following: 119# byte 7: highest byte of the kernel stack pointer, always 0xfe 120# 8/9: kernel (ring 0) ss value, always 0x0010 121# 10 - 27: ring 1 and 2 ss/esp, unused, thus always 0 122# 28: low order byte of the current PTD entry, always 0 since the 123# PTD is page-aligned 124# 1257 string \357\020\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 FreeBSD/i386 a.out core file 126>1039 string >\0 from '%s' 127 128# /var/run/ld.so.hints 129# What are you laughing about? 1300 lelong 011421044151 ld.so hints file (Little Endian 131>4 lelong >0 \b, version %d) 132>4 belong <=0 \b) 1330 belong 011421044151 ld.so hints file (Big Endian 134>4 belong >0 \b, version %d) 135>4 belong <=0 \b) 136 137# 138# Files generated by FreeBSD scrshot(1)/vidcontrol(1) utilities 139# 1400 string SCRSHOT_ scrshot(1) screenshot, 141>8 byte x version %d, 142>9 byte 2 %d bytes in header, 143>>10 byte x %d chars wide by 144>>11 byte x %d chars high 145