mmap関数が機能しません。EINVALエラー コードを返します。
void* mapped =
mmap((void*)(map_addr + slide),
map_size,
PROT_WRITE | PROT_READ,
MAP_PRIVATE | MAP_ANON,
bprm->file,
map_offset);
私のプラットフォーム ( Darwin ) でこの関数のドキュメントを確認しましたが、問題はないようです。mmap の man ページには、EINVAL が返される 4 つのケースが示されています。
[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 が指定されていないので、これではありません。
[EINVAL] flags does not include either MAP_PRIVATE or MAP_SHARED.
MAP_PRIVATE が存在します。
[EINVAL] The len argument was negative.
呼び出し時の len (map_size) 引数は 8192 です。
[EINVAL] The offset argument was not page-aligned based on the page size as
returned by getpagesize(3).
オフセット引数 (map_offset) は 0 であるため、ページに揃える必要があります。(たぶん私は間違っています?)