SimpleKernel 1.17.0
Loading...
Searching...
No Matches
kernel_elf_test.cpp
Go to the documentation of this file.
1
5#include "kernel_elf.hpp"
6
7#include <gtest/gtest.h>
8
9#include "kernel.elf.h"
10
11TEST(KernelElfTest, DefaultConstructorTest) {
12 KernelElf kerlen_elf;
13 EXPECT_EQ(kerlen_elf.strtab, nullptr);
14 EXPECT_EQ(kerlen_elf.symtab.size(), 0);
15}
16
17TEST(KernelElfTest, ConstructorWithElfAddrTest) {
18 KernelElf kerlen_elf((uint64_t)kernel_elf_data);
19 EXPECT_EQ((uint64_t)kerlen_elf.strtab,
20 (uint64_t)((uint64_t)&kernel_elf_data + 0x38d08));
21 EXPECT_EQ(kerlen_elf.symtab.size(), 341);
22}
23
24TEST(KernelElfTest, ConstructorWithElfAddrAndElfSizeTest) {
25 KernelElf kerlen_elf((uint64_t)kernel_elf_data);
26 EXPECT_EQ((uint64_t)kerlen_elf.strtab,
27 (uint64_t)((uint64_t)&kernel_elf_data + 0x38d08));
28 EXPECT_EQ(kerlen_elf.symtab.size(), 341);
29}
30
31TEST(KernelElfTest, DefaultAssignConstructorTest) {
32 KernelElf kerlen_elf;
33 KernelElf kerlen_elf2((uint64_t)kernel_elf_data);
34 EXPECT_EQ(kerlen_elf.strtab, nullptr);
35 EXPECT_EQ(kerlen_elf.symtab.size(), 0);
36
37 kerlen_elf = kerlen_elf2;
38
39 EXPECT_EQ((uint64_t)kerlen_elf.strtab,
40 (uint64_t)((uint64_t)&kernel_elf_data + 0x38d08));
41 EXPECT_EQ(kerlen_elf.symtab.size(), 341);
42}
43
44TEST(KernelElfTest, DefaultCopyConstructorTest) {
45 KernelElf kerlen_elf((uint64_t)kernel_elf_data);
46
47 KernelElf kerlen_elf2(kerlen_elf);
48
49 EXPECT_EQ((uint64_t)kerlen_elf2.strtab,
50 (uint64_t)((uint64_t)&kernel_elf_data + 0x38d08));
51 EXPECT_EQ(kerlen_elf2.symtab.size(), 341);
52}
53
54TEST(KernelElfTest, GetElfSizeTest) {
55 KernelElf kerlen_elf((uint64_t)kernel_elf_data);
56 EXPECT_GT(kerlen_elf.GetElfSize(), 0);
57}
58
59TEST(KernelElfTest, SymtabAccessTest) {
60 KernelElf kerlen_elf((uint64_t)kernel_elf_data);
61
62 // 测试符号表是否可以访问
63 EXPECT_GT(kerlen_elf.symtab.size(), 0);
64
65 // 测试符号表内容
66 bool found_symbol = false;
67 for (const auto& sym : kerlen_elf.symtab) {
68 if (sym.st_name != 0 && kerlen_elf.strtab != nullptr) {
69 const char* sym_name =
70 reinterpret_cast<const char*>(kerlen_elf.strtab + sym.st_name);
71 if (sym_name != nullptr && strlen(sym_name) > 0) {
72 found_symbol = true;
73 break;
74 }
75 }
76 }
77 EXPECT_TRUE(found_symbol);
78}
79
80TEST(KernelElfTest, StrtabNotNullTest) {
81 KernelElf kerlen_elf((uint64_t)kernel_elf_data);
82 EXPECT_NE(kerlen_elf.strtab, nullptr);
83}
84
85TEST(KernelElfTest, MoveConstructorTest) {
86 KernelElf kerlen_elf((uint64_t)kernel_elf_data);
87 auto original_strtab = kerlen_elf.strtab;
88 auto original_symtabsize = kerlen_elf.symtab.size();
89
90 KernelElf kerlen_elf2(std::move(kerlen_elf));
91
92 EXPECT_EQ(kerlen_elf2.strtab, original_strtab);
93 EXPECT_EQ(kerlen_elf2.symtab.size(), original_symtabsize);
94}
95
96TEST(KernelElfTest, MoveAssignmentTest) {
97 KernelElf kerlen_elf((uint64_t)kernel_elf_data);
98 auto original_strtab = kerlen_elf.strtab;
99 auto original_symtabsize = kerlen_elf.symtab.size();
100
101 KernelElf kerlen_elf2;
102 kerlen_elf2 = std::move(kerlen_elf);
103
104 EXPECT_EQ(kerlen_elf2.strtab, original_strtab);
105 EXPECT_EQ(kerlen_elf2.symtab.size(), original_symtabsize);
106}
ELF 文件相关
auto GetElfSize() const -> size_t
获取 elf 文件大小
uint8_t * strtab
字符串表
std::span< Elf64_Sym > symtab
符号表
static constexpr uint8_t kernel_elf_data[]
测试用 elf 文件
Definition kernel.elf.h:11
TEST(KernelElfTest, DefaultConstructorTest)
#define strlen
#define EXPECT_TRUE(cond, msg)
#define EXPECT_NE(val1, val2, msg)
#define EXPECT_GT(val1, val2, msg)
#define EXPECT_EQ(val1, val2, msg)