Мой MMAP терпит неудачу, когда эльфийский погрузчик Linux неLinux

Ответить Пред. темаСлед. тема
Anonymous
 Мой MMAP терпит неудачу, когда эльфийский погрузчик Linux не

Сообщение Anonymous »

Я стараюсь сделать компилятор 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»