SimpleKernel 1.17.0
Loading...
Searching...
No Matches
kernel_elf_test.cpp File Reference
#include "kernel_elf.hpp"
#include <gtest/gtest.h>
#include "kernel.elf.h"
Include dependency graph for kernel_elf_test.cpp:

Go to the source code of this file.

Functions

 TEST (KernelElfTest, DefaultConstructorTest)
 
 TEST (KernelElfTest, ConstructorWithElfAddrTest)
 
 TEST (KernelElfTest, ConstructorWithElfAddrAndElfSizeTest)
 
 TEST (KernelElfTest, DefaultAssignConstructorTest)
 
 TEST (KernelElfTest, DefaultCopyConstructorTest)
 
 TEST (KernelElfTest, GetElfSizeTest)
 
 TEST (KernelElfTest, SymtabAccessTest)
 
 TEST (KernelElfTest, StrtabNotNullTest)
 
 TEST (KernelElfTest, MoveConstructorTest)
 
 TEST (KernelElfTest, MoveAssignmentTest)
 

Function Documentation

◆ TEST() [1/10]

TEST ( KernelElfTest  ,
ConstructorWithElfAddrAndElfSizeTest   
)

Definition at line 24 of file kernel_elf_test.cpp.

24 {
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}
ELF 文件相关
static constexpr uint8_t kernel_elf_data[]
测试用 elf 文件
Definition kernel.elf.h:11
#define EXPECT_EQ(val1, val2, msg)

◆ TEST() [2/10]

TEST ( KernelElfTest  ,
ConstructorWithElfAddrTest   
)

Definition at line 17 of file kernel_elf_test.cpp.

17 {
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}

◆ TEST() [3/10]

TEST ( KernelElfTest  ,
DefaultAssignConstructorTest   
)

Definition at line 31 of file kernel_elf_test.cpp.

31 {
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}
uint8_t * strtab
字符串表
std::span< Elf64_Sym > symtab
符号表

◆ TEST() [4/10]

TEST ( KernelElfTest  ,
DefaultConstructorTest   
)

Definition at line 11 of file kernel_elf_test.cpp.

11 {
12 KernelElf kerlen_elf;
13 EXPECT_EQ(kerlen_elf.strtab, nullptr);
14 EXPECT_EQ(kerlen_elf.symtab.size(), 0);
15}

◆ TEST() [5/10]

TEST ( KernelElfTest  ,
DefaultCopyConstructorTest   
)

Definition at line 44 of file kernel_elf_test.cpp.

44 {
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}

◆ TEST() [6/10]

TEST ( KernelElfTest  ,
GetElfSizeTest   
)

Definition at line 54 of file kernel_elf_test.cpp.

54 {
55 KernelElf kerlen_elf((uint64_t)kernel_elf_data);
56 EXPECT_GT(kerlen_elf.GetElfSize(), 0);
57}
#define EXPECT_GT(val1, val2, msg)
Here is the call graph for this function:

◆ TEST() [7/10]

TEST ( KernelElfTest  ,
MoveAssignmentTest   
)

Definition at line 96 of file kernel_elf_test.cpp.

96 {
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}

◆ TEST() [8/10]

TEST ( KernelElfTest  ,
MoveConstructorTest   
)

Definition at line 85 of file kernel_elf_test.cpp.

85 {
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}

◆ TEST() [9/10]

TEST ( KernelElfTest  ,
StrtabNotNullTest   
)

Definition at line 80 of file kernel_elf_test.cpp.

80 {
81 KernelElf kerlen_elf((uint64_t)kernel_elf_data);
82 EXPECT_NE(kerlen_elf.strtab, nullptr);
83}
#define EXPECT_NE(val1, val2, msg)

◆ TEST() [10/10]

TEST ( KernelElfTest  ,
SymtabAccessTest   
)

Definition at line 59 of file kernel_elf_test.cpp.

59 {
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}
#define strlen
#define EXPECT_TRUE(cond, msg)