Tôi không thể sử dụng chức năng mmap để hoạt động. Nó trả về mã lỗi EINVAL.mmap() trả về EINVAL
void* mapped =
mmap((void*)(map_addr + slide),
map_size,
PROT_WRITE | PROT_READ,
MAP_PRIVATE | MAP_ANON,
bprm->file,
map_offset);
Tôi đã kiểm tra các tài liệu cho chức năng này trên nền tảng của tôi (Darwin) và có vẻ không phải là điều gì sai trái. Trang người đàn ông cho mmap trình bày bốn trường hợp theo đó EINVAL sẽ được trả về.
[EINVAL] MAP_FIXED was specified and the addr argument was not page
aligned, or part of the desired address space resides out of the
valid address space for a user process.
MAP_FIXED không được chỉ định nên không phải vậy.
[EINVAL] flags does not include either MAP_PRIVATE or MAP_SHARED.
MAP_PRIVATE hiện diện.
[EINVAL] The len argument was negative.
Các len (map_size) lập luận vào thời điểm cuộc gọi là 8192.
[EINVAL] The offset argument was not page-aligned based on the page size as
returned by getpagesize(3).
Đối số bù đắp (map_offset) là 0 vì vậy nó phải được trang liên kết. (có thể tôi sai?)
Với MAP_ANON, một số triển khai yêu cầu fd phải bằng -1. Có thể đáng để kiểm tra. –
** @ Simon Elliott ** Vâng, bạn nói đúng. Cảm ơn bạn. –