from libb43 import *
from sys import stdout
from tempfile import *
+import re
def usage():
print "Usage: b43-fwdump [OPTIONS]"
print ""
print "-h|--help Print this help text"
- print "-p|--phy PHY The PHY to use. For example phy0"
+ print "-p|--phy WIPHY The WIPHY to use. For example phy0."
+ print " Can be omitted, if there is only one device in the system."
print "-b|--binary BIN The firmware binary. This is required for"
print " an instruction dump."
print "-d|--dasmopt OPT Additional options to the disassembler."
stdout.write("\n")
return
-def disassembleText(text):
- input = NamedTemporaryFile()
- output = NamedTemporaryFile()
-
- input.write(text)
- input.flush()
- os.system("b43-dasm %s %s %s --paddr" % (input.name, dasmopt, output.name))
-
- return output.read()
+def dasmLineIsPC(line, pc):
+ m = re.match(r'.*/\*\s+([0-9a-fA-F]+)\s+\*/.*', line, re.DOTALL)
+ if not m:
+ return False
+ linePC = int(m.group(1), 16)
+ return pc == linePC
def makeShortDump(dasm, pc):
dasm = dasm.splitlines()
i = 0
for line in dasm:
- if "/* %03X */" % pc in line:
+ if dasmLineIsPC(line, pc):
break
i += 1
- if i >= len(dasm):
+ else:
return "<Could not find PC in the binary>"
ret = ""
pos = max(i - 8, 0)
end = min(i + 8, len(dasm) - 1)
while pos != end:
ret += dasm[pos]
- if "/* %03X */" % pc in dasm[pos]:
+ if dasmLineIsPC(dasm[pos], pc):
ret += "\t\t<<<<<<<<<<<"
ret += "\n"
pos += 1
except IOError, e:
print "Could not read binary file %s: %s" % (binary, e.strerror)
sys.exit(1)
- dasm = disassembleText(bintext)
+ dasm = Disassembler(bintext, dasmopt + "--paddr").getAsm()
print makeShortDump(dasm, dbg.getPc())
else:
print "<No binary supplied. See --binary option>"