From 4b0bd5ce12cdfe976a5890e340d1ee25a564e93e Mon Sep 17 00:00:00 2001 From: Dan <46821332+nsadeveloper789@users.noreply.github.com> Date: Tue, 30 May 2023 13:58:04 -0400 Subject: [PATCH] GP-3507: Create attachable sleep specimen for gdb --- .../agent/gdb/model/GdbLinuxSpecimen.java | 2 +- Ghidra/Debug/Framework-Debugging/build.gradle | 4 +++ .../expTraceableSleep/c/expTraceableSleep.c | 26 +++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 Ghidra/Debug/Framework-Debugging/src/expTraceableSleep/c/expTraceableSleep.c diff --git a/Ghidra/Debug/Debugger-agent-gdb/src/test/java/agent/gdb/model/GdbLinuxSpecimen.java b/Ghidra/Debug/Debugger-agent-gdb/src/test/java/agent/gdb/model/GdbLinuxSpecimen.java index 3d4285001c..b372d173ef 100644 --- a/Ghidra/Debug/Debugger-agent-gdb/src/test/java/agent/gdb/model/GdbLinuxSpecimen.java +++ b/Ghidra/Debug/Debugger-agent-gdb/src/test/java/agent/gdb/model/GdbLinuxSpecimen.java @@ -31,7 +31,7 @@ public enum GdbLinuxSpecimen implements DebuggerTestSpecimen, DebuggerModelTestU SLEEP { @Override String getCommandLine() { - return "sleep 100000"; + return DummyProc.which("expTraceableSleep"); } }, FORK_EXIT { diff --git a/Ghidra/Debug/Framework-Debugging/build.gradle b/Ghidra/Debug/Framework-Debugging/build.gradle index 1c1a2394c7..43122e351a 100644 --- a/Ghidra/Debug/Framework-Debugging/build.gradle +++ b/Ghidra/Debug/Framework-Debugging/build.gradle @@ -57,6 +57,7 @@ task testSpecimenLinux_x86_64 { //dependsOn 'expTypesExecutable'//Linux_x86_64Executable' dependsOn 'expRegistersLinux_x86_64Executable' dependsOn 'expStackLinux_x86_64Executable' + dependsOn 'expTraceableSleepExecutable'//Linux_x86_64Executable' doLast { exec { @@ -133,6 +134,9 @@ model { targetPlatform "win_x86_64" targetPlatform "win_x86_32" // TODO: Test on these } + expTraceableSleep(NativeExecutableSpec) { + targetPlatform "linux_x86_64" + } } binaries { diff --git a/Ghidra/Debug/Framework-Debugging/src/expTraceableSleep/c/expTraceableSleep.c b/Ghidra/Debug/Framework-Debugging/src/expTraceableSleep/c/expTraceableSleep.c new file mode 100644 index 0000000000..293724cd93 --- /dev/null +++ b/Ghidra/Debug/Framework-Debugging/src/expTraceableSleep/c/expTraceableSleep.c @@ -0,0 +1,26 @@ +/* ### + * IP: GHIDRA + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * Our own version of sleep that tells Yama it's okay to be traced + */ + +#include +#include + +int main(int argc, char **argv) { + prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY); + sleep(100); +}