Я стараюсь сделать компилятор ELF64 с GCC, но мои отображения в конечном итоге проваливаются, когда я пытаюсь отобразить 0x4a5000: < /p>
Mapping attempt: vaddr=0x4a5000, filesz=23416, prot=3, fd=3, offset=675664
Вот сопоставления, которые делает мой загрузчик (до тех пор, пока не удастся):
Start Addr End Addr Size Offset Perms objfile
0x400000 0x401000 0x1000 0x0 r--p /home/quentin/elf_loader/bin/payload_c
0x401000 0x47f000 0x7e000 0x1000 r-xp /home/quentin/elf_loader/bin/payload_c
0x47f000 0x4a5000 0x26000 0x7f000 r--p /home/quentin/elf_loader/bin/payload_c
< /code>
А вот и эльфийский загрузчик Linux: < /p>
Start Addr End Addr Size Offset Perms objfile
0x400000 0x401000 0x1000 0x0 r--p /home/quentin/elf_loader/bin/payload_c
0x401000 0x47f000 0x7e000 0x1000 r-xp /home/quentin/elf_loader/bin/payload_c
0x47f000 0x4a5000 0x26000 0x7f000 r--p /home/quentin/elf_loader/bin/payload_c
0x4a5000 0x4aa000 0x5000 0xa4000 r--p /home/quentin/elf_loader/bin/payload_c
0x4aa000 0x4ac000 0x2000 0xa9000 rw-p /home/quentin/elf_loader/bin/payload_c
< /code>
Я не понимаю, почему эльфийский загрузчик Linux может отображать адреса, которые я не могу. Вот мой код: < /p>
int phdr_map(Elf64_Phdr phdr, FILE *fd)
{
int raw_fd = fileno(fd);
// This segment mustn't be mapped in memory
if (!(phdr.p_type & PT_LOAD) || phdr.p_vaddr == 0)
return 0;
int mmap_prot = phdr_map_prot(phdr);
void *addr = (void *)align(phdr.p_vaddr, phdr.p_align);
off_t offset = phdr.p_offset;
void *mapped = mmap(addr, phdr.p_filesz, mmap_prot, MAP_PRIVATE | MAP_FIXED, raw_fd, offset);
if (mapped == MAP_FAILED)
{
fprintf(stderr, "Mapping attempt: vaddr=%p, filesz=%lu, prot=%d, fd=%d, offset=%lu\n",
addr, phdr.p_filesz, mmap_prot, raw_fd, offset);
exit(1);
}
return 1;
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... der-doesnt
Мой MMAP терпит неудачу, когда эльфийский погрузчик Linux не ⇐ Linux
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
В чем разница между «mmap.mmap» и «tempfile.SpooledTemporaryFile» в stdlib Python?
Anonymous » » в форуме Python - 0 Ответы
- 46 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему `toml.load (f)` терпит неудачу с этим файлом под Windows (но не на Linux)?
Anonymous » » в форуме Python - 0 Ответы
- 20 Просмотры
-
Последнее сообщение Anonymous
-