1
0
mirror of https://github.com/DoctorWkt/unix-jun72.git synced 2026-02-03 23:33:35 +00:00

- test out dumpaout.py and adjust it to dump kernel properly.

This commit is contained in:
tim.newsham
2008-05-01 03:26:34 +00:00
parent f7108bb0eb
commit d54a9a7402

View File

@@ -1,5 +1,6 @@
#!/usr/bin/env python
import sys
from struct import pack, unpack
class AOut(object) :
@@ -11,7 +12,8 @@ class AOut(object) :
self.txtd = bin[:self.txt]
self.symd = bin[self.txt : self.txt+self.sym]
self.reld = bin[self.txt+self.sym : self.txt+self.sym+self.rel]
assert len(bin) == self.txt+self.sym+self.rel
# XXX why isnt this true?
#assert len(bin) == self.txt+self.sym+self.rel
def __str__(self) :
return '[a.out mag=%x txt=%x sym=%x rel=%x dat=%x z=%x]' % \
(self.mag, self.txt, self.sym, self.rel, self.dat, self.z)
@@ -20,12 +22,21 @@ def dump(fn, addr) :
f = file(fn, 'rb')
a = AOut(f.read())
f.close()
print a
assert a.rel == 0
vals = unpack("<%dH" % (a.txt/2), a.txtd)
# it appears the a.out header isnt used for the kernel.
# dropping the first 16 bytes causes the tables in u0.s to
# line up with the addresses they were assigned...
vals = vals[8:]
for n,v in enumerate(vals) :
print 'dep cpu %o %06o' % (addr+n*2, v)
print 'go 400'
# XXX just an example.
dump('/tmp/s2/bin/ls', 02000)
#dump('/tmp/s2/bin/ls', 02000)
for fn in sys.argv[1:] :
dump(fn, 0)