Hi great developers, I had a problem recently about the execve parameter replacement. My requirement is to replace and modify (parameter 1) and (parameter 2) before some execve commands execute. But I refer to the proroot code now and it doesn t seem to take effect. If the parameters are not modified, the program will print the content normally, but if the parameter is modified, the program will not print any information. I tried to reconstruct the logic of enter.c in execve, which is the code I modified:
//int execve(const char *pathname, char *const argv[], char *const envp[]);
case SC_execve: {
status = 0;
if (getRuntimeIsFinsh()) {
char org_path_buff[PATH_MAX];
get_sysarg_path(tracee, org_path_buff, SYSARG_1);
ArrayOfXPointers *args_array;
fetch_array_of_xpointers(tracee, &args_array, SYSARG_2, 0);
string orig_args, orig_cmd_path(org_path_buff);
size_t args_count = args_array->length;
for (size_t i = 0; i < args_count - 1; i++) {
char *arg_str;
read_xpointee_as_string_t(tracee, args_array, i, &arg_str);
if (i != 0) {
orig_args.append(" ");
}
orig_args.append(arg_str);
}
//get mock value
auto handler_info = ZhenxiRunTime::handlerExecve::handler(orig_args);
if (handler_info.isHandler) {
//set cmd path
set_sysarg_path(tracee, handler_info.cmd_path.c_str(), SYSARG_1);
vector<string> new_args_list = handler_info.args;
resize_array_of_xpointers(args_array, 0, (ssize_t) (new_args_list.size() + 1));
for (size_t i = 0; i < new_args_list.size(); i++) {
write_xpointee(args_array, i, new_args_list[i].c_str());
}
//nullptr
write_xpointee(args_array, new_args_list.size(), nullptr);
//set args
status = push_array_of_xpointers_t(tracee, args_array, SYSARG_2);
if (status < 0) {
LOGE("svc execve error push_array_of_xpointers %d", status);
break;
}
}
}
break;
}
This is the code that I tested, and the main purpose is to replace the return value of [stat-f /], with [cat my_file_path]
The problem now is that as long as I make a parameter modification and replacement
LOGE("test execve printf -> %s", buffer)
This log will not be printed, the program does not have any translation, if it is ok, I tried to change the stat command to [cat my_file_path] or [sh-c 'cat my_file_path'], I don't know how to solve this problem. Can you help me with something? Great developer
Hi great developers, I had a problem recently about the execve parameter replacement. My requirement is to replace and modify (parameter 1) and (parameter 2) before some execve commands execute. But I refer to the proroot code now and it doesn t seem to take effect. If the parameters are not modified, the program will print the content normally, but if the parameter is modified, the program will not print any information. I tried to reconstruct the logic of enter.c in execve, which is the code I modified:
This is the code that I tested, and the main purpose is to replace the return value of [stat-f /], with [cat my_file_path]
The problem now is that as long as I make a parameter modification and replacement
This log will not be printed, the program does not have any translation, if it is ok, I tried to change the stat command to [cat my_file_path] or [sh-c 'cat my_file_path'], I don't know how to solve this problem. Can you help me with something? Great developer