linux.py 文件源码

python
阅读 27 收藏 0 点赞 0 评论 0

项目:manticore 作者: trailofbits 项目源码 文件源码
def sys_write(self, fd, buf, count):
        ''' write - send bytes through a file descriptor
          The write system call writes up to count bytes from the buffer pointed
          to by buf to the file descriptor fd. If count is zero, write returns 0
          and optionally sets *tx_bytes to zero.

          :param fd            a valid file descriptor
          :param buf           a memory buffer
          :param count         number of bytes to send
          :return: 0          Success
                    EBADF      fd is not a valid file descriptor or is not open.
                    EFAULT     buf or tx_bytes points to an invalid address.
        '''
        data = []
        cpu = self.current
        if count != 0:
            try:
                write_fd = self._get_fd(fd)
            except BadFd:
                logger.error("WRITE: Not valid file descriptor. Returning EBADFD %d", fd)
                return -errno.EBADF

            # TODO check count bytes from buf
            if buf not in cpu.memory or buf + count not in cpu.memory:
                logger.debug("WRITE: buf points to invalid address. Returning EFAULT")
                return -errno.EFAULT

            if fd > 2 and write_fd.is_full():
                cpu.PC -= cpu.instruction.size
                self.wait([], [fd], None)
                raise RestartSyscall()

            data = cpu.read_bytes(buf, count)
            data = self._transform_write_data(data)
            write_fd.write(data)

            for line in ''.join([str(x) for x in data]).split('\n'):
                logger.debug("WRITE(%d, 0x%08x, %d) -> <%.48r>",
                             fd,
                             buf,
                             count,
                             line)
            self.syscall_trace.append(("_write", fd, data))
            self.signal_transmit(fd)

        return len(data)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号