A kovetkezo furcsasagba utkoztem: a mprotect fuggveny parameterei a sugoban (man mprotect), es a fejlec fajlban kulonboznek (/usr/include/sys/mman.h).
A sugoban ez all:
NAME
mprotect – control allowable accesses to a region of memory
SYNOPSIS
#include
int mprotect(const void *addr, size_t len, int prot);
A fejlecfajlban pedig:
/* Change the memory protection of the region starting at ADDR and
extending LEN bytes to PROT. Returns 0 if successful, -1 for errors
(and sets errno). */
extern int mprotect (void *__addr, size_t __len, int __prot) __THROW;
Tehat a fejlecben nincs benne a „const” szo. Ezert konstans memoriazona cimet C++-ban nem lehet megadni a mprotect-nek (C-ben, gcc-vel dob egy figyelmeztetest, de g++-al mar forditasi hibat).
Nem ertem, hogy miert van ez a kulonbseg. Valaki tudja ennek az okat, es esetleg a kikuszoboleset?
Itt egy peldaprogram:
Code:
#include
#include
int main(void){
const char s[] = „valami”;
mprotect(s, strlen(s), PROT_NONE);
return 0;
}
A forditas eredmenye:
$ g++ mprotect-test.c
mprotect-test.c: In function `int main()’:
mprotect-test.c:7: error: invalid conversion from `const void*’ to `void*’
mprotect-test.c:7: error: initializing argument 1 of `int mprotect(void*, size_t, int)’
$
legutóbbi hsz