From 6f17b29963647771a6ff6d1cfbbf4bd93876ca7d Mon Sep 17 00:00:00 2001 From: EnderIce2 Date: Wed, 11 Dec 2024 04:50:42 +0200 Subject: [PATCH] kernel/elf: Update ELFObject() Why did I wrote that? The interpreter wants argv[0] to be the path of the program to be loaded. Signed-off-by: EnderIce2 --- Kernel/exec/elf/elf_loader.cpp | 27 +++------------------------ 1 file changed, 3 insertions(+), 24 deletions(-) diff --git a/Kernel/exec/elf/elf_loader.cpp b/Kernel/exec/elf/elf_loader.cpp index 1d771e16..a6ba646f 100644 --- a/Kernel/exec/elf/elf_loader.cpp +++ b/Kernel/exec/elf/elf_loader.cpp @@ -811,36 +811,15 @@ namespace Execute Elf32_Ehdr ELFHeader{}; fd->Read(&ELFHeader, sizeof(Elf32_Ehdr), 0); - std::vector PhdrINTERP = ELFGetSymbolType_x86_64(fd, PT_INTERP); - const char *ElfInterpPath = nullptr; - if (!PhdrINTERP.empty() && ELFHeader.e_type == ET_DYN) - { - ElfInterpPath = new char[256]; - fd->Read(ElfInterpPath, 256, PhdrINTERP.front().p_offset); - debug("Interpreter: %s", ElfInterpPath); - argc++; - } - // ELFargv = new const char *[argc + 2]; size_t argv_size = argc + 2 * sizeof(char *); ELFargv = (const char **)TargetProcess->vma->RequestPages(TO_PAGES(argv_size)); - int interAdd = 0; - if (ElfInterpPath) + for (int i = 0; i < argc; i++) { - size_t interp_size = strlen(ElfInterpPath) + 1; - ELFargv[0] = (const char *)TargetProcess->vma->RequestPages(TO_PAGES(interp_size)); - strcpy((char *)ELFargv[0], ElfInterpPath); - delete[] ElfInterpPath; - interAdd++; - } - - for (int i = interAdd; i < argc; i++) - { - assert(argv[i - interAdd] != nullptr); - size_t arg_size = strlen(argv[i - interAdd]) + 1; + size_t arg_size = strlen(argv[i]) + 1; ELFargv[i] = (const char *)TargetProcess->vma->RequestPages(TO_PAGES(arg_size)); - strcpy((char *)ELFargv[i], argv[i - interAdd]); + strcpy((char *)ELFargv[i], argv[i]); } ELFargv[argc] = nullptr;