aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsegfault <toni@impl.cc>2020-12-17 21:13:40 +0100
committersegfault <toni@impl.cc>2020-12-17 21:13:40 +0100
commit440bc0501a6862b34a70279a673951c9452f3ed3 (patch)
tree92ce0708c36ac97855e6228cb67b52ebc1e76237
parent0d68295e7697cad2ec0d39251213f143b199673d (diff)
Added basic stack memory RPM/WPM test.
-rw-r--r--IntegrationTest/IntegrationTest.cpp42
1 files changed, 41 insertions, 1 deletions
diff --git a/IntegrationTest/IntegrationTest.cpp b/IntegrationTest/IntegrationTest.cpp
index 5503345..4f87819 100644
--- a/IntegrationTest/IntegrationTest.cpp
+++ b/IntegrationTest/IntegrationTest.cpp
@@ -128,6 +128,45 @@ error:
return false;
}
+static bool test_MemoryReadWrite(KInterface& ki, HANDLE pid)
+{
+ KERNEL_READ_REQUEST krr;
+ KERNEL_WRITE_REQUEST kwr;
+
+ uint8_t redzone0[16];
+ uint8_t buffer[128];
+ uint8_t redzone1[16];
+ uint8_t test_buffer[sizeof(buffer)];
+ uint8_t redzone2[16];
+
+ memset(&krr, 0, sizeof(krr));
+ memset(&kwr, 0, sizeof(kwr));
+
+ memset(redzone0, 0xFF, sizeof(redzone0));
+ memset(redzone1, 0xFF, sizeof(redzone1));
+ memset(redzone2, 0xFF, sizeof(redzone2));
+
+ memset(buffer, 0x41, sizeof(buffer));
+ memset(test_buffer, 0, sizeof(test_buffer));
+ KM_ASSERT_EQUAL(true, ki.RPM(pid, buffer, test_buffer, sizeof(buffer), &krr) &&
+ krr.SizeReq == krr.SizeRes && krr.StatusRes == 0, "Kernel RPM stack memory");
+ KM_ASSERT_EQUAL(0, memcmp(buffer, test_buffer, sizeof(buffer)), "Kernel RPM stack memory equal");
+ KM_ASSERT_EQUAL(true, memcmp(redzone0, redzone1, sizeof(redzone0)) == 0 &&
+ memcmp(redzone0, redzone2, sizeof(redzone0)) == 0, "Kernel RPM redzones check");
+
+ memset(buffer, 0x42, sizeof(buffer));
+ memset(test_buffer, 0, sizeof(test_buffer));
+ KM_ASSERT_EQUAL(true, ki.WPM(pid, test_buffer, buffer, sizeof(buffer), &kwr) &&
+ kwr.SizeReq == kwr.SizeRes && kwr.StatusRes == 0, "Kernel WPM stack memory");
+ KM_ASSERT_EQUAL(0, memcmp(buffer, test_buffer, sizeof(buffer)), "Kernel WPM stack memory equal");
+ KM_ASSERT_EQUAL(true, memcmp(redzone0, redzone1, sizeof(redzone0)) == 0 &&
+ memcmp(redzone0, redzone2, sizeof(redzone0)) == 0, "Kernel WPM redzones check");
+
+ return true;
+error:
+ return false;
+}
+
int main()
{
HANDLE this_pid = (HANDLE)((ULONG_PTR)GetCurrentProcessId());
@@ -140,7 +179,7 @@ int main()
KM_ASSERT_EQUAL(true, ki.Handshake(), "Kernel Interface Handshake");
KM_ASSERT_EQUAL(true, ki.getKHandle() != ki.getUHandle() && ki.getKHandle() != NULL && ki.getUHandle() != NULL, "Kernel Interface Handles");
KM_ASSERT_EQUAL(true, ki.getBuffer() != NULL, "Kernel Interface Buffer != NULL");
- KM_ASSERT_EQUAL(SRR_TIMEOUT, ki.RecvWait(), "Kernel Interface Receive Wait");
+ KM_ASSERT_EQUAL(SRR_TIMEOUT, ki.RecvWait(1000), "Kernel Interface Receive Wait");
KM_ASSERT_EQUAL(true, ki.Ping(), "Kernel Interface PING - PONG #1");
KM_ASSERT_EQUAL(true, ki.Ping(), "Kernel Interface PING - PONG #2");
KM_ASSERT_EQUAL(true, ki.Ping(), "Kernel Interface PING - PONG #3");
@@ -148,6 +187,7 @@ int main()
KM_TEST_SUITE(test_Modules(ki, this_pid), "Modules");
KM_TEST_SUITE(test_Pages(ki, this_pid), "Pages");
KM_TEST_SUITE(test_VirtualMemory(ki, this_pid), "VirtualMemory");
+ KM_TEST_SUITE(test_MemoryReadWrite(ki, this_pid), "MemoryReadWrite");
KM_ASSERT_EQUAL(true, ki.Ping(), "Kernel Interface PING - PONG #4");
KM_ASSERT_EQUAL(true, ki.Exit(), "Kernel Interface Driver Shutdown");
}