> compile NEMU
221220000 张三 Linux zzy 5.15.146.1-microsoft-standard-WSL2 #1 SMP Thu Jan 11 04:09:03 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux 00:15:29 up 5 days, 12:23, 3 users, load average: 0.97, 0.62, 0.50
This commit is contained in:
@ -82,31 +82,30 @@ void init_elf(const char* elf_file) {
|
||||
if (shdr[i].sh_type == SHT_SYMTAB) {
|
||||
fseek(fp, shdr[i].sh_offset, SEEK_SET);
|
||||
assert(shdr[i].sh_size % sizeof(Elf_Sym) == 0);
|
||||
symt_len = shdr[i].sh_entsize;
|
||||
symt_len = shdr[i].sh_size / shdr[i].sh_entsize;
|
||||
Elf_Sym sym[symt_len];
|
||||
ret = fread(sym, shdr[i].sh_size, 1, fp);
|
||||
assert(ret == 1);
|
||||
psymt = sym;
|
||||
Log("SYMTAB %08x %06x %06x", shdr[i].sh_addr, shdr[i].sh_offset, shdr[i].sh_size);
|
||||
} else if (shdr[i].sh_type == SHT_STRTAB && shdr[i].sh_flags != 0) {
|
||||
// Log("SYMTAB %08x %06x %06x", shdr[i].sh_addr, shdr[i].sh_offset, shdr[i].sh_size);
|
||||
} else if (shdr[i].sh_type == SHT_STRTAB && shdr[i].sh_name != ehdr.e_shstrndx) {
|
||||
strt_sz = shdr[i].sh_size;
|
||||
fseek(fp, shdr[i].sh_offset, SEEK_SET);
|
||||
char buffer[strt_sz];
|
||||
ret = fread(buffer, strt_sz, 1, fp);
|
||||
assert(ret == 1);
|
||||
pstrt = buffer;
|
||||
Log("SHT_STRTAB %08x %06x %06x", shdr[i].sh_addr, shdr[i].sh_offset, shdr[i].sh_size);
|
||||
// Log("SHT_STRTAB %08x %06x %06x", shdr[i].sh_addr, shdr[i].sh_offset, shdr[i].sh_size);
|
||||
}
|
||||
}
|
||||
|
||||
// filling ftrace
|
||||
assert(pstrt != NULL && pstrt != NULL);
|
||||
for (int i = 0; i < symt_len; i ++) {
|
||||
Log("---LOG: %3d: %08x %5u %x", i, psymt[i].st_value, psymt[i].st_size, psymt[i].st_name);
|
||||
if (ELF_ST_TYPE(psymt[i].st_info) == STT_FUNC) {
|
||||
// Warning due to elf_ftrace is global variable so you don't need to set '\0' in the end
|
||||
// strncpy(elf_ftrace[elf_ftrace_size].fname, pstrt + psymt[i].st_name,
|
||||
// sizeof(elf_ftrace[0].fname) - 1);
|
||||
strncpy(elf_ftrace[elf_ftrace_size].fname, pstrt + psymt[i].st_name,
|
||||
sizeof(elf_ftrace[0].fname) - 1);
|
||||
elf_ftrace[elf_ftrace_size].start = psymt[i].st_value;
|
||||
elf_ftrace[elf_ftrace_size].size = psymt[i].st_size;
|
||||
elf_ftrace[elf_ftrace_size].end = psymt[i].st_value + psymt[i].st_size - 1;
|
||||
|
Reference in New Issue
Block a user