예제 #1
0
    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
예제 #2
0
    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
예제 #5
0
  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)