最終更新:ID:D7J/gPk67w 2009年04月05日(日) 00:18:52履歴
/* Portable implementation of mprotect. The implementation does not necessarily support PROT_EXEC or PROT_WRITE without PROT_READ. The only guarantees are that no writing will be allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
mprotectの移植可能な実装。この実装は、PROT_READなしでPROT_EXECまたはPROT_WRITEをサポートする必要がない。保証されることは、PROT_WRITEなしではいかなる書き込みも許可されず、PROT_NONEではいかなるアクセスも許可されない。
extern int _gst_mem_protect (PTR addr, size_t len, int prot) ATTRIBUTE_HIDDEN;
int _gst_mem_protect (PTR addr, size_t len, int prot) { #if defined HAVE_MPROTECT return mprotect (addr, len, prot); #elif defined WIN32 DWORD oldprot; int my_prot; switch (prot & (PROT_READ | PROT_WRITE | PROT_EXEC)) { case PROT_NONE: my_prot = 0; break; case PROT_READ: my_prot = PAGE_READONLY; break; case PROT_WRITE: case PROT_READ | PROT_WRITE: my_prot = PAGE_READWRITE; break; case PROT_EXEC: my_prot = PAGE_EXECUTE; break; case PROT_EXEC | PROT_READ: my_prot = PAGE_EXECUTE_READ; break; case PROT_EXEC | PROT_WRITE: case PROT_EXEC | PROT_READ | PROT_WRITE: my_prot = PAGE_EXECUTE_READWRITE; break; default: return -1; } if (VirtualProtect (addr, len, my_prot, &oldprot)) return 0; else return -1; #else return -1; #endif }
タグ
コメントをかく