Esempio n. 1
0
void write_child_data(struct context *ctx, const size_t size, void *addr, void *data)
{

	ssize_t written = pwrite(ctx->child_mem_fd, data, size, (off_t) addr);
	if (written != size) {
		write_child_data_n(ctx->child_tid, size, addr, data);
	}
}
Esempio n. 2
0
static void remove_sw_breakpoint(struct context *ctx,
				 const struct dbg_request* req)
{
	struct breakpoint* bp = find_breakpoint(req->mem.addr);

	assert(sizeof(int_3_insn) == req->mem.len);

	if (!bp) {
		warn("Couldn't find breakpoint %p to remove", req->mem.addr);
		return;
	}
	write_child_data_n(ctx->child_tid,
			   sizeof(bp->overwritten_data), bp->addr,
			   &bp->overwritten_data);

	remove_breakpoint(bp);
	sys_free((void**)&bp);
}
Esempio n. 3
0
static void set_sw_breakpoint(struct context *ctx,
			      const struct dbg_request* req)
{
	struct breakpoint* bp = sys_malloc_zero(sizeof(*bp));
	byte* orig_data_ptr;

	assert(sizeof(int_3_insn) == req->mem.len);

	bp->addr = req->mem.addr;

	orig_data_ptr = read_child_data(ctx, 1, bp->addr);
	bp->overwritten_data = *orig_data_ptr;
	sys_free((void**)&orig_data_ptr);

	write_child_data_n(ctx->child_tid,
			   sizeof(int_3_insn), bp->addr, &int_3_insn);

	add_breakpoint(bp);
}