시스템 호출을 연결하기 위해 Linux 커널 모듈을 사용하려고 합니다. 그러나 Evince를 사용하여 PDF 파일을 열면 open
가 없고 이 특정 파일 read
에는 .write
lstat
여기네 strace
로그strace evince folder1/test.pdf
그래서 evince가 파일에 사용하는 시스템 open
호출 이 무엇인지 알고 싶습니다 read
.
답변1
@ThomasDickey가 지적했듯이 모든 스레드에 대한 추적을 포함하려면 strace
이 옵션을 전달해야 합니다 .-f
( clone()
시스템 호출은 프로세스가 아닌 새 스레드를 생성하지만 여전히 -f
필요합니다 .strace
우려되는 주제가 있습니다.)
모든 스레드를 추적한 후에는 open
상위 스레드가 되어 파일 설명자 19에서 읽기 전용 모드로 파일을 엽니다.
open("/home/xytao/folder1/test.pdf", O_RDONLY) = 19
파일의 내용은 작은 256자 버퍼에 대한 일련의 호출을 수행하여 읽으며 pread
, 그 중 첫 번째는 %PDF-1.3
헤더를 가져옵니다.
pread(19, "%PDF-1.3\r\n%\241\263\305\327\r\n3 0 obj\r\n<</Fil"..., 256, 0) = 256
추적을 보면 lseek
(파일 크기를 결정하기 위해) 파일 끝에 도달한 다음 거기에서 여러 데이터 블록을 읽는 것을 볼 수 있습니다. 문서에 있는 페이지에 대한 정보인 것 같아요.
다음은 pread
파일 중간의 오프셋에서 발생하지만 모두 "페이지"에 대한 일부 정보로 시작하는 것으로 보이므로 이는 PDF 문서의 페이지 수를 세는 증거라고 생각합니다. 파일.