From 87ed33b219f28c3461121df332624dafe274e664 Mon Sep 17 00:00:00 2001 From: strange Date: Thu, 17 Dec 2009 23:29:54 -0700 Subject: [PATCH] Changed BidirectionalPipe::BidirectionalPipe() to have a "trace" argument. Rather than execute another program to execute the actual program, BidirectionalPipe now calls ptrace(PTRACE_TRACEME). Simple. Various other changes, as well, but none worth noting. --- src/gui/Program.cpp | 2 +- src/interface/PTracePortal.cpp | 2 +- src/interface/ProgramManager.cpp | 2 +- src/platform/BidirectionalPipe.cpp | 5 ++++- src/platform/BidirectionalPipe.h | 2 +- src/platform/SymbolManager.cpp | 2 +- 6 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/gui/Program.cpp b/src/gui/Program.cpp index 25a733a..9660e33 100644 --- a/src/gui/Program.cpp +++ b/src/gui/Program.cpp @@ -24,7 +24,7 @@ Program::Program() { argument_list.from_string(arguments + " "); - bi_pipe = new Platform::BidirectionalPipe(settings.value("Core/aesalon-path").toString().toStdString(), argument_list, true); + bi_pipe = new Platform::BidirectionalPipe(settings.value("Core/aesalon-path").toString().toStdString(), argument_list, true, false); memory = new Platform::Memory(); diff --git a/src/interface/PTracePortal.cpp b/src/interface/PTracePortal.cpp index a17c73f..d4a5766 100644 --- a/src/interface/PTracePortal.cpp +++ b/src/interface/PTracePortal.cpp @@ -71,7 +71,7 @@ void PTracePortal::write_memory(Platform::MemoryAddress address, Word value) { void PTracePortal::write_memory(Platform::MemoryAddress address, Byte value) { Word original = read_memory(address); /* Clear the first eight bits of original */ - original &= ~0xff; + original &= ~Word(0xff); /* Set first eight bits to new value */ original |= value; ptrace(PTRACE_POKEDATA, pid, address, value); diff --git a/src/interface/ProgramManager.cpp b/src/interface/ProgramManager.cpp index 92fdc10..44f6c60 100644 --- a/src/interface/ProgramManager.cpp +++ b/src/interface/ProgramManager.cpp @@ -4,7 +4,7 @@ namespace Aesalon { namespace Interface { void ProgramManager::execute() { - bi_pipe = new Platform::BidirectionalPipe(get_argument_list()->get_argument(0), get_argument_list(), false); + bi_pipe = new Platform::BidirectionalPipe(get_argument_list()->get_argument(0), get_argument_list(), false, true); running = true; ptrace_portal = new PTracePortal(bi_pipe->get_child_pid()); ptrace_portal->attach(); diff --git a/src/platform/BidirectionalPipe.cpp b/src/platform/BidirectionalPipe.cpp index f35e4d5..51dd1d2 100644 --- a/src/platform/BidirectionalPipe.cpp +++ b/src/platform/BidirectionalPipe.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -15,7 +16,7 @@ BidirectionalPipeException::BidirectionalPipeException(std::string message, } BidirectionalPipe::BidirectionalPipe(std::string executable, - ArgumentList argument_list, bool block) : block(block) { + ArgumentList argument_list, bool block, bool trace) : block(block) { pipe(pc_pipe_fd); pipe(cp_pipe_fd); @@ -33,6 +34,8 @@ BidirectionalPipe::BidirectionalPipe(std::string executable, dup2(pc_pipe_fd[0], STDIN_FILENO); dup2(cp_pipe_fd[1], STDOUT_FILENO); + if(trace) ptrace(PTRACE_TRACEME, 0, 0, 0); + execv(executable.c_str(), argument_list.get_as_argv()); throw BidirectionalPipeException("Failed to execute file: ", true); diff --git a/src/platform/BidirectionalPipe.h b/src/platform/BidirectionalPipe.h index 0aaaff5..1e1bbb6 100644 --- a/src/platform/BidirectionalPipe.h +++ b/src/platform/BidirectionalPipe.h @@ -25,7 +25,7 @@ private: bool block; pid_t pid; public: - BidirectionalPipe(std::string executable, ArgumentList argument_list, bool block = false); + BidirectionalPipe(std::string executable, ArgumentList argument_list, bool block, bool trace = false); virtual ~BidirectionalPipe(); void send_string(std::string data); diff --git a/src/platform/SymbolManager.cpp b/src/platform/SymbolManager.cpp index d8db28e..2568a8e 100644 --- a/src/platform/SymbolManager.cpp +++ b/src/platform/SymbolManager.cpp @@ -28,7 +28,7 @@ void SymbolManager::setup_pipe() { argument_list.add_argument(Misc::StreamAsString() << "--demangle" << (demangle_style != "" ? "=" + demangle_style : "")); argument_list.add_argument("--format=bsd"); argument_list.add_argument(executable_name); - bi_pipe = new Platform::BidirectionalPipe(nm_path, argument_list, true); + bi_pipe = new Platform::BidirectionalPipe(nm_path, argument_list, true, false); parse_nm_output(); } -- 2.11.4.GIT