diff --git a/src/core/loader/nro.cpp b/src/core/loader/nro.cpp
index 4109b9974dff7dbc9ca835827681ac881e879783..0d7c1dcfa684419df6cb9d5c5bb8da026aa37f5c 100644
--- a/src/core/loader/nro.cpp
+++ b/src/core/loader/nro.cpp
@@ -155,7 +155,7 @@ bool AppLoader_NRO::LoadNro(FileSys::VirtualFile file, VAddr load_base) {
     if (!Settings::values.program_args.empty()) {
         const auto arg_data = Settings::values.program_args;
         codeset->DataSegment().size += 0x9000;
-        NSOArgumentHeader args_header{0x9000, arg_data.size(), {}};
+        NSOArgumentHeader args_header{0x9000, static_cast<u32_le>(arg_data.size()), {}};
         program_image.resize(static_cast<u32>(program_image.size()) + 0x9000);
         std::memcpy(program_image.data() + program_image.size() - 0x9000, &args_header,
                     sizeof(NSOArgumentHeader));
diff --git a/src/core/loader/nso.cpp b/src/core/loader/nso.cpp
index 8ee2c6f2b86b6177a6ad1a8240f379f9777d41d7..c225e2d24e387298fc1626781647ba5dda9eb678 100644
--- a/src/core/loader/nso.cpp
+++ b/src/core/loader/nso.cpp
@@ -130,7 +130,7 @@ VAddr AppLoader_NSO::LoadModule(FileSys::VirtualFile file, VAddr load_base,
     if (should_pass_arguments && !Settings::values.program_args.empty()) {
         const auto arg_data = Settings::values.program_args;
         codeset->DataSegment().size += 0x9000;
-        NSOArgumentHeader args_header{0x9000, arg_data.size(), {}};
+        NSOArgumentHeader args_header{0x9000, static_cast<u32_le>(arg_data.size()), {}};
         program_image.resize(static_cast<u32>(program_image.size()) + 0x9000);
         std::memcpy(program_image.data() + program_image.size() - 0x9000, &args_header,
                     sizeof(NSOArgumentHeader));
diff --git a/src/yuzu_cmd/config.cpp b/src/yuzu_cmd/config.cpp
index 9d934e2201975c09c2baeb629a57d94fa80af465..2470f4640ae87ca1bc43a02ccb6b5740df42f8ef 100644
--- a/src/yuzu_cmd/config.cpp
+++ b/src/yuzu_cmd/config.cpp
@@ -138,6 +138,7 @@ void Config::ReadValues() {
     Settings::values.use_gdbstub = sdl2_config->GetBoolean("Debugging", "use_gdbstub", false);
     Settings::values.gdbstub_port =
         static_cast<u16>(sdl2_config->GetInteger("Debugging", "gdbstub_port", 24689));
+    Settings::values.program_args = sdl2_config->Get("Debugging", "program_args", "");
 
     // Web Service
     Settings::values.enable_telemetry =
diff --git a/src/yuzu_cmd/yuzu.cpp b/src/yuzu_cmd/yuzu.cpp
index 1d951ca3f1e0dfb926cdf87d788e161861e71287..27aba95f6a4220866d293d6e2d698e399474cc87 100644
--- a/src/yuzu_cmd/yuzu.cpp
+++ b/src/yuzu_cmd/yuzu.cpp
@@ -56,9 +56,10 @@ static void PrintHelp(const char* argv0) {
     std::cout << "Usage: " << argv0
               << " [options] <filename>\n"
                  "-g, --gdbport=NUMBER  Enable gdb stub on port NUMBER\n"
-                 "-f, --fullscreen     Start in fullscreen mode\n"
+                 "-f, --fullscreen      Start in fullscreen mode\n"
                  "-h, --help            Display this help and exit\n"
-                 "-v, --version         Output version information and exit\n";
+                 "-v, --version         Output version information and exit\n"
+                 "-p, --program         Pass following string as arguments to executable\n";
 }
 
 static void PrintVersion() {
@@ -103,15 +104,13 @@ int main(int argc, char** argv) {
     bool fullscreen = false;
 
     static struct option long_options[] = {
-        {"gdbport", required_argument, 0, 'g'},
-        {"fullscreen", no_argument, 0, 'f'},
-        {"help", no_argument, 0, 'h'},
-        {"version", no_argument, 0, 'v'},
-        {0, 0, 0, 0},
+        {"gdbport", required_argument, 0, 'g'}, {"fullscreen", no_argument, 0, 'f'},
+        {"help", no_argument, 0, 'h'},          {"version", no_argument, 0, 'v'},
+        {"program", optional_argument, 0, 'p'}, {0, 0, 0, 0},
     };
 
     while (optind < argc) {
-        char arg = getopt_long(argc, argv, "g:fhv", long_options, &option_index);
+        char arg = getopt_long(argc, argv, "g:fhvp::", long_options, &option_index);
         if (arg != -1) {
             switch (arg) {
             case 'g':
@@ -135,6 +134,10 @@ int main(int argc, char** argv) {
             case 'v':
                 PrintVersion();
                 return 0;
+            case 'p':
+                Settings::values.program_args = argv[optind];
+                ++optind;
+                break;
             }
         } else {
 #ifdef _WIN32