Я написал небольшую программу, которая читает и записывает память процесса, но я не могу понять, почему он не работает.
это мой код:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/ptrace.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
int main()
{
pid_t pid=3169;
char mem_file_name[2048];
int mem_fd;
int offset=0;
char buf[1005128];
sprintf(mem_file_name, "/proc/%d/mem", pid);
mem_fd = open(mem_file_name, O_RDWR,S_IRWXU);
printf("1 %s\n",strerror(errno));
ptrace(PTRACE_ATTACH, pid, NULL, NULL);
printf("2 %s\n",strerror(errno));
waitpid(pid, NULL, 0);
printf("3 %s\n",strerror(errno));
lseek(mem_fd, offset, SEEK_SET);
printf("4 %s\n",strerror(errno));
read(mem_fd, buf, _SC_PAGE_SIZE);
printf("5 %s\n",strerror(errno));
ptrace(PTRACE_DETACH, pid, NULL, NULL);
printf("6 %s\n",strerror(errno));
printf("%s\n",buf );
}
это мой вывод:
1 Success
2 Success
3 Success
4 Success
5 Input/output error
6 Input/output error
Я скомпилировал с
gcc -Wall -Wextra main.c
и я запускаю с правами root
sudo ./a.out
в этом примере я только пытаюсь читать из процесса, но это не работает.
Моя идея - сбросить память процесса, но я не знаю, почему я не могу читать.
ps Я знаю, что есть некоторые инструменты, которые могут выгружать память процесса, но я хочу создать небольшую программу для упражнений.