Tôi muốn cấp phát bộ nhớ có quyền thực thi. Vì vậy, tôi sử dụng mprotect để thay đổi quyền .. Để có được một bộ nhớ liên kết trang tôi sử dụng một chức năng valloc
.Làm thế nào để cấp phát bộ nhớ với quyền thực thi?
void * temp = (void *) valloc(x);
và sau đó
if(mprotect(temp, BLOCK_SIZE, (PROT_READ | PROT_WRITE |PROT_EXEC))) {
exit(-1);
}
Bây giờ tôi muốn thêm bộ nhớ hơn để khối phân bổ này. Do đó tôi sử dụng hàm realloc
.
void * new_temp = (void *) realloc(temp, 1024);
Tính năng này có thể tự động thay đổi quyền của bộ nhớ được cấp cho những bộ nhớ tôi đã đặt trước đó không ?? Trong trường hợp realloc
di chuyển toàn bộ khối đến một vị trí khác, quyền của bộ nhớ được phân bổ trước đó và bộ nhớ được cấp phát mới là gì?
Nên sử dụng lại mprotect
để nhận bộ nhớ quyền thực thi. Và có API đến realloc
trên ranh giới kích thước trang như valloc
. ?
Bạn nên gắn thẻ thẻ này với hệ điều hành thích hợp vì đây là hệ điều hành nhiều hơn so với câu hỏi ngôn ngữ. –
valloc() là một hàm BSD cũ được loại bỏ trong SUSv3. Giả sử một số hệ điều hành POSIX như Linux hoặc BSD. – Dummy00001
@ David: Không thực sự, công cụ này được hỗ trợ bởi cả Windoze và Linux (hệ điều hành khác không tồn tại), và API chỉ khác nhau ở nơi POSIX không được tiêu chuẩn hóa. –