示例#1
0
static int __close(RIODesc *desc) {
	int pid, fd;
	if (!desc || !desc->data)
		return -1;
	pid = RIOPTRACE_PID (desc);
	fd = RIOPTRACE_FD (desc);
	if (fd!=-1) close (fd);
	free (desc->data);
	desc->data = NULL;
	return ptrace (PTRACE_DETACH, pid, 0, 0);
}
示例#2
0
static int __read(RIO *io, RIODesc *desc, ut8 *buf, int len) {
	int fd;
	ut64 addr = io->off;
	if (!desc || !desc->data)
		return -1;
	memset (buf, '\xff', len); // TODO: only memset the non-readed bytes
	fd = RIOPTRACE_FD (desc);
	if (fd != -1) {
		lseek (fd, addr, SEEK_SET);
		return read (fd, buf, len);
	}
	return debug_os_read_at (RIOPTRACE_PID (desc), (ut32*)buf, len, addr);
}
示例#3
0
static int __read(RIO *io, RIODesc *desc, ut8 *buf, int len) {
	int ret, fd;
	ut64 addr = io->off;
	if (!desc || !desc->data)
		return -1;
	memset (buf, '\xff', len); // TODO: only memset the non-readed bytes
	fd = RIOPTRACE_FD (desc);
	if (fd != -1) {
		ret = lseek (fd, addr, SEEK_SET);
		if (ret < 0) return -1;
		ret = read (fd, buf, len);
		// Workaround for the buggy Debian Wheeze's /proc/pid/mem
		if (ret != -1) return ret;
	}
	return debug_os_read_at (RIOPTRACE_PID (desc), (ut32*)buf, len, addr);
}