analysis of segment fault error

2022. 11. 14. 14:51카테고리 없음

    목차
반응형

https://enodev.fr/posts/decode-segfault-errors-in-dmesg.html

 

Decode segfault errors in dmesg

How to decode a segfault error displayed in dmesg and use to debug your program

enodev.fr

dmesg를 통해 segment fault을 일으킨 process에 대한 정보를 확인할 수 있습니다. 

 

... test [106309]: segfault at ffffffffffffffed ip 000000000055a612 sp 00007fa9bbee1330 error 5

 

위와 같이 출력된 log에서 

test는 program의 이름을, 그리고 106309는 pid를 의미하며, ip 이후의 주소는 instruction pointer의 주소값을 의미합니다. sp는 stack pointer입니다. error는 에러의 코드를 의미하며 위 page link에서도 확인할 수 있듯이 다음의 의미를 가지고 있습니다. 

 

/*
 * Page fault error code bits:
 *
 *   bit 0 ==    0: no page found       1: protection fault
 *   bit 1 ==    0: read access         1: write access
 *   bit 2 ==    0: kernel-mode access  1: user-mode access
 *   bit 3 ==                           1: use of reserved bit detected
 *   bit 4 ==                           1: fault was an instruction fetch
 *   bit 5 ==                           1: protection keys block access
 *   bit 15 =                           1: SGX MMU page-fault
 */
enum x86_pf_error_code {
        X86_PF_PROT     =               1 << 0,
        X86_PF_WRITE    =               1 << 1,
        X86_PF_USER     =               1 << 2,
        X86_PF_RSVD     =               1 << 3,
        X86_PF_INSTR    =               1 << 4,
        X86_PF_PK       =               1 << 5,
        X86_PF_SGX      =               1 << 15,
};
반응형