linux下面mmap和setsignal函数用法

时间:2023-03-10 06:42:42
linux下面mmap和setsignal函数用法
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <sys/stat.h>
#include <signal.h>
#include <setjmp.h> char* buf;
struct stat statbuf; void handler(int signo)
{
printf("permission denied\n"); if (mprotect(buf, statbuf.st_size, PROT_READ|PROT_WRITE) == -)
{
perror("failed to alter permission");
exit();
}
printf("permission modified\n");
} int main()
{
int fd; if (signal(SIGSEGV, handler) == SIG_ERR)
{
printf("can not set handler for SIGSEGV.\n");
exit();
} if (stat("test.txt", &statbuf) == -)
{
perror("failed to get stat");
exit();
} fd = open("test.txt", O_RDWR);
if (fd == -)
{
perror("failed to open file\n");
exit();
} buf = (char*)mmap(NULL, statbuf.st_size, PROT_READ, MAP_SHARED, fd, ); // readonly memory map
printf("try to write to a readonly memccpy map\n");
memcpy(buf, "china\n", ); if (munmap(buf, statbuf.st_size) == -)
{
perror("failed to unmap\n");
exit();
}
close(fd); return ;
}