[PATCH v9 0/13] implement dlmem() function
stsp
stsp2@yandex.ru
Wed Mar 29 13:18:09 GMT 2023
Just to be more constructive, here is the
example:
void *dlopen_with_offset(const char *file, off_t offset, int flags)
{
off_t len;
void *addr;
void *handle;
int fd;
fd = open(file, O_RDONLY);
if (fd == -1)
return NULL;
len = lseek(fd, 0, SEEK_END);
lseek(fd, 0, SEEK_SET);
if (len <= offset)
goto err_close;
len -= offset;
/* if offset unaligned then just use read() */
if (offset & (PAGE_SIZE - 1)) {
int rd;
addr = mmap(NULL, len, PROT_READ | PROT_WRITE,
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
if (addr == MAP_FAILED)
goto err_close;
rd = read(fd, addr, len);
if (rd != len) {
munmap(addr, len);
goto err_close;
}
} else {
addr = mmap(NULL, len, PROT_READ, MAP_PRIVATE, fd, offset);
}
close(fd);
if (addr == MAP_FAILED)
return NULL;
handle = dlmem(addr, len, flags, NULL);
munmap(addr, len);
return handle;
err_close:
close(fd);
return NULL;
}
Does it parse an elf headers?
If so - where?
More information about the Libc-alpha
mailing list