From 66c5e85557e5f590d26d21b32543f1e3b59adfa6 Mon Sep 17 00:00:00 2001 From: Baptiste Wicht Date: Mon, 24 Feb 2014 21:01:34 +0100 Subject: [PATCH] Finish readelf --- .gitignore | 1 + kernel/src/scheduler.cpp | 6 +++--- programs/readelf/readelf | Bin 82407 -> 0 bytes programs/readelf/src/main.cpp | 11 +++++------ tlib/include/elf.hpp | 3 +-- 5 files changed, 10 insertions(+), 11 deletions(-) delete mode 100755 programs/readelf/readelf diff --git a/.gitignore b/.gitignore index 7a5d12f0..ab9c4d26 100644 --- a/.gitignore +++ b/.gitignore @@ -25,5 +25,6 @@ programs/longtwo/longtwo programs/longone/longone programs/pwd/pwd programs/which/which +programs/readelf/readelf programs/cd/cd programs/dist/ \ No newline at end of file diff --git a/kernel/src/scheduler.cpp b/kernel/src/scheduler.cpp index 66876fa1..07db7010 100644 --- a/kernel/src/scheduler.cpp +++ b/kernel/src/scheduler.cpp @@ -627,7 +627,9 @@ int64_t scheduler::exec(const std::string& file, const std::vector& return -std::ERROR_NOT_EXISTS; } - if(!elf::is_valid(content)){ + auto buffer = content.c_str(); + + if(!elf::is_valid(buffer)){ if(DEBUG_SCHEDULER){ k_print_line("Not a valid file"); } @@ -635,8 +637,6 @@ int64_t scheduler::exec(const std::string& file, const std::vector& return -std::ERROR_NOT_EXECUTABLE; } - auto buffer = content.c_str(); - auto& process = new_process(); if(!create_paging(buffer, process)){ diff --git a/programs/readelf/readelf b/programs/readelf/readelf deleted file mode 100755 index bd9e665f1bd59deec1bbe1bb2e8b827289797f50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82407 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 k@h5u5&!@I diff --git a/programs/readelf/src/main.cpp b/programs/readelf/src/main.cpp index ebdb9f45..f768b803 100644 --- a/programs/readelf/src/main.cpp +++ b/programs/readelf/src/main.cpp @@ -13,16 +13,17 @@ namespace { -void readelf(std::string& content){ - if(!elf::is_valid(content)){ +void readelf(char* buffer){ + if(!elf::is_valid(buffer)){ print_line("readelf: This file is not an ELF file or not in ELF64 format"); return; } - auto buffer = content.c_str(); auto header = reinterpret_cast(buffer); + printf("%h\n", reinterpret_cast(buffer)); + printf("Number of Program Headers: %u\n", static_cast(header->e_phnum)); printf("Number of Section Headers: %u\n", static_cast(header->e_shnum)); @@ -100,9 +101,7 @@ int main(int argc, char* argv[]){ if(*content_result != size){ //TODO Read more } else { - std::string content(buffer); - - readelf(content); + readelf(buffer); } } else { printf("readelf: error: %s\n", std::error_message(content_result.error())); diff --git a/tlib/include/elf.hpp b/tlib/include/elf.hpp index 700f9e5f..26c69eea 100644 --- a/tlib/include/elf.hpp +++ b/tlib/include/elf.hpp @@ -54,8 +54,7 @@ struct section_header { uint64_t sh_entsize; }__attribute__((packed)); -inline bool is_valid(const std::string& content){ - auto buffer = content.c_str(); +inline bool is_valid(const char* buffer){ auto header = reinterpret_cast(buffer); //Test if ELF file