def GetSectionContent(self, options, sections): arch = {32: '-Mi386', 64: '-Mx86-64'}[options.bits] data = ''.join(test_format.ParseHex(sections['hex'])) # TODO(shcherbina): get rid of custom prefix once # https://code.google.com/p/nativeclient/issues/detail?id=3631 # is actually fixed. tmp = tempfile.NamedTemporaryFile(prefix='tmprdfa_', mode='wb', delete=False) try: tmp.write(data) tmp.close() objdump_proc = subprocess.Popen([ options.objdump, '-mi386', arch, '--target=binary', '--disassemble-all', '--disassemble-zeroes', '--insn-width=15', tmp.name ], stdout=subprocess.PIPE) result = ''.join(objdump_parser.SkipHeader(objdump_proc.stdout)) return_code = objdump_proc.wait() assert return_code == 0, 'error running objdump' finally: tmp.close() os.remove(tmp.name) return result
def GetSectionContent(self, options, hex_content): arch = {32: '-Mi386', 64: '-Mx86-64'}[options.bits] data = ''.join(test_format.ParseHex(hex_content)) tmp = tempfile.NamedTemporaryFile(mode='wb', delete=False) try: tmp.write(data) tmp.close() objdump_proc = subprocess.Popen([ options.objdump, '-mi386', arch, '--target=binary', '--disassemble-all', '--disassemble-zeroes', '--insn-width=15', tmp.name ], stdout=subprocess.PIPE) result = ''.join(objdump_parser.SkipHeader(objdump_proc.stdout)) return_code = objdump_proc.wait() assert return_code == 0, 'error running objdump' finally: tmp.close() os.remove(tmp.name) return result
def GetSectionContent(self, options, hex_content): data_chunks = list(test_format.ParseHex(hex_content)) result = RunRdfaWithNopPatching(options, data_chunks) last_line = re.search('return code: ((-)?\d+)\n$', result) return_code = int(last_line.group(1)) if return_code == 0: print ' Checking jump targets...' CheckValidJumpTargets(options, data_chunks) return result
def GetSectionContent(self, options, sections): data_chunks = list(test_format.ParseHex(sections['hex'])) return_code, stdout = RunRdfaValidator(options, ''.join(data_chunks)) result = ''.join('%x: %s\n' % (offset, message) for offset, message in ParseRdfaMessages(stdout)) result += 'return code: %d\n' % return_code if return_code == 0: print ' Checking jump targets...' CheckValidJumpTargets(options, data_chunks) return result
def GetSectionContent(self, options, hex_content): validator.Init(decoder_dll=options.decoder_dll) validator_cls = { 32: spec_val.Validator32, 64: spec_val.Validator64}[options.bits] data = ''.join(test_format.ParseHex(hex_content)) data += '\x90' * (-len(data) % spec.BUNDLE_SIZE) val = validator_cls(data) val.Validate() if val.messages == []: return 'SAFE\n' return ''.join( '%x: %s\n' % (offset, message) for offset, message in val.messages)