mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-07-30 07:18:37 -09:00
Merge remote-tracking branch 'origin/GP-0_Dan_testFixes-2026-05-20-1' into patch
This commit is contained in:
@@ -4,9 +4,9 @@
|
||||
* 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.
|
||||
@@ -15,8 +15,8 @@
|
||||
*/
|
||||
package ghidra.pcode.emu.sys;
|
||||
|
||||
import static ghidra.pcode.emu.sys.EmuSyscallLibrary.*;
|
||||
import static org.junit.Assert.*;
|
||||
import static ghidra.pcode.emu.sys.EmuSyscallLibrary.SYSCALL_SPACE_NAME;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import org.junit.*;
|
||||
|
||||
@@ -181,18 +181,25 @@ public class EmuAmd64SyscallUseropLibraryTest extends AbstractGhidraHeadlessInte
|
||||
try (Transaction tx = program.openTransaction("Initialize")) {
|
||||
asm.assemble(start,
|
||||
"MOV RAX,0",
|
||||
"MOV RCX,0xbeef",
|
||||
"MOV RCX,0xbeef", // Will be clobbered with RIP by SYSCALL
|
||||
"MOV R10,0xdead",
|
||||
"SYSCALL");
|
||||
}
|
||||
|
||||
/**
|
||||
* This test is a bit nonsensical, because the calling conventions will cause parameters to
|
||||
* get pulled from registers that get clobbered by the SYSCALL, per the ISA description, not
|
||||
* just convention. Still, I want to test that the emulator obeys the assigned calling
|
||||
* convention.
|
||||
*/
|
||||
|
||||
SyscallTestPcodeEmulator emu = prepareEmulator();
|
||||
PcodeThread<byte[]> thread = launchThread(emu, start);
|
||||
|
||||
thread.stepInstruction(4);
|
||||
|
||||
assertArrayEquals(arithmetic.fromConst(0xbeef, regRAX.getNumBytes()),
|
||||
thread.getState().getVar(regRAX, Reason.INSPECT));
|
||||
assertEquals("400017",
|
||||
thread.getState().inspectRegisterValue(regRAX).getUnsignedValue().toString(16));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -200,7 +207,7 @@ public class EmuAmd64SyscallUseropLibraryTest extends AbstractGhidraHeadlessInte
|
||||
try (Transaction tx = program.openTransaction("Initialize")) {
|
||||
asm.assemble(start,
|
||||
"MOV RAX,1",
|
||||
"MOV RCX,0xdead",
|
||||
"MOV RCX,0xdead", // Will be clobbered with RIP by SYSCALL
|
||||
"MOV R10,0xbeef",
|
||||
"SYSCALL");
|
||||
}
|
||||
@@ -210,7 +217,7 @@ public class EmuAmd64SyscallUseropLibraryTest extends AbstractGhidraHeadlessInte
|
||||
|
||||
thread.stepInstruction(4);
|
||||
|
||||
assertArrayEquals(arithmetic.fromConst(0xbeef, regRAX.getNumBytes()),
|
||||
thread.getState().getVar(regRAX, Reason.INSPECT));
|
||||
assertEquals("dead",
|
||||
thread.getState().inspectRegisterValue(regRAX).getUnsignedValue().toString(16));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
package agent.lldb.rmi;
|
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import static org.hamcrest.Matchers.greaterThan;
|
||||
import static org.hamcrest.Matchers.instanceOf;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
@@ -316,9 +317,9 @@ public class LldbHooksTest extends AbstractLldbTraceRmiTest {
|
||||
try (LldbAndTrace conn = startAndSyncLldb()) {
|
||||
start(conn, getSpecimenPrint());
|
||||
|
||||
TraceObject inf = waitForValue(() -> tb.objAny0("Processes[]"));
|
||||
TraceObject proc = waitForValue(() -> tb.objAny0("Processes[]"));
|
||||
waitForPass(() -> {
|
||||
assertEquals("STOPPED", tb.objValue(inf, lastSnap(conn), "_state"));
|
||||
assertEquals("STOPPED", tb.objValue(proc, lastSnap(conn), "_state"));
|
||||
}, RUN_TIMEOUT_MS, RETRY_MS);
|
||||
conn.success();
|
||||
}
|
||||
@@ -412,11 +413,11 @@ public class LldbHooksTest extends AbstractLldbTraceRmiTest {
|
||||
|
||||
waitStopped(conn.conn);
|
||||
conn.execute("breakpoint delete %s".formatted(brk.getCanonicalPath().index()));
|
||||
conn.execute("stepi");
|
||||
waitForPass(noExc(() -> conn.execute("stepi")));
|
||||
|
||||
waitForPass(
|
||||
() -> assertEquals(0,
|
||||
tb.objValues(lastSnap(conn), "Processes[].Breakpoints[]").size()));
|
||||
waitForPass(() -> {
|
||||
assertEquals(0, tb.objValues(lastSnap(conn), "Processes[].Breakpoints[]").size());
|
||||
});
|
||||
conn.success();
|
||||
}
|
||||
}
|
||||
@@ -438,8 +439,7 @@ public class LldbHooksTest extends AbstractLldbTraceRmiTest {
|
||||
conn.success();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void start(LldbAndTrace conn, String obj) {
|
||||
conn.execute("file " + obj);
|
||||
conn.execute("ghidra trace sync-enable");
|
||||
|
||||
Reference in New Issue
Block a user