瀏覽代碼

UserspaceEmulator: Pass full path to new UE instance in virt$execve()

Don't just pass argv[0] to the new UE, pass the full program path.
Andreas Kling 5 年之前
父節點
當前提交
ee5e8081da
共有 1 個文件被更改,包括 5 次插入0 次删除
  1. 5 0
      DevTools/UserspaceEmulator/Emulator.cpp

+ 5 - 0
DevTools/UserspaceEmulator/Emulator.cpp

@@ -963,6 +963,7 @@ int Emulator::virt$execve(FlatPtr params_addr)
 
     report("\n");
     report("==%d==  \033[33;1mSyscall:\033[0m execve\n", getpid());
+    report("==%d==  @ %s\n", getpid(), path.characters());
     for (auto& argument : arguments)
         report("==%d==    - %s\n", getpid(), argument.characters());
 
@@ -970,6 +971,7 @@ int Emulator::virt$execve(FlatPtr params_addr)
     Vector<char*> envp;
 
     argv.append(const_cast<char*>("/bin/UserspaceEmulator"));
+    argv.append(const_cast<char*>(path.characters()));
 
     auto create_string_vector = [](auto& output_vector, auto& input_vector) {
         for (auto& string : input_vector)
@@ -980,6 +982,9 @@ int Emulator::virt$execve(FlatPtr params_addr)
     create_string_vector(argv, arguments);
     create_string_vector(envp, environment);
 
+    // Yoink duplicated program name.
+    argv.remove(2);
+
     return execve(argv[0], (char* const*)argv.data(), (char* const*)envp.data());
 }