Linux localhost 6.1.10-x86_64-linode159 #1 SMP PREEMPT_DYNAMIC Wed Feb 8 14:14:45 EST 2023 x86_64
Apache/2.4.25 (Debian)
Server IP : 45.33.61.127 & Your IP : 216.73.216.156
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
bin /
Delete
Unzip
Name
Size
Permission
Date
Action
2to3
96
B
-rwxr-xr-x
2020-08-22 10:03
2to3-2.7
96
B
-rwxr-xr-x
2020-08-22 10:03
2to3-3.5
96
B
-rwxr-xr-x
2020-11-18 21:09
[
50.79
KB
-rwxr-xr-x
2017-02-22 12:23
ab
50.18
KB
-rwxr-xr-x
2019-10-13 15:43
addpart
22.53
KB
-rwxr-xr-x
2018-03-07 18:29
apropos
46.98
KB
-rwxr-xr-x
2016-12-13 13:10
apt
14.09
KB
-rwxr-xr-x
2020-12-07 12:45
apt-cache
78.16
KB
-rwxr-xr-x
2020-12-07 12:45
apt-cdrom
22.16
KB
-rwxr-xr-x
2020-12-07 12:45
apt-config
22.09
KB
-rwxr-xr-x
2020-12-07 12:45
apt-extracttemplates
22.16
KB
-rwxr-xr-x
2020-12-07 12:45
apt-ftparchive
238.16
KB
-rwxr-xr-x
2020-12-07 12:45
apt-get
42.16
KB
-rwxr-xr-x
2020-12-07 12:45
apt-key
25.65
KB
-rwxr-xr-x
2020-12-07 12:45
apt-listchanges
8.88
KB
-rwxr-xr-x
2017-04-10 21:14
apt-mark
42.16
KB
-rwxr-xr-x
2020-12-07 12:45
apt-sortpkgs
38.09
KB
-rwxr-xr-x
2020-12-07 12:45
arch
34.76
KB
-rwxr-xr-x
2017-02-22 12:23
aria_chk
4.76
MB
-rwxr-xr-x
2021-01-31 16:38
aria_dump_log
4.56
MB
-rwxr-xr-x
2021-01-31 16:38
aria_ftdump
4.58
MB
-rwxr-xr-x
2021-01-31 16:38
aria_pack
4.6
MB
-rwxr-xr-x
2021-01-31 16:38
aria_read_log
4.72
MB
-rwxr-xr-x
2021-01-31 16:38
awk
646.72
KB
-rwxr-xr-x
2017-01-25 16:06
b2sum
54.88
KB
-rwxr-xr-x
2017-02-22 12:23
base32
38.79
KB
-rwxr-xr-x
2017-02-22 12:23
base64
38.79
KB
-rwxr-xr-x
2017-02-22 12:23
basename
30.73
KB
-rwxr-xr-x
2017-02-22 12:23
bashbug
6.95
KB
-rwxr-xr-x
2017-05-15 19:45
bootctl
38.41
KB
-rwxr-xr-x
2019-07-21 18:43
bsd-from
10.3
KB
-rwxr-xr-x
2017-04-12 11:22
bsd-write
14.42
KB
-rwxr-sr-x
2017-04-12 11:22
buildhash
38.38
KB
-rwxr-xr-x
2016-03-04 07:59
busctl
62.43
KB
-rwxr-xr-x
2019-07-21 18:43
c2ph
35.89
KB
-rwxr-xr-x
2020-06-20 17:33
c_rehash
6.18
KB
-rwxr-xr-x
2020-12-11 09:22
cal
29.21
KB
-rwxr-xr-x
2017-04-12 11:22
calendar
31.24
KB
-rwxr-xr-x
2017-04-12 11:22
captoinfo
78.11
KB
-rwxr-xr-x
2017-12-28 09:47
catchsegv
3.22
KB
-rwxr-xr-x
2019-02-06 21:17
catman
34.46
KB
-rwxr-xr-x
2016-12-13 13:10
certbot
385
B
-rwxr-xr-x
2020-09-26 18:25
chage
70.17
KB
-rwxr-sr-x
2017-05-17 11:59
chardet3
309
B
-rwxr-xr-x
2016-02-10 10:46
chardetect3
309
B
-rwxr-xr-x
2016-02-10 10:46
chattr
14
KB
-rwxr-xr-x
2020-07-25 09:03
chcon
63.01
KB
-rwxr-xr-x
2017-02-22 12:23
checkgid
5.99
KB
-rwxr-xr-x
2019-10-13 15:43
chfn
48.87
KB
-rwsr-xr-x
2017-05-17 11:59
chrt
30.76
KB
-rwxr-xr-x
2018-03-07 18:29
chsh
39.55
KB
-rwsr-xr-x
2017-05-17 11:59
cifsiostat
30.13
KB
-rwxr-xr-x
2017-05-25 20:26
ckbcomp
146.32
KB
-rwxr-xr-x
2017-04-07 03:55
cksum
34.76
KB
-rwxr-xr-x
2017-02-22 12:23
clear
5.99
KB
-rwxr-xr-x
2017-12-28 09:47
clear_console
10.3
KB
-rwxr-xr-x
2017-05-15 19:45
cmp
42.74
KB
-rwxr-xr-x
2017-01-09 22:55
codepage
10.27
KB
-rwxr-xr-x
2016-01-05 16:55
col
10.29
KB
-rwxr-xr-x
2017-04-12 11:22
colcrt
10.26
KB
-rwxr-xr-x
2017-04-12 11:22
colrm
10.25
KB
-rwxr-xr-x
2017-04-12 11:22
column
14.41
KB
-rwxr-xr-x
2017-04-12 11:22
comm
38.79
KB
-rwxr-xr-x
2017-02-22 12:23
compose
17.74
KB
-rwxr-xr-x
2016-05-01 11:20
corelist
12.53
KB
-rwxr-xr-x
2020-06-20 17:33
cpan
7.41
KB
-rwxr-xr-x
2020-06-20 17:33
cpan5.24-x86_64-linux-gnu
7.43
KB
-rwxr-xr-x
2020-06-20 17:33
crontab
39.32
KB
-rwxr-sr-x
2017-10-07 13:38
csplit
46.95
KB
-rwxr-xr-x
2017-02-22 12:23
ctstat
18.8
KB
-rwxr-xr-x
2017-11-24 09:22
curl
194.07
KB
-rwxr-xr-x
2020-12-17 19:12
cut
42.85
KB
-rwxr-xr-x
2017-02-22 12:23
dbilogstrip
1.35
KB
-rwxr-xr-x
2020-09-21 15:33
dbiprof
6.06
KB
-rwxr-xr-x
2020-09-21 15:33
dbiproxy
5.27
KB
-rwxr-xr-x
2020-09-21 15:33
dbus-cleanup-sockets
9.98
KB
-rwxr-xr-x
2020-07-02 19:36
dbus-daemon
218.95
KB
-rwxr-xr-x
2020-07-02 19:36
dbus-monitor
21.99
KB
-rwxr-xr-x
2020-07-02 19:36
dbus-run-session
9.98
KB
-rwxr-xr-x
2020-07-02 19:36
dbus-send
25.98
KB
-rwxr-xr-x
2020-07-02 19:36
dbus-update-activation-environment
13.98
KB
-rwxr-xr-x
2020-07-02 19:36
dbus-uuidgen
9.98
KB
-rwxr-xr-x
2020-07-02 19:36
deallocvt
10.38
KB
-rwxr-xr-x
2016-01-05 16:55
deb-systemd-helper
19.67
KB
-rwxr-xr-x
2017-05-02 10:20
deb-systemd-invoke
4.4
KB
-rwxr-xr-x
2017-05-02 10:20
debconf
2.79
KB
-rwxr-xr-x
2017-05-21 17:08
debconf-apt-progress
11.27
KB
-rwxr-xr-x
2017-05-21 17:08
debconf-communicate
608
B
-rwxr-xr-x
2017-05-21 17:08
debconf-copydb
1.68
KB
-rwxr-xr-x
2017-05-21 17:08
debconf-escape
647
B
-rwxr-xr-x
2017-05-21 17:08
debconf-set-selections
2.87
KB
-rwxr-xr-x
2017-05-21 17:08
debconf-show
1.78
KB
-rwxr-xr-x
2017-05-21 17:08
defmt-c
5.99
KB
-rwxr-xr-x
2016-03-04 07:59
defmt-sh
5.99
KB
-rwxr-xr-x
2016-03-04 07:59
delpart
22.53
KB
-rwxr-xr-x
2018-03-07 18:29
dh_bash-completion
2.49
KB
-rwxr-xr-x
2015-08-18 19:47
dh_installxmlcatalogs
9.22
KB
-rwxr-xr-x
2016-11-07 14:53
dh_perl_dbi
1.04
KB
-rwxr-xr-x
2020-09-21 15:33
dh_pypy
12.56
KB
-rwxr-xr-x
2017-01-25 14:47
dh_python2
1.03
KB
-rwxr-xr-x
2017-01-24 13:00
dh_python3
12.77
KB
-rwxr-xr-x
2017-01-25 14:47
diff
143.38
KB
-rwxr-xr-x
2017-01-09 22:55
diff3
58.95
KB
-rwxr-xr-x
2017-01-09 22:55
dircolors
42.77
KB
-rwxr-xr-x
2017-02-22 12:23
dirname
30.73
KB
-rwxr-xr-x
2017-02-22 12:23
discover-config
2.86
KB
-rwxr-xr-x
2018-02-26 19:38
dotlockfile
18.56
KB
-rwxr-sr-x
2017-01-17 13:05
dpkg
286.5
KB
-rwxr-xr-x
2018-06-26 10:28
dpkg-deb
146.34
KB
-rwxr-xr-x
2018-06-26 10:28
dpkg-divert
138.41
KB
-rwxr-xr-x
2018-06-26 10:28
dpkg-maintscript-helper
18.58
KB
-rwxr-xr-x
2018-06-26 10:28
dpkg-query
146.4
KB
-rwxr-xr-x
2018-06-26 10:28
dpkg-split
114.34
KB
-rwxr-xr-x
2018-06-26 10:28
dpkg-statoverride
70.25
KB
-rwxr-xr-x
2018-06-26 10:28
dpkg-trigger
66.26
KB
-rwxr-xr-x
2018-06-26 10:28
du
103.16
KB
-rwxr-xr-x
2017-02-22 12:23
dumpkeys
162.98
KB
-rwxr-xr-x
2016-01-05 16:55
dvipdf
1023
B
-rwxr-xr-x
2020-08-20 14:04
easy_install3
404
B
-rwxr-xr-x
2017-01-19 17:02
edit
17.74
KB
-rwxr-xr-x
2016-05-01 11:20
editor
220.04
KB
-rwxr-xr-x
2017-01-11 02:10
enc2xs
40.21
KB
-rwxr-xr-x
2020-06-20 17:33
encguess
2.99
KB
-rwxr-xr-x
2020-06-20 17:33
env
30.76
KB
-rwxr-xr-x
2017-02-22 12:23
envsubst
34.7
KB
-rwxr-xr-x
2019-08-30 23:30
eps2eps
639
B
-rwxr-xr-x
2020-08-20 14:04
eqn
185.19
KB
-rwxr-xr-x
2016-12-13 13:06
ex
2.3
MB
-rwxr-xr-x
2019-06-21 04:10
expand
34.79
KB
-rwxr-xr-x
2017-02-22 12:23
expiry
22.27
KB
-rwxr-sr-x
2017-05-17 11:59
expr
42.82
KB
-rwxr-xr-x
2017-02-22 12:23
factor
74.88
KB
-rwxr-xr-x
2017-02-22 12:23
faillog
18.29
KB
-rwxr-xr-x
2017-05-17 11:59
fallocate
26.64
KB
-rwxr-xr-x
2018-03-07 18:29
fcgistarter
9.99
KB
-rwxr-xr-x
2019-10-13 15:43
filan
83.85
KB
-rwxr-xr-x
2017-07-14 13:52
file
22.26
KB
-rwxr-xr-x
2019-10-22 20:20
file-rename
3.1
KB
-rwxr-xr-x
2015-06-04 22:55
find
216.57
KB
-rwxr-xr-x
2017-02-18 15:37
findaffix
11.74
KB
-rwxr-xr-x
2016-03-04 07:59
flock
26.79
KB
-rwxr-xr-x
2018-03-07 18:29
fmt
38.79
KB
-rwxr-xr-x
2017-02-22 12:23
fold
34.79
KB
-rwxr-xr-x
2017-02-22 12:23
free
18.08
KB
-rwxr-xr-x
2018-05-17 10:56
from
10.3
KB
-rwxr-xr-x
2017-04-12 11:22
futurize
384
B
-rwxr-xr-x
2016-09-23 17:38
galera_new_cluster
888
B
-rwxr-xr-x
2021-01-31 16:38
galera_recovery
3.28
KB
-rwxr-xr-x
2021-01-31 16:38
gawk
646.72
KB
-rwxr-xr-x
2017-01-25 16:06
geqn
185.19
KB
-rwxr-xr-x
2016-12-13 13:06
getconf
22.37
KB
-rwxr-xr-x
2019-02-06 21:17
getent
23.31
KB
-rwxr-xr-x
2019-02-06 21:17
getkeycodes
10.37
KB
-rwxr-xr-x
2016-01-05 16:55
getopt
14.49
KB
-rwxr-xr-x
2018-03-07 18:29
gettext
34.68
KB
-rwxr-xr-x
2019-08-30 23:30
gettext.sh
4.52
KB
-rwxr-xr-x
2019-08-30 23:30
ghostscript
10.24
KB
-rwxr-xr-x
2020-08-20 14:04
gpasswd
74.02
KB
-rwsr-xr-x
2017-05-17 11:59
gpg
977.35
KB
-rwxr-xr-x
2019-02-07 20:57
gpg-agent
376.63
KB
-rwxr-xr-x
2019-02-07 20:57
gpg-connect-agent
150.73
KB
-rwxr-xr-x
2019-02-07 20:57
gpg-zip
3.36
KB
-rwxr-xr-x
2019-02-07 20:57
gpgconf
157.41
KB
-rwxr-xr-x
2019-02-07 20:57
gpgparsemail
26.07
KB
-rwxr-xr-x
2019-02-07 20:57
gpgsplit
74.33
KB
-rwxr-xr-x
2019-02-07 20:57
gpgv
410.64
KB
-rwxr-xr-x
2019-02-07 20:57
gpic
196.03
KB
-rwxr-xr-x
2016-12-13 13:06
groff
101.31
KB
-rwxr-xr-x
2016-12-13 13:06
grog
2.71
KB
-rwxr-xr-x
2016-12-13 13:06
grops
161.72
KB
-rwxr-xr-x
2016-12-13 13:06
grotty
117.34
KB
-rwxr-xr-x
2016-12-13 13:06
groups
34.79
KB
-rwxr-xr-x
2017-02-22 12:23
grub-editenv
236.97
KB
-rwxr-xr-x
2019-06-12 11:20
grub-file
660.64
KB
-rwxr-xr-x
2019-06-12 11:20
grub-fstest
786.75
KB
-rwxr-xr-x
2019-06-12 11:20
grub-glue-efi
232.81
KB
-rwxr-xr-x
2019-06-12 11:20
grub-kbdcomp
1.64
KB
-rwxr-xr-x
2019-06-12 11:20
grub-menulst2cfg
216.83
KB
-rwxr-xr-x
2019-06-12 11:20
grub-mkfont
261.47
KB
-rwxr-xr-x
2019-06-12 11:20
grub-mkimage
325.88
KB
-rwxr-xr-x
2019-06-12 11:20
grub-mklayout
241.09
KB
-rwxr-xr-x
2019-06-12 11:20
grub-mknetdir
366.55
KB
-rwxr-xr-x
2019-06-12 11:20
grub-mkpasswd-pbkdf2
241.16
KB
-rwxr-xr-x
2019-06-12 11:20
grub-mkrelpath
232.5
KB
-rwxr-xr-x
2019-06-12 11:20
grub-mkrescue
819.39
KB
-rwxr-xr-x
2019-06-12 11:20
grub-mkstandalone
442.88
KB
-rwxr-xr-x
2019-06-12 11:20
grub-mount
605.28
KB
-rwxr-xr-x
2019-06-12 11:20
grub-ntldr-img
34.45
KB
-rwxr-xr-x
2019-06-12 11:20
grub-render-label
673.23
KB
-rwxr-xr-x
2019-06-12 11:20
grub-script-check
260.63
KB
-rwxr-xr-x
2019-06-12 11:20
grub-syslinux2cfg
621.75
KB
-rwxr-xr-x
2019-06-12 11:20
gs
10.24
KB
-rwxr-xr-x
2020-08-20 14:04
gsbj
350
B
-rwxr-xr-x
2020-08-20 14:04
gsdj
352
B
-rwxr-xr-x
2020-08-20 14:04
gsdj500
352
B
-rwxr-xr-x
2020-08-20 14:04
gslj
353
B
-rwxr-xr-x
2020-08-20 14:04
gslp
350
B
-rwxr-xr-x
2020-08-20 14:04
gsnd
277
B
-rwxr-xr-x
2020-08-20 14:04
gtbl
118.2
KB
-rwxr-xr-x
2016-12-13 13:06
h2ph
28.52
KB
-rwxr-xr-x
2020-06-20 17:33
h2xs
59.39
KB
-rwxr-xr-x
2020-06-20 17:33
hd
26.61
KB
-rwxr-xr-x
2017-04-12 11:22
head
42.82
KB
-rwxr-xr-x
2017-02-22 12:23
helpztags
2.46
KB
-rwxr-xr-x
2019-06-21 04:10
hexdump
26.61
KB
-rwxr-xr-x
2017-04-12 11:22
host
114.45
KB
-rwxr-xr-x
2020-08-26 18:03
hostid
30.73
KB
-rwxr-xr-x
2017-02-22 12:23
hostnamectl
18.34
KB
-rwxr-xr-x
2019-07-21 18:43
htcacheclean
30
KB
-rwxr-xr-x
2019-10-13 15:43
htdbm
17.99
KB
-rwxr-xr-x
2019-10-13 15:43
htdigest
9.99
KB
-rwxr-xr-x
2019-10-13 15:43
htpasswd
17.99
KB
-rwxr-xr-x
2019-10-13 15:43
i386
18.73
KB
-rwxr-xr-x
2018-03-07 18:29
icombine
34.38
KB
-rwxr-xr-x
2016-03-04 07:59
iconv
55.01
KB
-rwxr-xr-x
2019-02-06 21:17
id
42.91
KB
-rwxr-xr-x
2017-02-22 12:23
igawk
3.11
KB
-rwxr-xr-x
2017-01-25 16:06
ijoin
14.1
KB
-rwxr-xr-x
2016-03-04 07:59
infocmp
58.07
KB
-rwxr-xr-x
2017-12-28 09:47
infotocap
78.11
KB
-rwxr-xr-x
2017-12-28 09:47
innochecksum
3.42
MB
-rwxr-xr-x
2021-01-31 16:38
innotop
445.81
KB
-rwxr-xr-x
2020-10-12 17:40
install
135.61
KB
-rwxr-xr-x
2017-02-22 12:23
instmodsh
4.27
KB
-rwxr-xr-x
2020-06-20 17:33
ionice
26.66
KB
-rwxr-xr-x
2018-03-07 18:29
iostat
42.13
KB
-rwxr-xr-x
2017-05-25 20:26
ipcmk
26.77
KB
-rwxr-xr-x
2018-03-07 18:29
ipcrm
26.63
KB
-rwxr-xr-x
2018-03-07 18:29
ipcs
50.79
KB
-rwxr-xr-x
2018-03-07 18:29
iptables-xml
92.74
KB
-rwxr-xr-x
2017-04-12 09:41
ischroot
10.3
KB
-rwxr-xr-x
2017-04-02 17:10
ispell
94.46
KB
-rwxr-xr-x
2016-03-04 07:59
ispell-wrapper
7.05
KB
-rwxr-xr-x
2016-10-10 09:58
join
46.85
KB
-rwxr-xr-x
2017-02-22 12:23
json_pp
3.86
KB
-rwxr-xr-x
2020-06-20 17:33
kbdinfo
10.38
KB
-rwxr-xr-x
2016-01-05 16:55
kbxutil
154.63
KB
-rwxr-xr-x
2019-02-07 20:57
kernel-install
3.91
KB
-rwxr-xr-x
2019-07-21 18:43
killall
23.68
KB
-rwxr-xr-x
2015-08-17 13:18
last
42.85
KB
-rwxr-xr-x
2018-03-07 18:29
lastb
42.85
KB
-rwxr-xr-x
2018-03-07 18:29
lastlog
18.07
KB
-rwxr-xr-x
2017-05-17 11:59
lcf
7.6
KB
-rwxr-xr-x
2016-03-16 20:58
ldd
5.27
KB
-rwxr-xr-x
2019-02-06 21:17
less
161.82
KB
-rwxr-xr-x
2016-02-28 11:28
lessecho
10.02
KB
-rwxr-xr-x
2016-02-28 11:28
lessfile
7.58
KB
-rwxr-xr-x
2016-02-28 11:28
lesskey
19.36
KB
-rwxr-xr-x
2016-02-28 11:28
lesspipe
7.58
KB
-rwxr-xr-x
2016-02-28 11:28
letsencrypt
385
B
-rwxr-xr-x
2020-09-26 18:25
lexgrog
90.57
KB
-rwxr-xr-x
2016-12-13 13:10
lft
2.43
KB
-rwxr-xr-x
2016-08-29 15:45
lft.db
2.43
KB
-rwxr-xr-x
2016-08-29 15:45
libnetcfg
15.39
KB
-rwxr-xr-x
2020-06-20 17:33
line
10.4
KB
-rwxr-xr-x
2018-03-07 18:29
link
30.73
KB
-rwxr-xr-x
2017-02-22 12:23
linux-boot-prober
1.54
KB
-rwxr-xr-x
2017-01-20 15:28
linux-check-removal
3.99
KB
-rwxr-xr-x
2016-06-21 02:48
linux-update-symlinks
6.17
KB
-rwxr-xr-x
2016-06-05 01:13
linux-version
2.63
KB
-rwxr-xr-x
2015-08-11 15:45
linux32
18.73
KB
-rwxr-xr-x
2018-03-07 18:29
linux64
18.73
KB
-rwxr-xr-x
2018-03-07 18:29
lnstat
18.8
KB
-rwxr-xr-x
2017-11-24 09:22
loadkeys
199.46
KB
-rwxr-xr-x
2016-01-05 16:55
loadunimap
26.68
KB
-rwxr-xr-x
2016-01-05 16:55
locale
37.91
KB
-rwxr-xr-x
2019-02-06 21:17
localectl
26.41
KB
-rwxr-xr-x
2019-07-21 18:43
localedef
295.69
KB
-rwxr-xr-x
2019-02-06 21:17
logger
43.43
KB
-rwxr-xr-x
2018-03-07 18:29
logname
30.73
KB
-rwxr-xr-x
2017-02-22 12:23
logresolve
10
KB
-rwxr-xr-x
2019-10-13 15:43
look
10.33
KB
-rwxr-xr-x
2017-04-12 11:22
lorder
2.78
KB
-rwxr-xr-x
2017-04-12 11:22
lsattr
10
KB
-rwxr-xr-x
2020-07-25 09:03
lsb_release
3.55
KB
-rwxr-xr-x
2015-08-26 09:44
lscpu
63.2
KB
-rwxr-xr-x
2018-03-07 18:29
lsinitramfs
625
B
-rwxr-xr-x
2017-03-06 22:42
lsipc
71.12
KB
-rwxr-xr-x
2018-03-07 18:29
lslocks
35.16
KB
-rwxr-xr-x
2018-03-07 18:29
lslogins
59.27
KB
-rwxr-xr-x
2018-03-07 18:29
lsns
38.87
KB
-rwxr-xr-x
2018-03-07 18:29
lsof
159.31
KB
-rwxr-xr-x
2015-09-13 21:46
lspci
80.31
KB
-rwxr-xr-x
2016-11-30 06:53
lspgpot
1.06
KB
-rwxr-xr-x
2014-06-25 16:17
lzcat
75.38
KB
-rwxr-xr-x
2016-10-08 13:11
lzcmp
6.48
KB
-rwxr-xr-x
2016-10-08 13:11
lzdiff
6.48
KB
-rwxr-xr-x
2016-10-08 13:11
lzegrep
5.5
KB
-rwxr-xr-x
2016-10-08 13:11
lzfgrep
5.5
KB
-rwxr-xr-x
2016-10-08 13:11
lzgrep
5.5
KB
-rwxr-xr-x
2016-10-08 13:11
lzless
1.76
KB
-rwxr-xr-x
2016-10-08 13:11
lzma
75.38
KB
-rwxr-xr-x
2016-10-08 13:11
lzmainfo
10.38
KB
-rwxr-xr-x
2016-10-08 13:11
lzmore
2.11
KB
-rwxr-xr-x
2016-10-08 13:11
man
104.5
KB
-rwxr-xr-x
2016-12-13 13:10
mandb
126.72
KB
-rwxr-xr-x
2016-12-13 13:10
manpath
30.47
KB
-rwxr-xr-x
2016-12-13 13:10
mapscrn
18.65
KB
-rwxr-xr-x
2016-01-05 16:55
mariabackup
17.34
MB
-rwxr-xr-x
2021-01-31 16:38
mariadb
4.12
MB
-rwxr-xr-x
2021-01-31 16:38
mariadb-service-convert
2.43
KB
-rwxr-xr-x
2021-01-31 16:38
mariadbcheck
3.91
MB
-rwxr-xr-x
2021-01-31 16:38
mawk
119.12
KB
-rwxr-xr-x
2012-03-23 20:15
mbstream
3.4
MB
-rwxr-xr-x
2021-01-31 16:38
mcookie
30.79
KB
-rwxr-xr-x
2018-03-07 18:29
md5sum
42.85
KB
-rwxr-xr-x
2017-02-22 12:23
md5sum.textutils
42.85
KB
-rwxr-xr-x
2017-02-22 12:23
mesg
10.45
KB
-rwxr-xr-x
2018-03-07 18:29
migrate-pubring-from-classic-gpg
2.14
KB
-rwxr-xr-x
2018-10-03 00:58
mk_modmap
15.78
KB
-rwxr-xr-x
2016-01-05 16:55
mkfifo
63.04
KB
-rwxr-xr-x
2017-02-22 12:23
mkpasswd
18.57
KB
-rwxr-xr-x
2017-07-27 15:45
mpstat
38.15
KB
-rwxr-xr-x
2017-05-25 20:26
msql2mysql
1.41
KB
-rwxr-xr-x
2021-01-31 16:38
mtr
84.72
KB
-rwsr-xr-x
2017-01-02 18:20
munchlist
31.23
KB
-rwxr-xr-x
2016-03-04 07:59
my_print_defaults
3.39
MB
-rwxr-xr-x
2021-01-31 16:38
myisam_ftdump
3.75
MB
-rwxr-xr-x
2021-01-31 16:38
myisamchk
3.87
MB
-rwxr-xr-x
2021-01-31 16:38
myisamlog
3.73
MB
-rwxr-xr-x
2021-01-31 16:38
myisampack
3.77
MB
-rwxr-xr-x
2021-01-31 16:38
mysql
4.12
MB
-rwxr-xr-x
2021-01-31 16:38
mysql_convert_table_format
4.12
KB
-rwxr-xr-x
2021-01-31 16:38
mysql_embedded
16.03
MB
-rwxr-xr-x
2021-01-31 16:38
mysql_find_rows
3.21
KB
-rwxr-xr-x
2021-01-31 16:38
mysql_fix_extensions
1.22
KB
-rwxr-xr-x
2021-01-31 16:38
mysql_install_db
19.15
KB
-rwxr-xr-x
2021-01-31 16:38
mysql_plugin
3.39
MB
-rwxr-xr-x
2021-01-31 16:38
mysql_secure_installation
12.23
KB
-rwxr-xr-x
2021-01-31 16:38
mysql_setpermission
17.07
KB
-rwxr-xr-x
2021-01-31 16:38
mysql_tzinfo_to_sql
3.39
MB
-rwxr-xr-x
2021-01-31 16:38
mysql_upgrade
3.47
MB
-rwxr-xr-x
2021-01-31 16:38
mysql_waitpid
3.38
MB
-rwxr-xr-x
2021-01-31 16:38
mysql_zap
3.77
KB
-rwxr-xr-x
2021-01-31 16:38
mysqlaccess
109.33
KB
-rwxr-xr-x
2021-01-31 16:38
mysqladmin
3.91
MB
-rwxr-xr-x
2021-01-31 16:38
mysqlanalyze
3.91
MB
-rwxr-xr-x
2021-01-31 16:38
mysqlbinlog
4.08
MB
-rwxr-xr-x
2021-01-31 16:38
mysqlcheck
3.91
MB
-rwxr-xr-x
2021-01-31 16:38
mysqld_multi
23.84
KB
-rwxr-xr-x
2021-01-31 16:38
mysqld_safe
30.79
KB
-rwxr-xr-x
2021-01-31 16:38
mysqld_safe_helper
3.35
MB
-rwxr-xr-x
2021-01-31 16:38
mysqldump
3.99
MB
-rwxr-xr-x
2021-01-31 16:38
mysqldumpslow
8.05
KB
-rwxr-xr-x
2021-01-31 16:38
mysqlhotcopy
34.12
KB
-rwxr-xr-x
2021-01-31 16:38
mysqlimport
3.9
MB
-rwxr-xr-x
2021-01-31 16:38
mysqloptimize
3.91
MB
-rwxr-xr-x
2021-01-31 16:38
mysqlrepair
3.91
MB
-rwxr-xr-x
2021-01-31 16:38
mysqlreport
50.03
KB
-rwxr-xr-x
2020-10-12 17:40
mysqlshow
3.9
MB
-rwxr-xr-x
2021-01-31 16:38
mysqlslap
3.92
MB
-rwxr-xr-x
2021-01-31 16:38
mytop
63.3
KB
-rwxr-xr-x
2021-01-31 16:38
namei
26.66
KB
-rwxr-xr-x
2018-03-07 18:29
nawk
646.72
KB
-rwxr-xr-x
2017-01-25 16:06
ncal
29.21
KB
-rwxr-xr-x
2017-04-12 11:22
neqn
908
B
-rwxr-xr-x
2016-12-13 13:06
newgrp
39.37
KB
-rwsr-xr-x
2017-05-17 11:59
ngettext
34.7
KB
-rwxr-xr-x
2019-08-30 23:30
nice
34.76
KB
-rwxr-xr-x
2017-02-22 12:23
nl
38.91
KB
-rwxr-xr-x
2017-02-22 12:23
nohup
34.79
KB
-rwxr-xr-x
2017-02-22 12:23
nproc
34.79
KB
-rwxr-xr-x
2017-02-22 12:23
nroff
3.25
KB
-rwxr-xr-x
2016-12-13 13:06
nsenter
30.95
KB
-rwxr-xr-x
2018-03-07 18:29
nstat
22.67
KB
-rwxr-xr-x
2017-11-24 09:22
numfmt
58.91
KB
-rwxr-xr-x
2017-02-22 12:23
od
66.91
KB
-rwxr-xr-x
2017-02-22 12:23
on_ac_power
2.2
KB
-rwxr-xr-x
2009-12-02 08:57
openssl
639.48
KB
-rwxr-xr-x
2020-12-11 09:22
os-prober
4.44
KB
-rwxr-xr-x
2017-01-31 03:56
pager
161.82
KB
-rwxr-xr-x
2016-02-28 11:28
paperconf
10.34
KB
-rwxr-xr-x
2016-11-11 11:28
partx
83.63
KB
-rwxr-xr-x
2018-03-07 18:29
passwd
58.28
KB
-rwsr-xr-x
2017-05-17 11:59
paste
34.79
KB
-rwxr-xr-x
2017-02-22 12:23
pasteurize
388
B
-rwxr-xr-x
2016-09-23 17:38
pathchk
30.76
KB
-rwxr-xr-x
2017-02-22 12:23
pbr
152
B
-rwxr-xr-x
2016-09-21 14:14
pcimodules
14.59
KB
-rwxr-xr-x
2016-11-30 06:53
pdb
45.02
KB
-rwxr-xr-x
2020-08-22 10:03
pdb2.7
45.02
KB
-rwxr-xr-x
2020-08-22 10:03
pdb3
59.7
KB
-rwxr-xr-x
2020-11-18 21:09
pdb3.5
59.7
KB
-rwxr-xr-x
2020-11-18 21:09
pdf2dsc
698
B
-rwxr-xr-x
2020-08-20 14:04
pdf2ps
909
B
-rwxr-xr-x
2020-08-20 14:04
peekfd
10.52
KB
-rwxr-xr-x
2015-08-17 13:18
perf
528
B
-rwxr-xr-x
2016-09-16 23:34
perl
1.93
MB
-rwxr-xr-x
2020-06-20 17:33
perl5.24-x86_64-linux-gnu
10.24
KB
-rwxr-xr-x
2020-06-20 17:33
perl5.24.1
1.93
MB
-rwxr-xr-x
2020-06-20 17:33
perlbug
44.46
KB
-rwxr-xr-x
2020-06-20 17:33
perldoc
125
B
-rwxr-xr-x
2020-06-20 17:33
perlivp
10.61
KB
-rwxr-xr-x
2020-06-20 17:33
perlthanks
44.46
KB
-rwxr-xr-x
2020-06-20 17:33
perror
3.54
MB
-rwxr-xr-x
2021-01-31 16:38
pf2afm
498
B
-rwxr-xr-x
2020-08-20 14:04
pfbtopfa
516
B
-rwxr-xr-x
2020-08-20 14:04
pg
38.89
KB
-rwxr-xr-x
2018-03-07 18:29
pgrep
26.09
KB
-rwxr-xr-x
2018-05-17 10:56
phar
14.54
KB
-rwxr-xr-x
2021-02-12 14:49
phar.phar
14.54
KB
-rwxr-xr-x
2021-02-12 14:49
phar.phar7.0
14.48
KB
-rwxr-xr-x
2020-10-06 17:08
phar.phar7.4
14.54
KB
-rwxr-xr-x
2021-02-12 14:49
phar7.0
14.48
KB
-rwxr-xr-x
2020-10-06 17:08
phar7.4
14.54
KB
-rwxr-xr-x
2021-02-12 14:49
phar7.4.phar
14.54
KB
-rwxr-xr-x
2021-02-12 14:49
php
4.46
MB
-rwxr-xr-x
2021-02-12 14:49
php7.0
4.19
MB
-rwxr-xr-x
2020-10-06 17:08
php7.4
4.46
MB
-rwxr-xr-x
2021-02-12 14:49
pic
196.03
KB
-rwxr-xr-x
2016-12-13 13:06
pico
220.04
KB
-rwxr-xr-x
2017-01-11 02:10
piconv
8.16
KB
-rwxr-xr-x
2020-06-20 17:33
pidstat
54.15
KB
-rwxr-xr-x
2017-05-25 20:26
pinentry
54.46
KB
-rwxr-xr-x
2017-02-06 08:56
pinentry-curses
54.46
KB
-rwxr-xr-x
2017-02-06 08:56
pinky
38.95
KB
-rwxr-xr-x
2017-02-22 12:23
pkill
26.09
KB
-rwxr-xr-x
2018-05-17 10:56
pl2pm
4.42
KB
-rwxr-xr-x
2020-06-20 17:33
pldd
14.57
KB
-rwxr-xr-x
2019-02-06 21:17
pmap
30.09
KB
-rwxr-xr-x
2018-05-17 10:56
pod2html
4.04
KB
-rwxr-xr-x
2020-06-20 17:33
pod2man
13.84
KB
-rwxr-xr-x
2020-06-20 17:33
pod2text
10.72
KB
-rwxr-xr-x
2020-06-20 17:33
pod2usage
3.86
KB
-rwxr-xr-x
2020-06-20 17:33
podchecker
3.61
KB
-rwxr-xr-x
2020-06-20 17:33
podselect
2.47
KB
-rwxr-xr-x
2020-06-20 17:33
pphs
404
B
-rwxr-xr-x
2020-08-20 14:04
pr
75.01
KB
-rwxr-xr-x
2017-02-22 12:23
preconv
42.2
KB
-rwxr-xr-x
2016-12-13 13:06
prename
3.13
KB
-rwxr-xr-x
2020-06-20 17:33
print
17.74
KB
-rwxr-xr-x
2016-05-01 11:20
printafm
395
B
-rwxr-xr-x
2020-08-20 14:04
printenv
30.73
KB
-rwxr-xr-x
2017-02-22 12:23
printerbanner
18.28
KB
-rwxr-xr-x
2017-04-12 11:22
printf
50.79
KB
-rwxr-xr-x
2017-02-22 12:23
prlimit
31.38
KB
-rwxr-xr-x
2018-03-07 18:29
procan
71.74
KB
-rwxr-xr-x
2017-07-14 13:52
prove
13.27
KB
-rwxr-xr-x
2020-06-20 17:33
prtstat
14.42
KB
-rwxr-xr-x
2015-08-17 13:18
ps2ascii
631
B
-rwxr-xr-x
2020-08-20 14:04
ps2epsi
2.69
KB
-rwxr-xr-x
2020-08-20 14:04
ps2pdf
272
B
-rwxr-xr-x
2020-08-20 14:04
ps2pdf12
215
B
-rwxr-xr-x
2020-08-20 14:04
ps2pdf13
215
B
-rwxr-xr-x
2020-08-20 14:04
ps2pdf14
215
B
-rwxr-xr-x
2020-08-20 14:04
ps2pdfwr
1.07
KB
-rwxr-xr-x
2020-08-20 14:04
ps2ps
647
B
-rwxr-xr-x
2020-08-20 14:04
ps2ps2
669
B
-rwxr-xr-x
2020-08-20 14:04
ps2txt
631
B
-rwxr-xr-x
2020-08-20 14:04
psfaddtable
18.38
KB
-rwxr-xr-x
2016-01-05 16:55
psfgettable
18.38
KB
-rwxr-xr-x
2016-01-05 16:55
psfstriptable
18.38
KB
-rwxr-xr-x
2016-01-05 16:55
psfxtable
18.38
KB
-rwxr-xr-x
2016-01-05 16:55
pstree
27.49
KB
-rwxr-xr-x
2015-08-17 13:18
pstree.x11
27.49
KB
-rwxr-xr-x
2015-08-17 13:18
pstruct
35.89
KB
-rwxr-xr-x
2020-06-20 17:33
ptar
3.48
KB
-rwxr-xr-x
2020-06-20 17:33
ptardiff
2.57
KB
-rwxr-xr-x
2020-06-20 17:33
ptargrep
4.29
KB
-rwxr-xr-x
2020-06-20 17:33
ptx
71.01
KB
-rwxr-xr-x
2017-02-22 12:23
pwdx
10.07
KB
-rwxr-xr-x
2018-05-17 10:56
py3clean
7.62
KB
-rwxr-xr-x
2017-01-20 10:03
py3compile
11.83
KB
-rwxr-xr-x
2017-01-20 10:03
py3versions
11.44
KB
-rwxr-xr-x
2017-01-20 10:03
pybuild
21.75
KB
-rwxr-xr-x
2017-01-25 14:47
pyclean
4.03
KB
-rwxr-xr-x
2017-01-24 13:00
pycompile
11.62
KB
-rwxr-xr-x
2017-01-24 13:00
pydoc
79
B
-rwxr-xr-x
2020-08-22 10:03
pydoc2.7
79
B
-rwxr-xr-x
2020-08-22 10:03
pydoc3
79
B
-rwxr-xr-x
2020-11-18 21:09
pydoc3.5
79
B
-rwxr-xr-x
2020-11-18 21:09
pygettext
21.58
KB
-rwxr-xr-x
2020-08-22 10:03
pygettext2.7
21.58
KB
-rwxr-xr-x
2020-08-22 10:03
pygettext3
21.73
KB
-rwxr-xr-x
2020-11-18 21:09
pygettext3.5
21.73
KB
-rwxr-xr-x
2020-11-18 21:09
python
3.62
MB
-rwxr-xr-x
2020-08-22 10:03
python2
3.62
MB
-rwxr-xr-x
2020-08-22 10:03
python2.7
3.62
MB
-rwxr-xr-x
2020-08-22 10:03
python3
4.54
MB
-rwxr-xr-x
2020-11-18 21:09
python3-futurize
384
B
-rwxr-xr-x
2016-09-23 17:38
python3-pasteurize
388
B
-rwxr-xr-x
2016-09-23 17:38
python3-pbr
152
B
-rwxr-xr-x
2016-09-21 14:14
python3.5
4.54
MB
-rwxr-xr-x
2020-11-18 21:09
python3.5m
4.54
MB
-rwxr-xr-x
2020-11-18 21:09
python3m
4.54
MB
-rwxr-xr-x
2020-11-18 21:09
pyversions
14.75
KB
-rwxr-xr-x
2017-01-24 13:00
querybts
10.59
KB
-rwxr-xr-x
2019-08-29 14:19
rcp
86.14
KB
-rwxr-xr-x
2019-07-15 13:32
realpath
46.82
KB
-rwxr-xr-x
2017-02-22 12:23
rename
3.1
KB
-rwxr-xr-x
2015-06-04 22:55
rename.ul
14.48
KB
-rwxr-xr-x
2018-03-07 18:29
renice
10.36
KB
-rwxr-xr-x
2018-03-07 18:29
replace
3.36
MB
-rwxr-xr-x
2021-01-31 16:38
report-hw
2.05
KB
-rwxr-xr-x
2015-12-30 04:01
reportbug
103.63
KB
-rwxr-xr-x
2019-08-29 14:19
reset
22
KB
-rwxr-xr-x
2017-12-28 09:47
resizecons
18.65
KB
-rwxr-xr-x
2016-01-05 16:55
resizepart
38.86
KB
-rwxr-xr-x
2018-03-07 18:29
resolve_stack_dump
3.38
MB
-rwxr-xr-x
2021-01-31 16:38
resolveip
3.38
MB
-rwxr-xr-x
2021-01-31 16:38
rev
10.45
KB
-rwxr-xr-x
2018-03-07 18:29
rgrep
30
B
-rwxr-xr-x
2016-11-28 21:59
rlogin
714.86
KB
-rwxr-xr-x
2019-07-15 13:32
rotatelogs
18.07
KB
-rwxr-xr-x
2019-10-13 15:43
routef
173
B
-rwxr-xr-x
2017-11-24 09:22
routel
1.23
KB
-rwxr-xr-x
2017-11-24 09:22
rsh
714.86
KB
-rwxr-xr-x
2019-07-15 13:32
rsync
472.3
KB
-rwxr-xr-x
2019-03-15 10:39
rtstat
18.8
KB
-rwxr-xr-x
2017-11-24 09:22
run-mailcap
17.74
KB
-rwxr-xr-x
2016-05-01 11:20
runcon
34.85
KB
-rwxr-xr-x
2017-02-22 12:23
rview
2.3
MB
-rwxr-xr-x
2019-06-21 04:10
rvim
2.3
MB
-rwxr-xr-x
2019-06-21 04:10
sadf
282.37
KB
-rwxr-xr-x
2017-05-25 20:26
sar
109.7
KB
-rwxr-xr-x
2017-05-25 20:26
sar.sysstat
109.7
KB
-rwxr-xr-x
2017-05-25 20:26
savelog
10.22
KB
-rwxr-xr-x
2017-04-02 17:10
scp
86.14
KB
-rwxr-xr-x
2019-07-15 13:32
screendump
10.34
KB
-rwxr-xr-x
2016-01-05 16:55
script
22.73
KB
-rwxr-xr-x
2018-03-07 18:29
scriptreplay
22.63
KB
-rwxr-xr-x
2018-03-07 18:29
sdiff
50.85
KB
-rwxr-xr-x
2017-01-09 22:55
see
17.74
KB
-rwxr-xr-x
2016-05-01 11:20
select-default-iwrap
474
B
-rwxr-xr-x
2016-10-10 09:58
select-editor
1.19
KB
-rwxr-xr-x
2017-12-20 13:39
sensible-browser
1.11
KB
-rwxr-xr-x
2017-12-20 13:39
sensible-editor
1.08
KB
-rwxr-xr-x
2017-12-20 13:39
sensible-pager
288
B
-rwxr-xr-x
2017-12-20 13:39
seq
46.82
KB
-rwxr-xr-x
2017-02-22 12:23
setarch
18.73
KB
-rwxr-xr-x
2018-03-07 18:29
setkeycodes
10.37
KB
-rwxr-xr-x
2016-01-05 16:55
setleds
14.35
KB
-rwxr-xr-x
2016-01-05 16:55
setlogcons
10.37
KB
-rwxr-xr-x
2016-01-05 16:55
setmetamode
10.4
KB
-rwxr-xr-x
2016-01-05 16:55
setpci
22.54
KB
-rwxr-xr-x
2016-11-30 06:53
setsid
10.45
KB
-rwxr-xr-x
2018-03-07 18:29
setterm
38.68
KB
-rwxr-xr-x
2018-03-07 18:29
setvtrgb
10.46
KB
-rwxr-xr-x
2016-01-05 16:55
sftp
134.36
KB
-rwxr-xr-x
2019-07-15 13:32
sg
39.37
KB
-rwsr-xr-x
2017-05-17 11:59
sha1sum
46.85
KB
-rwxr-xr-x
2017-02-22 12:23
sha224sum
54.85
KB
-rwxr-xr-x
2017-02-22 12:23
sha256sum
54.85
KB
-rwxr-xr-x
2017-02-22 12:23
sha384sum
58.85
KB
-rwxr-xr-x
2017-02-22 12:23
sha512sum
58.85
KB
-rwxr-xr-x
2017-02-22 12:23
shasum
9.15
KB
-rwxr-xr-x
2020-06-20 17:33
showconsolefont
18.45
KB
-rwxr-xr-x
2016-01-05 16:55
showkey
14.63
KB
-rwxr-xr-x
2016-01-05 16:55
shred
59.01
KB
-rwxr-xr-x
2017-02-22 12:23
shuf
54.91
KB
-rwxr-xr-x
2017-02-22 12:23
skill
26.08
KB
-rwxr-xr-x
2018-05-17 10:56
slabtop
18.08
KB
-rwxr-xr-x
2018-05-17 10:56
slogin
714.86
KB
-rwxr-xr-x
2019-07-15 13:32
snice
26.08
KB
-rwxr-xr-x
2018-05-17 10:56
socat
369.47
KB
-rwxr-xr-x
2017-07-14 13:52
soelim
30.2
KB
-rwxr-xr-x
2016-12-13 13:06
sort
107.52
KB
-rwxr-xr-x
2017-02-22 12:23
splain
18.37
KB
-rwxr-xr-x
2020-06-20 17:33
split
55.38
KB
-rwxr-xr-x
2017-02-22 12:23
splitfont
10.25
KB
-rwxr-xr-x
2016-01-05 16:55
sq
5.99
KB
-rwxr-xr-x
2016-03-04 07:59
ssh
714.86
KB
-rwxr-xr-x
2019-07-15 13:32
ssh-add
330.21
KB
-rwxr-xr-x
2019-07-15 13:32
ssh-agent
350.22
KB
-rwxr-sr-x
2019-07-15 13:32
ssh-argv0
1.42
KB
-rwxr-xr-x
2019-03-01 16:19
ssh-copy-id
10.13
KB
-rwxr-xr-x
2016-12-19 04:59
ssh-keygen
390.23
KB
-rwxr-xr-x
2019-07-15 13:32
ssh-keyscan
406.23
KB
-rwxr-xr-x
2019-07-15 13:32
stat
83.1
KB
-rwxr-xr-x
2017-02-22 12:23
stdbuf
46.82
KB
-rwxr-xr-x
2017-02-22 12:23
sudo
137.64
KB
-rwsr-xr-x
2021-01-23 09:10
sudoedit
137.64
KB
-rwsr-xr-x
2021-01-23 09:10
sudoreplay
46.59
KB
-rwxr-xr-x
2021-01-23 09:10
sum
38.83
KB
-rwxr-xr-x
2017-02-22 12:23
symcryptrun
110.6
KB
-rwxr-xr-x
2019-02-07 20:57
systemd-analyze
1010.6
KB
-rwxr-xr-x
2019-07-21 18:43
systemd-cat
10.34
KB
-rwxr-xr-x
2019-07-21 18:43
systemd-cgls
14.34
KB
-rwxr-xr-x
2019-07-21 18:43
systemd-cgtop
30.44
KB
-rwxr-xr-x
2019-07-21 18:43
systemd-delta
22.41
KB
-rwxr-xr-x
2019-07-21 18:43
systemd-detect-virt
10.33
KB
-rwxr-xr-x
2019-07-21 18:43
systemd-mount
30.35
KB
-rwxr-xr-x
2019-07-21 18:43
systemd-path
10.33
KB
-rwxr-xr-x
2019-07-21 18:43
systemd-resolve
78.34
KB
-rwxr-xr-x
2019-07-21 18:43
systemd-run
38.34
KB
-rwxr-xr-x
2019-07-21 18:43
systemd-socket-activate
22.34
KB
-rwxr-xr-x
2019-07-21 18:43
systemd-stdio-bridge
14.34
KB
-rwxr-xr-x
2019-07-21 18:43
tabs
13.99
KB
-rwxr-xr-x
2017-12-28 09:47
tac
38.82
KB
-rwxr-xr-x
2017-02-22 12:23
tail
66.98
KB
-rwxr-xr-x
2017-02-22 12:23
tapestat
34.13
KB
-rwxr-xr-x
2017-05-25 20:26
tasksel
16.1
KB
-rwxr-xr-x
2016-12-24 12:46
taskset
30.75
KB
-rwxr-xr-x
2018-03-07 18:29
tbl
118.2
KB
-rwxr-xr-x
2016-12-13 13:06
tee
34.82
KB
-rwxr-xr-x
2017-02-22 12:23
telnet
104.42
KB
-rwxr-xr-x
2016-11-07 18:06
telnet.netkit
104.42
KB
-rwxr-xr-x
2016-11-07 18:06
test
46.79
KB
-rwxr-xr-x
2017-02-22 12:23
tic
78.11
KB
-rwxr-xr-x
2017-12-28 09:47
timedatectl
22.34
KB
-rwxr-xr-x
2019-07-21 18:43
timeout
39.35
KB
-rwxr-xr-x
2017-02-22 12:23
tload
14.09
KB
-rwxr-xr-x
2018-05-17 10:56
toe
13.99
KB
-rwxr-xr-x
2017-12-28 09:47
top
105.77
KB
-rwxr-xr-x
2018-05-17 10:56
touch
90.98
KB
-rwxr-xr-x
2017-02-22 12:23
tput
18.02
KB
-rwxr-xr-x
2017-12-28 09:47
tr
46.79
KB
-rwxr-xr-x
2017-02-22 12:23
traceproto
2.82
KB
-rwxr-xr-x
2016-08-29 15:45
traceproto.db
2.82
KB
-rwxr-xr-x
2016-08-29 15:45
traceroute
67.16
KB
-rwxr-xr-x
2016-08-29 15:45
traceroute-nanog
1.58
KB
-rwxr-xr-x
2016-08-29 15:45
traceroute.db
67.16
KB
-rwxr-xr-x
2016-08-29 15:45
traceroute6
67.16
KB
-rwxr-xr-x
2016-08-29 15:45
traceroute6.db
67.16
KB
-rwxr-xr-x
2016-08-29 15:45
troff
695.34
KB
-rwxr-xr-x
2016-12-13 13:06
truncate
38.76
KB
-rwxr-xr-x
2017-02-22 12:23
tryaffix
4.8
KB
-rwxr-xr-x
2016-03-04 07:59
tset
22
KB
-rwxr-xr-x
2017-12-28 09:47
tsort
34.76
KB
-rwxr-xr-x
2017-02-22 12:23
tty
30.76
KB
-rwxr-xr-x
2017-02-22 12:23
tzselect
14.83
KB
-rwxr-xr-x
2019-02-06 21:17
ucf
39.68
KB
-rwxr-xr-x
2016-03-16 20:58
ucfq
18.91
KB
-rwxr-xr-x
2016-03-16 20:58
ucfr
10.47
KB
-rwxr-xr-x
2016-03-16 20:58
ul
14.34
KB
-rwxr-xr-x
2017-04-12 11:22
unexpand
34.82
KB
-rwxr-xr-x
2017-02-22 12:23
unicode_stop
530
B
-rwxr-xr-x
2016-01-05 16:55
uniq
42.85
KB
-rwxr-xr-x
2017-02-22 12:23
unlink
30.73
KB
-rwxr-xr-x
2017-02-22 12:23
unlzma
75.38
KB
-rwxr-xr-x
2016-10-08 13:11
unmkinitramfs
2.79
KB
-rwxr-xr-x
2017-03-06 22:42
unshare
18.82
KB
-rwxr-xr-x
2018-03-07 18:29
unsq
9.99
KB
-rwxr-xr-x
2016-03-04 07:59
unxz
75.38
KB
-rwxr-xr-x
2016-10-08 13:11
update-alternatives
46.01
KB
-rwxr-xr-x
2018-06-26 10:28
update-mime-database
672
B
-rwxr-xr-x
2018-03-14 18:01
update-mime-database.real
51.23
KB
-rwxr-xr-x
2018-03-14 18:01
uptime
10.07
KB
-rwxr-xr-x
2018-05-17 10:56
users
30.79
KB
-rwxr-xr-x
2017-02-22 12:23
utmpdump
22.71
KB
-rwxr-xr-x
2018-03-07 18:29
vi
2.3
MB
-rwxr-xr-x
2019-06-21 04:10
view
2.3
MB
-rwxr-xr-x
2019-06-21 04:10
vim
2.3
MB
-rwxr-xr-x
2019-06-21 04:10
vim.basic
2.3
MB
-rwxr-xr-x
2019-06-21 04:10
vim.tiny
1.01
MB
-rwxr-xr-x
2019-06-21 04:10
vimdiff
2.3
MB
-rwxr-xr-x
2019-06-21 04:10
vimtutor
2.05
KB
-rwxr-xr-x
2019-06-21 04:10
vmstat
30.09
KB
-rwxr-xr-x
2018-05-17 10:56
w
18.07
KB
-rwxr-xr-x
2018-05-17 10:56
w.procps
18.07
KB
-rwxr-xr-x
2018-05-17 10:56
wall
26.8
KB
-rwxr-sr-x
2018-03-07 18:29
watch
22.41
KB
-rwxr-xr-x
2018-05-17 10:56
watchgnupg
13.99
KB
-rwxr-xr-x
2019-02-07 20:57
wc
42.86
KB
-rwxr-xr-x
2017-02-22 12:23
wget
479.56
KB
-rwxr-xr-x
2019-04-05 13:05
whatis
46.98
KB
-rwxr-xr-x
2016-12-13 13:10
whereis
27.09
KB
-rwxr-xr-x
2018-03-07 18:29
which
946
B
-rwxr-xr-x
2017-04-02 17:10
whiptail
26.77
KB
-rwxr-xr-x
2016-10-15 08:00
who
50.95
KB
-rwxr-xr-x
2017-02-22 12:23
whoami
30.76
KB
-rwxr-xr-x
2017-02-22 12:23
whois
149.18
KB
-rwxr-xr-x
2017-07-27 15:45
write
14.42
KB
-rwxr-sr-x
2017-04-12 11:22
wsrep_sst_common
10.51
KB
-rwxr-xr-x
2021-01-31 16:38
wsrep_sst_mariabackup
36.97
KB
-rwxr-xr-x
2021-01-31 16:38
wsrep_sst_mysqldump
7.69
KB
-rwxr-xr-x
2021-01-31 16:38
wsrep_sst_rsync
14.96
KB
-rwxr-xr-x
2021-01-31 16:38
wsrep_sst_rsync_wan
14.96
KB
-rwxr-xr-x
2021-01-31 16:38
wsrep_sst_xtrabackup
20.77
KB
-rwxr-xr-x
2021-01-31 16:38
wsrep_sst_xtrabackup-v2
40.73
KB
-rwxr-xr-x
2021-01-31 16:38
x86_64
18.73
KB
-rwxr-xr-x
2018-03-07 18:29
xargs
66.21
KB
-rwxr-xr-x
2017-02-18 15:37
xauth
47.47
KB
-rwxr-xr-x
2014-07-13 08:34
xdg-user-dir
234
B
-rwxr-xr-x
2014-09-19 09:17
xdg-user-dirs-update
18.59
KB
-rwxr-xr-x
2014-09-19 09:17
xsubpp
5.04
KB
-rwxr-xr-x
2020-06-20 17:33
xxd
18.12
KB
-rwxr-xr-x
2019-06-21 04:10
xz
75.38
KB
-rwxr-xr-x
2016-10-08 13:11
xzcat
75.38
KB
-rwxr-xr-x
2016-10-08 13:11
xzcmp
6.48
KB
-rwxr-xr-x
2016-10-08 13:11
xzdiff
6.48
KB
-rwxr-xr-x
2016-10-08 13:11
xzegrep
5.5
KB
-rwxr-xr-x
2016-10-08 13:11
xzfgrep
5.5
KB
-rwxr-xr-x
2016-10-08 13:11
xzgrep
5.5
KB
-rwxr-xr-x
2016-10-08 13:11
xzless
1.76
KB
-rwxr-xr-x
2016-10-08 13:11
xzmore
2.11
KB
-rwxr-xr-x
2016-10-08 13:11
yes
30.73
KB
-rwxr-xr-x
2017-02-22 12:23
zdump
14.42
KB
-rwxr-xr-x
2019-02-06 21:17
zipdetails
47.36
KB
-rwxr-xr-x
2020-06-20 17:33
Save
Rename
#!/usr/bin/perl eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' if $running_under_some_shell; # # # c2ph (aka pstruct) # Tom Christiansen, <tchrist@convex.com> # # As pstruct, dump C structures as generated from 'cc -g -S' stabs. # As c2ph, do this PLUS generate perl code for getting at the structures. # # See the usage message for more. If this isn't enough, read the code. # =head1 NAME c2ph, pstruct - Dump C structures as generated from C<cc -g -S> stabs =head1 SYNOPSIS c2ph [-dpnP] [var=val] [files ...] =head2 OPTIONS Options: -w wide; short for: type_width=45 member_width=35 offset_width=8 -x hex; short for: offset_fmt=x offset_width=08 size_fmt=x \ size_width=04 -n do not generate perl code (default when invoked as pstruct) -p generate perl code (default when invoked as c2ph) -v generate perl code, with C decls as comments -i do NOT recompute sizes for intrinsic datatypes -a dump information on intrinsics also -t trace execution -d spew reams of debugging output -slist give comma-separated list a structures to dump =head1 DESCRIPTION The following is the old c2ph.doc documentation by Tom Christiansen <tchrist@perl.com> Date: 25 Jul 91 08:10:21 GMT Once upon a time, I wrote a program called pstruct. It was a perl program that tried to parse out C structures and display their member offsets for you. This was especially useful for people looking at binary dumps or poking around the kernel. Pstruct was not a pretty program. Neither was it particularly robust. The problem, you see, was that the C compiler was much better at parsing C than I could ever hope to be. So I got smart: I decided to be lazy and let the C compiler parse the C, which would spit out debugger stabs for me to read. These were much easier to parse. It's still not a pretty program, but at least it's more robust. Pstruct takes any .c or .h files, or preferably .s ones, since that's the format it is going to massage them into anyway, and spits out listings like this: struct tty { int tty.t_locker 000 4 int tty.t_mutex_index 004 4 struct tty * tty.t_tp_virt 008 4 struct clist tty.t_rawq 00c 20 int tty.t_rawq.c_cc 00c 4 int tty.t_rawq.c_cmax 010 4 int tty.t_rawq.c_cfx 014 4 int tty.t_rawq.c_clx 018 4 struct tty * tty.t_rawq.c_tp_cpu 01c 4 struct tty * tty.t_rawq.c_tp_iop 020 4 unsigned char * tty.t_rawq.c_buf_cpu 024 4 unsigned char * tty.t_rawq.c_buf_iop 028 4 struct clist tty.t_canq 02c 20 int tty.t_canq.c_cc 02c 4 int tty.t_canq.c_cmax 030 4 int tty.t_canq.c_cfx 034 4 int tty.t_canq.c_clx 038 4 struct tty * tty.t_canq.c_tp_cpu 03c 4 struct tty * tty.t_canq.c_tp_iop 040 4 unsigned char * tty.t_canq.c_buf_cpu 044 4 unsigned char * tty.t_canq.c_buf_iop 048 4 struct clist tty.t_outq 04c 20 int tty.t_outq.c_cc 04c 4 int tty.t_outq.c_cmax 050 4 int tty.t_outq.c_cfx 054 4 int tty.t_outq.c_clx 058 4 struct tty * tty.t_outq.c_tp_cpu 05c 4 struct tty * tty.t_outq.c_tp_iop 060 4 unsigned char * tty.t_outq.c_buf_cpu 064 4 unsigned char * tty.t_outq.c_buf_iop 068 4 (*int)() tty.t_oproc_cpu 06c 4 (*int)() tty.t_oproc_iop 070 4 (*int)() tty.t_stopproc_cpu 074 4 (*int)() tty.t_stopproc_iop 078 4 struct thread * tty.t_rsel 07c 4 etc. Actually, this was generated by a particular set of options. You can control the formatting of each column, whether you prefer wide or fat, hex or decimal, leading zeroes or whatever. All you need to be able to use this is a C compiler than generates BSD/GCC-style stabs. The B<-g> option on native BSD compilers and GCC should get this for you. To learn more, just type a bogus option, like B<-\?>, and a long usage message will be provided. There are a fair number of possibilities. If you're only a C programmer, than this is the end of the message for you. You can quit right now, and if you care to, save off the source and run it when you feel like it. Or not. But if you're a perl programmer, then for you I have something much more wondrous than just a structure offset printer. You see, if you call pstruct by its other incybernation, c2ph, you have a code generator that translates C code into perl code! Well, structure and union declarations at least, but that's quite a bit. Prior to this point, anyone programming in perl who wanted to interact with C programs, like the kernel, was forced to guess the layouts of the C structures, and then hardwire these into his program. Of course, when you took your wonderfully crafted program to a system where the sgtty structure was laid out differently, your program broke. Which is a shame. We've had Larry's h2ph translator, which helped, but that only works on cpp symbols, not real C, which was also very much needed. What I offer you is a symbolic way of getting at all the C structures. I've couched them in terms of packages and functions. Consider the following program: #!/usr/local/bin/perl require 'syscall.ph'; require 'sys/time.ph'; require 'sys/resource.ph'; $ru = "\0" x &rusage'sizeof(); syscall(&SYS_getrusage, &RUSAGE_SELF, $ru) && die "getrusage: $!"; @ru = unpack($t = &rusage'typedef(), $ru); $utime = $ru[ &rusage'ru_utime + &timeval'tv_sec ] + ($ru[ &rusage'ru_utime + &timeval'tv_usec ]) / 1e6; $stime = $ru[ &rusage'ru_stime + &timeval'tv_sec ] + ($ru[ &rusage'ru_stime + &timeval'tv_usec ]) / 1e6; printf "you have used %8.3fs+%8.3fu seconds.\n", $utime, $stime; As you see, the name of the package is the name of the structure. Regular fields are just their own names. Plus the following accessor functions are provided for your convenience: struct This takes no arguments, and is merely the number of first- level elements in the structure. You would use this for indexing into arrays of structures, perhaps like this $usec = $u[ &user'u_utimer + (&ITIMER_VIRTUAL * &itimerval'struct) + &itimerval'it_value + &timeval'tv_usec ]; sizeof Returns the bytes in the structure, or the member if you pass it an argument, such as &rusage'sizeof(&rusage'ru_utime) typedef This is the perl format definition for passing to pack and unpack. If you ask for the typedef of a nothing, you get the whole structure, otherwise you get that of the member you ask for. Padding is taken care of, as is the magic to guarantee that a union is unpacked into all its aliases. Bitfields are not quite yet supported however. offsetof This function is the byte offset into the array of that member. You may wish to use this for indexing directly into the packed structure with vec() if you're too lazy to unpack it. typeof Not to be confused with the typedef accessor function, this one returns the C type of that field. This would allow you to print out a nice structured pretty print of some structure without knoning anything about it beforehand. No args to this one is a noop. Someday I'll post such a thing to dump out your u structure for you. The way I see this being used is like basically this: % h2ph <some_include_file.h > /usr/lib/perl/tmp.ph % c2ph some_include_file.h >> /usr/lib/perl/tmp.ph % install It's a little tricker with c2ph because you have to get the includes right. I can't know this for your system, but it's not usually too terribly difficult. The code isn't pretty as I mentioned -- I never thought it would be a 1000- line program when I started, or I might not have begun. :-) But I would have been less cavalier in how the parts of the program communicated with each other, etc. It might also have helped if I didn't have to divine the makeup of the stabs on the fly, and then account for micro differences between my compiler and gcc. Anyway, here it is. Should run on perl v4 or greater. Maybe less. --tom =cut $RCSID = '$Id: c2ph,v 1.7 95/10/28 10:41:47 tchrist Exp Locker: tchrist $'; BEGIN { pop @INC if $INC[-1] eq '.' } use File::Temp; ###################################################################### # some handy data definitions. many of these can be reset later. $bitorder = 'b'; # ascending; set to B for descending bit fields %intrinsics = %template = ( 'char', 'c', 'unsigned char', 'C', 'short', 's', 'short int', 's', 'unsigned short', 'S', 'unsigned short int', 'S', 'short unsigned int', 'S', 'int', 'i', 'unsigned int', 'I', 'long', 'l', 'long int', 'l', 'unsigned long', 'L', 'unsigned long', 'L', 'long unsigned int', 'L', 'unsigned long int', 'L', 'long long', 'q', 'long long int', 'q', 'unsigned long long', 'Q', 'unsigned long long int', 'Q', 'float', 'f', 'double', 'd', 'pointer', 'p', 'null', 'x', 'neganull', 'X', 'bit', $bitorder, ); &buildscrunchlist; delete $intrinsics{'neganull'}; delete $intrinsics{'bit'}; delete $intrinsics{'null'}; # use -s to recompute sizes %sizeof = ( 'char', '1', 'unsigned char', '1', 'short', '2', 'short int', '2', 'unsigned short', '2', 'unsigned short int', '2', 'short unsigned int', '2', 'int', '4', 'unsigned int', '4', 'long', '4', 'long int', '4', 'unsigned long', '4', 'unsigned long int', '4', 'long unsigned int', '4', 'long long', '8', 'long long int', '8', 'unsigned long long', '8', 'unsigned long long int', '8', 'float', '4', 'double', '8', 'pointer', '4', ); ($type_width, $member_width, $offset_width, $size_width) = (20, 20, 6, 5); ($offset_fmt, $size_fmt) = ('d', 'd'); $indent = 2; $CC = 'cc'; $CFLAGS = '-gstabs -S'; $DEFINES = ''; $perl++ if $0 =~ m#/?c2ph$#; use Getopt::Std qw(getopts); use File::Temp 'tempdir'; eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_]+=)(.*)/ && shift; getopts('aixdpvtnws:') || &usage(0); $opt_d && $debug++; $opt_t && $trace++; $opt_p && $perl++; $opt_v && $verbose++; $opt_n && ($perl = 0); if ($opt_w) { ($type_width, $member_width, $offset_width) = (45, 35, 8); } if ($opt_x) { ($offset_fmt, $offset_width, $size_fmt, $size_width) = ( 'x', '08', 'x', 04 ); } eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_]+=)(.*)/ && shift; sub PLUMBER { select(STDERR); print "oops, apparent pager foulup\n"; $isatty++; &usage(1); } sub usage { local($oops) = @_; unless (-t STDOUT) { select(STDERR); } elsif (!$oops) { $isatty++; $| = 1; print "hit <RETURN> for further explanation: "; <STDIN>; open (PIPE, "|". ($ENV{PAGER} || 'more')); $SIG{PIPE} = PLUMBER; select(PIPE); } print "usage: $0 [-dpnP] [var=val] [files ...]\n"; exit unless $isatty; print <<EOF; Options: -w wide; short for: type_width=45 member_width=35 offset_width=8 -x hex; short for: offset_fmt=x offset_width=08 size_fmt=x size_width=04 -n do not generate perl code (default when invoked as pstruct) -p generate perl code (default when invoked as c2ph) -v generate perl code, with C decls as comments -i do NOT recompute sizes for intrinsic datatypes -a dump information on intrinsics also -t trace execution -d spew reams of debugging output -slist give comma-separated list a structures to dump Var Name Default Value Meaning EOF &defvar('CC', 'which_compiler to call'); &defvar('CFLAGS', 'how to generate *.s files with stabs'); &defvar('DEFINES','any extra cflags or cpp defines, like -I, -D, -U'); print "\n"; &defvar('type_width', 'width of type field (column 1)'); &defvar('member_width', 'width of member field (column 2)'); &defvar('offset_width', 'width of offset field (column 3)'); &defvar('size_width', 'width of size field (column 4)'); print "\n"; &defvar('offset_fmt', 'sprintf format type for offset'); &defvar('size_fmt', 'sprintf format type for size'); print "\n"; &defvar('indent', 'how far to indent each nesting level'); print <<'EOF'; If any *.[ch] files are given, these will be catted together into a temporary *.c file and sent through: $CC $CFLAGS $DEFINES and the resulting *.s groped for stab information. If no files are supplied, then stdin is read directly with the assumption that it contains stab information. All other lines will be ignored. At most one *.s file should be supplied. EOF close PIPE; exit 1; } sub defvar { local($var, $msg) = @_; printf "%-16s%-15s %s\n", $var, eval "\$$var", $msg; } sub safedir { $SAFEDIR = File::Temp::tempdir("c2ph.XXXXXX", TMPDIR => 1, CLEANUP => 1) unless (defined($SAFEDIR)); } undef $SAFEDIR; $recurse = 1; if (@ARGV) { if (grep(!/\.[csh]$/,@ARGV)) { warn "Only *.[csh] files expected!\n"; &usage; } elsif (grep(/\.s$/,@ARGV)) { if (@ARGV > 1) { warn "Only one *.s file allowed!\n"; &usage; } } elsif (@ARGV == 1 && $ARGV[0] =~ /\.c$/) { local($dir, $file) = $ARGV[0] =~ m#(.*/)?(.*)$#; $chdir = "cd $dir && " if $dir; &system("$chdir$CC $CFLAGS $DEFINES $file") && exit 1; $ARGV[0] =~ s/\.c$/.s/; } else { &safedir; $TMP = "$SAFEDIR/c2ph.$$.c"; &system("cat @ARGV > $TMP") && exit 1; &system("cd $SAFEDIR && $CC $CFLAGS $DEFINES $TMP") && exit 1; unlink $TMP; $TMP =~ s/\.c$/.s/; @ARGV = ($TMP); } } if ($opt_s) { for (split(/[\s,]+/, $opt_s)) { $interested{$_}++; } } $| = 1 if $debug; main: { if ($trace) { if (-t && !@ARGV) { print STDERR "reading from your keyboard: "; } else { print STDERR "reading from " . (@ARGV ? "@ARGV" : "<STDIN>").": "; } } STAB: while (<>) { if ($trace && !($. % 10)) { $lineno = $..''; print STDERR $lineno, "\b" x length($lineno); } next unless /^\s*\.stabs\s+/; $line = $_; s/^\s*\.stabs\s+//; if (s/\\\\"[d,]+$//) { $saveline .= $line; $savebar = $_; next STAB; } if ($saveline) { s/^"//; $_ = $savebar . $_; $line = $saveline; } &stab; $savebar = $saveline = undef; } print STDERR "$.\n" if $trace; unlink $TMP if $TMP; &compute_intrinsics if $perl && !$opt_i; print STDERR "resolving types\n" if $trace; &resolve_types; &adjust_start_addrs; $sum = 2 + $type_width + $member_width; $pmask1 = "%-${type_width}s %-${member_width}s"; $pmask2 = "%-${sum}s %${offset_width}${offset_fmt}%s %${size_width}${size_fmt}%s"; if ($perl) { # resolve template -- should be in stab define order, but even this isn't enough. print STDERR "\nbuilding type templates: " if $trace; for $i (reverse 0..$#type) { next unless defined($name = $type[$i]); next unless defined $struct{$name}; ($iname = $name) =~ s/\..*//; $build_recursed = 0; &build_template($name) unless defined $template{&psou($name)} || $opt_s && !$interested{$iname}; } print STDERR "\n\n" if $trace; } print STDERR "dumping structs: " if $trace; local($iam); foreach $name (sort keys %struct) { ($iname = $name) =~ s/\..*//; next if $opt_s && !$interested{$iname}; print STDERR "$name " if $trace; undef @sizeof; undef @typedef; undef @offsetof; undef @indices; undef @typeof; undef @fieldnames; $mname = &munge($name); $fname = &psou($name); print "# " if $perl && $verbose; $pcode = ''; print "$fname {\n" if !$perl || $verbose; $template{$fname} = &scrunch($template{$fname}) if $perl; &pstruct($name,$name,0); print "# " if $perl && $verbose; print "}\n" if !$perl || $verbose; print "\n" if $perl && $verbose; if ($perl) { print "$pcode"; printf("\nsub %-32s { %4d; }\n\n", "${mname}'struct", $countof{$name}); print <<EOF; sub ${mname}'typedef { local(\$${mname}'index) = shift; defined \$${mname}'index ? \$${mname}'typedef[\$${mname}'index] : \$${mname}'typedef; } EOF print <<EOF; sub ${mname}'sizeof { local(\$${mname}'index) = shift; defined \$${mname}'index ? \$${mname}'sizeof[\$${mname}'index] : \$${mname}'sizeof; } EOF print <<EOF; sub ${mname}'offsetof { local(\$${mname}'index) = shift; defined \$${mname}index ? \$${mname}'offsetof[\$${mname}'index] : \$${mname}'sizeof; } EOF print <<EOF; sub ${mname}'typeof { local(\$${mname}'index) = shift; defined \$${mname}index ? \$${mname}'typeof[\$${mname}'index] : '$name'; } EOF print <<EOF; sub ${mname}'fieldnames { \@${mname}'fieldnames; } EOF $iam = ($isastruct{$name} && 's') || ($isaunion{$name} && 'u'); print <<EOF; sub ${mname}'isastruct { '$iam'; } EOF print "\$${mname}'typedef = '" . &scrunch($template{$fname}) . "';\n"; print "\$${mname}'sizeof = $sizeof{$name};\n\n"; print "\@${mname}'indices = (", &squishseq(@indices), ");\n"; print "\n"; print "\@${mname}'typedef[\@${mname}'indices] = (", join("\n\t", '', @typedef), "\n );\n\n"; print "\@${mname}'sizeof[\@${mname}'indices] = (", join("\n\t", '', @sizeof), "\n );\n\n"; print "\@${mname}'offsetof[\@${mname}'indices] = (", join("\n\t", '', @offsetof), "\n );\n\n"; print "\@${mname}'typeof[\@${mname}'indices] = (", join("\n\t", '', @typeof), "\n );\n\n"; print "\@${mname}'fieldnames[\@${mname}'indices] = (", join("\n\t", '', @fieldnames), "\n );\n\n"; $template_printed{$fname}++; $size_printed{$fname}++; } print "\n"; } print STDERR "\n" if $trace; unless ($perl && $opt_a) { print "\n1;\n" if $perl; exit; } foreach $name (sort bysizevalue keys %intrinsics) { next if $size_printed{$name}; print '$',&munge($name),"'sizeof = ", $sizeof{$name}, ";\n"; } print "\n"; sub bysizevalue { $sizeof{$a} <=> $sizeof{$b}; } foreach $name (sort keys %intrinsics) { print '$',&munge($name),"'typedef = '", $template{$name}, "';\n"; } print "\n1;\n" if $perl; exit; } ######################################################################################## sub stab { next unless $continued || /:[\$\w]+(\(\d+,\d+\))?=[\*\$\w]+/; # (\d+,\d+) is for sun s/"// || next; s/",([x\d]+),([x\d]+),([x\d]+),.*// || next; next if /^\s*$/; $size = $3 if $3; $_ = $continued . $_ if length($continued); if (s/\\\\$//) { # if last 2 chars of string are '\\' then stab is continued # in next stab entry chop; $continued = $_; next; } $continued = ''; $line = $_; if (($name, $pdecl) = /^([\$ \w]+):[tT]((\d+)(=[rufs*](\d+))+)$/) { print "$name is a typedef for some funky pointers: $pdecl\n" if $debug; &pdecl($pdecl); next; } if (/(([ \w]+):t(\d+|\(\d+,\d+\)))=r?(\d+|\(\d+,\d+\))(;\d+;\d+;)?/) { local($ident) = $2; push(@intrinsics, $ident); $typeno = &typeno($3); $type[$typeno] = $ident; print STDERR "intrinsic $ident in new type $typeno\n" if $debug; next; } if (($name, $typeordef, $typeno, $extra, $struct, $_) = /^([\$ \w]+):([ustT])(\d+|\(\d+,\d+\))(=[rufs*](\d+))?(.*)$/) { $typeno = &typeno($typeno); # sun foolery } elsif (/^[\$\w]+:/) { next; # variable } else { warn "can't grok stab: <$_> in: $line " if $_; next; } #warn "got size $size for $name\n"; $sizeof{$name} = $size if $size; s/;[-\d]*;[-\d]*;$//; # we don't care about ranges $typenos{$name} = $typeno; unless (defined $type[$typeno]) { &panic("type 0??") unless $typeno; $type[$typeno] = $name unless defined $type[$typeno]; printf "new type $typeno is $name" if $debug; if ($extra =~ /\*/ && defined $type[$struct]) { print ", a typedef for a pointer to " , $type[$struct] if $debug; } } else { printf "%s is type %d", $name, $typeno if $debug; print ", a typedef for " , $type[$typeno] if $debug; } print "\n" if $debug; #next unless $extra =~ /[su*]/; #$type[$struct] = $name; if ($extra =~ /[us*]/) { &sou($name, $extra); $_ = &sdecl($name, $_, 0); } elsif (/^=ar/) { print "it's a bare array typedef -- that's pretty sick\n" if $debug; $_ = "$typeno$_"; $scripts = ''; $_ = &adecl($_,1); } elsif (s/((\w+):t(\d+|\(\d+,\d+\)))?=r?(;\d+;\d+;)?//) { # the ?'s are for gcc push(@intrinsics, $2); $typeno = &typeno($3); $type[$typeno] = $2; print STDERR "intrinsic $2 in new type $typeno\n" if $debug; } elsif (s/^=e//) { # blessed be thy compiler; mine won't do this &edecl; } else { warn "Funny remainder for $name on line $_ left in $line " if $_; } } sub typeno { # sun thinks types are (0,27) instead of just 27 local($_) = @_; s/\(\d+,(\d+)\)/$1/; $_; } sub pstruct { local($what,$prefix,$base) = @_; local($field, $fieldname, $typeno, $count, $offset, $entry); local($fieldtype); local($type, $tname); local($mytype, $mycount, $entry2); local($struct_count) = 0; local($pad, $revpad, $length, $prepad, $lastoffset, $lastlength, $fmt); local($bits,$bytes); local($template); local($mname) = &munge($name); sub munge { local($_) = @_; s/[\s\$\.]/_/g; $_; } local($sname) = &psou($what); $nesting++; for $field (split(/;/, $struct{$what})) { $pad = $prepad = 0; $entry = ''; ($fieldname, $typeno, $count, $offset, $length) = split(/,/, $field); $type = $type[$typeno]; $type =~ /([^[]*)(\[.*\])?/; $mytype = $1; $count .= $2; $fieldtype = &psou($mytype); local($fname) = &psou($name); if ($build_templates) { $pad = ($offset - ($lastoffset + $lastlength))/8 if defined $lastoffset; if (! $finished_template{$sname}) { if ($isaunion{$what}) { $template{$sname} .= 'X' x $revpad . ' ' if $revpad; } else { $template{$sname} .= 'x' x $pad . ' ' if $pad; } } $template = &fetch_template($type); &repeat_template($template,$count); if (! $finished_template{$sname}) { $template{$sname} .= $template; } $revpad = $length/8 if $isaunion{$what}; ($lastoffset, $lastlength) = ($offset, $length); } else { print '# ' if $perl && $verbose; $entry = sprintf($pmask1, ' ' x ($nesting * $indent) . $fieldtype, "$prefix.$fieldname" . $count); $entry =~ s/(\*+)( )/$2$1/; printf $pmask2, $entry, ($base+$offset)/8, ($bits = ($base+$offset)%8) ? ".$bits" : " ", $length/8, ($bits = $length % 8) ? ".$bits": "" if !$perl || $verbose; if ($perl) { $template = &fetch_template($type); &repeat_template($template,$count); } if ($perl && $nesting == 1) { push(@sizeof, int($length/8) .",\t# $fieldname"); push(@offsetof, int($offset/8) .",\t# $fieldname"); local($little) = &scrunch($template); push(@typedef, "'$little', \t# $fieldname"); $type =~ s/(struct|union) //; push(@typeof, "'$mytype" . ($count ? $count : '') . "',\t# $fieldname"); push(@fieldnames, "'$fieldname',"); } print ' ', ' ' x $indent x $nesting, $template if $perl && $verbose; print "\n" if !$perl || $verbose; } if ($perl) { local($mycount) = defined $struct{$mytype} ? $countof{$mytype} : 1; $mycount *= &scripts2count($count) if $count; if ($nesting==1 && !$build_templates) { $pcode .= sprintf("sub %-32s { %4d; }\n", "${mname}'${fieldname}", $struct_count); push(@indices, $struct_count); } $struct_count += $mycount; } &pstruct($type, "$prefix.$fieldname", $base+$offset) if $recurse && defined $struct{$type}; } $countof{$what} = $struct_count unless defined $countof{$whati}; $template{$sname} .= '$' if $build_templates; $finished_template{$sname}++; if ($build_templates && !defined $sizeof{$name}) { local($fmt) = &scrunch($template{$sname}); print STDERR "no size for $name, punting with $fmt..." if $debug; eval '$sizeof{$name} = length(pack($fmt, ()))'; if ($@) { chop $@; warn "couldn't get size for \$name: $@"; } else { print STDERR $sizeof{$name}, "\n" if $debUg; } } --$nesting; } sub psize { local($me) = @_; local($amstruct) = $struct{$me} ? 'struct ' : ''; print '$sizeof{\'', $amstruct, $me, '\'} = '; printf "%d;\n", $sizeof{$me}; } sub pdecl { local($pdecl) = @_; local(@pdecls); local($tname); warn "pdecl: $pdecl\n" if $debug; $pdecl =~ s/\(\d+,(\d+)\)/$1/g; $pdecl =~ s/\*//g; @pdecls = split(/=/, $pdecl); $typeno = $pdecls[0]; $tname = pop @pdecls; if ($tname =~ s/^f//) { $tname = "$tname&"; } #else { $tname = "$tname*"; } for (reverse @pdecls) { $tname .= s/^f// ? "&" : "*"; #$tname =~ s/^f(.*)/$1&/; print "type[$_] is $tname\n" if $debug; $type[$_] = $tname unless defined $type[$_]; } } sub adecl { ($arraytype, $unknown, $lower, $upper) = (); #local($typeno); # global $typeno, @type local($_, $typedef) = @_; while (s/^((\d+|\(\d+,\d+\))=)?ar(\d+|\(\d+,\d+\));//) { ($arraytype, $unknown) = ($2, $3); $arraytype = &typeno($arraytype); $unknown = &typeno($unknown); if (s/^(\d+);(\d+);//) { ($lower, $upper) = ($1, $2); $scripts .= '[' . ($upper+1) . ']'; } else { warn "can't find array bounds: $_"; } } if (s/^([(,)\d*f=]*),(\d+),(\d+);//) { ($start, $length) = ($2, $3); $whatis = $1; if ($whatis =~ /^(\d+|\(\d+,\d+\))=/) { $typeno = &typeno($1); &pdecl($whatis); } else { $typeno = &typeno($whatis); } } elsif (s/^(\d+)(=[*suf]\d*)//) { local($whatis) = $2; if ($whatis =~ /[f*]/) { &pdecl($whatis); } elsif ($whatis =~ /[su]/) { # print "$prefix.$fieldname is an array$scripts anon structs; disgusting\n" if $debug; #$type[$typeno] = $name unless defined $type[$typeno]; ##printf "new type $typeno is $name" if $debug; $typeno = $1; $type[$typeno] = "$prefix.$fieldname"; local($name) = $type[$typeno]; &sou($name, $whatis); $_ = &sdecl($name, $_, $start+$offset); 1; $start = $start{$name}; $offset = $sizeof{$name}; $length = $offset; } else { warn "what's this? $whatis in $line "; } } elsif (/^\d+$/) { $typeno = $_; } else { warn "bad array stab: $_ in $line "; next STAB; } #local($wasdef) = defined($type[$typeno]) && $debug; #if ($typedef) { #print "redefining $type[$typeno] to " if $wasdef; #$type[$typeno] = "$whatis$scripts"; # unless defined $type[$typeno]; #print "$type[$typeno]\n" if $wasdef; #} else { #$type[$arraytype] = $type[$typeno] unless defined $type[$arraytype]; #} $type[$arraytype] = "$type[$typeno]$scripts" if defined $type[$typeno]; print "type[$arraytype] is $type[$arraytype]\n" if $debug; print "$prefix.$fieldname is an array of $type[$arraytype]\n" if $debug; $_; } sub sdecl { local($prefix, $_, $offset) = @_; local($fieldname, $scripts, $type, $arraytype, $unknown, $whatis, $pdecl, $upper,$lower, $start,$length) = (); local($typeno,$sou); SFIELD: while (/^([^;]+);/) { $scripts = ''; warn "sdecl $_\n" if $debug; if (s/^([\$\w]+)://) { $fieldname = $1; } elsif (s/(\d+)=([us])(\d+|\(\d+,\d+\))//) { # $typeno = &typeno($1); $type[$typeno] = "$prefix.$fieldname"; local($name) = "$prefix.$fieldname"; &sou($name,$2); $_ = &sdecl("$prefix.$fieldname", $_, $start+$offset); $start = $start{$name}; $offset += $sizeof{$name}; #print "done with anon, start is $start, offset is $offset\n"; #next SFIELD; } else { warn "weird field $_ of $line" if $debug; next STAB; #$fieldname = &gensym; #$_ = &sdecl("$prefix.$fieldname", $_, $start+$offset); } if (/^(\d+|\(\d+,\d+\))=ar/) { $_ = &adecl($_); } elsif (s/^(\d+|\(\d+,\d+\))?,(\d+),(\d+);//) { ($start, $length) = ($2, $3); &panic("no length?") unless $length; $typeno = &typeno($1) if $1; } elsif (s/^(\d+)=xs\w+:,(\d+),(\d+);//) { ($start, $length) = ($2, $3); &panic("no length?") unless $length; $typeno = &typeno($1) if $1; } elsif (s/^((\d+|\(\d+,\d+\))(=[*f](\d+|\(\d+,\d+\)))+),(\d+),(\d+);//) { ($pdecl, $start, $length) = ($1,$5,$6); &pdecl($pdecl); } elsif (s/(\d+)=([us])(\d+|\(\d+,\d+\))//) { # the dratted anon struct ($typeno, $sou) = ($1, $2); $typeno = &typeno($typeno); if (defined($type[$typeno])) { warn "now how did we get type $1 in $fieldname of $line?"; } else { print "anon type $typeno is $prefix.$fieldname\n" if $debug; $type[$typeno] = "$prefix.$fieldname" unless defined $type[$typeno]; }; local($name) = "$prefix.$fieldname"; &sou($name,$sou); print "anon ".($isastruct{$name}) ? "struct":"union"." for $prefix.$fieldname\n" if $debug; $type[$typeno] = "$prefix.$fieldname"; $_ = &sdecl("$prefix.$fieldname", $_, $start+$offset); $start = $start{$name}; $length = $sizeof{$name}; } else { warn "can't grok stab for $name ($_) in line $line "; next STAB; } &panic("no length for $prefix.$fieldname") unless $length; $struct{$name} .= join(',', $fieldname, $typeno, $scripts, $start, $length) . ';'; } if (s/;\d*,(\d+),(\d+);//) { local($start, $size) = ($1, $2); $sizeof{$prefix} = $size; print "start of $prefix is $start, size of $sizeof{$prefix}\n" if $debug; $start{$prefix} = $start; } $_; } sub edecl { s/;$//; $enum{$name} = $_; $_ = ''; } sub resolve_types { local($sou); for $i (0 .. $#type) { next unless defined $type[$i]; $_ = $type[$i]; unless (/\d/) { print "type[$i] $type[$i]\n" if $debug; next; } print "type[$i] $_ ==> " if $debug; s/^(\d+)(\**)\&\*(\**)/"$2($3".&type($1) . ')()'/e; s/^(\d+)\&/&type($1)/e; s/^(\d+)/&type($1)/e; s/(\*+)([^*]+)(\*+)/$1$3$2/; s/\((\*+)(\w+)(\*+)\)/$3($1$2)/; s/^(\d+)([\*\[].*)/&type($1).$2/e; #s/(\d+)(\*|(\[[\[\]\d\*]+]\])+)/&type($1).$2/ge; $type[$i] = $_; print "$_\n" if $debug; } } sub type { &psou($type[$_[0]] || "<UNDEFINED>"); } sub adjust_start_addrs { for (sort keys %start) { ($basename = $_) =~ s/\.[^.]+$//; $start{$_} += $start{$basename}; print "start: $_ @ $start{$_}\n" if $debug; } } sub sou { local($what, $_) = @_; /u/ && $isaunion{$what}++; /s/ && $isastruct{$what}++; } sub psou { local($what) = @_; local($prefix) = ''; if ($isaunion{$what}) { $prefix = 'union '; } elsif ($isastruct{$what}) { $prefix = 'struct '; } $prefix . $what; } sub scrunch { local($_) = @_; return '' if $_ eq ''; study; s/\$//g; s/ / /g; 1 while s/(\w) \1/$1$1/g; # i wanna say this, but perl resists my efforts: # s/(\w)(\1+)/$2 . length($1)/ge; &quick_scrunch; s/ $//; $_; } sub buildscrunchlist { $scrunch_code = "sub quick_scrunch {\n"; for (values %intrinsics) { $scrunch_code .= "\ts/(${_}{2,})/'$_' . length(\$1)/ge;\n"; } $scrunch_code .= "}\n"; print "$scrunch_code" if $debug; eval $scrunch_code; &panic("can't eval scrunch_code $@ \nscrunch_code") if $@; } sub fetch_template { local($mytype) = @_; local($fmt); local($count) = 1; &panic("why do you care?") unless $perl; if ($mytype =~ s/(\[\d+\])+$//) { $count .= $1; } if ($mytype =~ /\*/) { $fmt = $template{'pointer'}; } elsif (defined $template{$mytype}) { $fmt = $template{$mytype}; } elsif (defined $struct{$mytype}) { if (!defined $template{&psou($mytype)}) { &build_template($mytype) unless $mytype eq $name; } elsif ($template{&psou($mytype)} !~ /\$$/) { #warn "incomplete template for $mytype\n"; } $fmt = $template{&psou($mytype)} || '?'; } else { warn "unknown fmt for $mytype\n"; $fmt = '?'; } $fmt x $count . ' '; } sub compute_intrinsics { &safedir; local($TMP) = "$SAFEDIR/c2ph-i.$$.c"; open (TMP, ">$TMP") || die "can't open $TMP: $!"; select(TMP); print STDERR "computing intrinsic sizes: " if $trace; undef %intrinsics; print <<'EOF'; main() { char *mask = "%d %s\n"; EOF for $type (@intrinsics) { next if !$type || $type eq 'void' || $type =~ /complex/; # sun stuff print <<"EOF"; printf(mask,sizeof($type), "$type"); EOF } print <<'EOF'; printf(mask,sizeof(char *), "pointer"); exit(0); } EOF close TMP; select(STDOUT); open(PIPE, "cd $SAFEDIR && $CC $TMP && $SAFEDIR/a.out|"); while (<PIPE>) { chop; split(' ',$_,2);; print "intrinsic $_[1] is size $_[0]\n" if $debug; $sizeof{$_[1]} = $_[0]; $intrinsics{$_[1]} = $template{$_[0]}; } close(PIPE) || die "couldn't read intrinsics!"; unlink($TMP, "$SAFEDIR/a.out"); print STDERR "done\n" if $trace; } sub scripts2count { local($_) = @_; s/^\[//; s/\]$//; s/\]\[/*/g; $_ = eval; &panic("$_: $@") if $@; $_; } sub system { print STDERR "@_\n" if $trace; system @_; } sub build_template { local($name) = @_; &panic("already got a template for $name") if defined $template{$name}; local($build_templates) = 1; local($lparen) = '(' x $build_recursed; local($rparen) = ')' x $build_recursed; print STDERR "$lparen$name$rparen " if $trace; $build_recursed++; &pstruct($name,$name,0); print STDERR "TEMPLATE for $name is ", $template{&psou($name)}, "\n" if $debug; --$build_recursed; } sub panic { select(STDERR); print "\npanic: @_\n"; exit 1 if $] <= 4.003; # caller broken local($i,$_); local($p,$f,$l,$s,$h,$a,@a,@sub); for ($i = 0; ($p,$f,$l,$s,$h,$w) = caller($i); $i++) { @a = @DB'args; for (@a) { if (/^StB\000/ && length($_) == length($_main{'_main'})) { $_ = sprintf("%s",$_); } else { s/'/\\'/g; s/([^\0]*)/'$1'/ unless /^-?[\d.]+$/; s/([\200-\377])/sprintf("M-%c",ord($1)&0177)/eg; s/([\0-\37\177])/sprintf("^%c",ord($1)^64)/eg; } } $w = $w ? '@ = ' : '$ = '; $a = $h ? '(' . join(', ', @a) . ')' : ''; push(@sub, "$w&$s$a from file $f line $l\n"); last if $signal; } for ($i=0; $i <= $#sub; $i++) { last if $signal; print $sub[$i]; } exit 1; } sub squishseq { local($num); local($last) = -1e8; local($string); local($seq) = '..'; while (defined($num = shift)) { if ($num == ($last + 1)) { $string .= $seq unless $inseq++; $last = $num; next; } elsif ($inseq) { $string .= $last unless $last == -1e8; } $string .= ',' if defined $string; $string .= $num; $last = $num; $inseq = 0; } $string .= $last if $inseq && $last != -e18; $string; } sub repeat_template { # local($template, $scripts) = @_; have to change caller's values if ( $_[1] ) { local($ncount) = &scripts2count($_[1]); if ($_[0] =~ /^\s*c\s*$/i) { $_[0] = "A$ncount "; $_[1] = ''; } else { $_[0] = $template x $ncount; } } }