원래 pyKdump 관련해서는 작성한지 몇일 됐었는데, 귀찮아서 한번에 쓰는 중이다.
이 pyKdump 자체도 상당히 강력하고 도움이 되는 Extension 이지만,
실제 내가 자주 쓰는 명령은 dis 명령으로써, 리버스 분석 명령인데,
이를 더욱 더 쉽게 도와주는 pyKdump 의 Extension 이 있어 소개하고자 한다.
바로 레드햇에서 근무하시는 커널박사님이신 권성주님의 PyCrashext 이다.
https://github.com/sungju/pycrashext
설치는 간단하므로 역시 해당 위키페이지를 살펴보고 설치하면 된다.
KERNEL: vmlinux
DUMPFILE: 127.0.0.1-2017-12-17-18:34:31/vmcore [PARTIAL DUMP]
CPUS: 4
DATE: Sun Dec 17 18:34:01 2017
UPTIME: 97 days, 02:15:47
LOAD AVERAGE: 1.39, 1.62, 1.34
TASKS: 1190
NODENAME: ******
RELEASE: 4.1.12-94.3.8.el6uek.x86_64
VERSION: #2 SMP Fri Jun 30 11:00:28 PDT 2017
MACHINE: x86_64 (3492 Mhz)
MEMORY: 71.7 GB
PANIC: "BUG: unable to handle kernel NULL pointer dereference at 0000000000000068"
PID: 2064
COMMAND: "kworker/3:3"
TASK: ffff881191d4f000 [THREAD_INFO: ffff880b736c4000]
CPU: 3
STATE: TASK_RUNNING (PANIC)
crash64> extend /usr/local/lib64/mpykdump64.so
Setting scroll off while initializing PyKdump
/usr/local/lib64/mpykdump64.so: shared object loaded
crash64> epython /root/pycrashext/regext.py
** Execution took 0.01s (real) 0.01s (CPU)
crash64>
요로코롬 .bash_profile 과 .crashXXrc 에 epython 으로 regext.py 를 로드하면
크래쉬 툴에 명령어가 추가된다.
crash64> help
* edis ipcs ptob syscallinfo
alias emodinfo irq ptov task
ascii epstree kmem rd taskinfo
auditinfo epython list repeat timeinfo
autocheck eval lockup revs timer
bh exit log runq traceinfo
bpf extend mach schedinfo tree
bt files meminfo scsi tslog
btop foreach mod scsishow union
cgroupinfo fregs mount search vm
cmds_test fsinfo net seinfo vmwareinfo
cpuinfo fuser netinfo set vtop
crashinfo gdb nfsshow sig waitq
dev hangcheck p struct whatis
devinfo hanginfo ps swap wr
dis help psinfo sym xportshow
dmshow insights pte sys q
굵게 표시된 부분들이 성주님이 만들어 넣은 커맨드셋인데
상당한 양임을 알 수 있다.
일단 특이한점은 레드햇에서 근무하고 계시는 성주님의 특성으로 특정 rule 셋을 바탕으로
autocheck 와 insight 명령을 통해 알려진 버그를 찾아준다는 점이다.
crash64> autocheck
No issues detected
** Execution took 2.69s (real) 2.69s (CPU)
crash64> autocheck --help
Usage: autocheck.py [options]
Options:
-h, --help show this help message and exit
-l, --list Shows the currently available rules
** Execution took 0.00s (real) 0.00s (CPU)
crash64> autocheck -l
---------------------------------------------------------------------------
[rules.hung_task_check]: Checking hung tasks
---------------------------------------------------------------------------
There are 1 rules available for this vmcore
===========================================================================
** Execution took 0.02s (real) 0.02s (CPU)
안타깝게도, autocheck 와 insights 는 레드햇 버그질라에 접근이 가능하거나
insight 사이트에 접근이 가능해야 유용한 기능이다.
이걸 차치하더라도 다양한 기능을 제공한다.
cpu 상태에 대한 내용을 아래와 같이 쉽게 얻을 수 있고,
crash64> cpuinfo -h
Usage: cpuinfo.py [options]
Options:
-h, --help show this help message and exit
-f, --cpufreq CPU frequency details
-i, --cpuid Show CPU's physical and core ID
-t, --tlb Show CPU tlb state
** Execution took 0.00s (real) 0.00s (CPU)
crash64> cpuinfo -f
CPU 0 (0xffff881222542600) min = 1200000, max = 3700000, cur = 3492151
cpudata = 0xffff8812224bab00, current_pstate = 13, turbo_pstate = 37,
min_pstate = 12, max_pstate = 35, policy = CPUFREQ_POLICY_POWERSAVE
sample.freq = 1254941,
updated 56 ns (0 sec) ago
CPU 1 (0xffff881222542800) min = 1200000, max = 3700000, cur = 3492151
cpudata = 0xffff8812224bac00, current_pstate = 13, turbo_pstate = 37,
min_pstate = 12, max_pstate = 35, policy = CPUFREQ_POLICY_POWERSAVE
sample.freq = 1235390,
updated 56 ns (0 sec) ago
CPU 2 (0xffff881222542a00) min = 1200000, max = 3700000, cur = 3492151
cpudata = 0xffff8812224bad00, current_pstate = 13, turbo_pstate = 37,
min_pstate = 12, max_pstate = 35, policy = CPUFREQ_POLICY_POWERSAVE
sample.freq = 1255351,
updated 56 ns (0 sec) ago
CPU 3 (0xffff881222542c00) min = 1200000, max = 3700000, cur = 3492151
cpudata = 0xffff8812224bae00, current_pstate = 13, turbo_pstate = 37,
min_pstate = 12, max_pstate = 35, policy = CPUFREQ_POLICY_POWERSAVE
sample.freq = 1199980,
updated 56 ns (0 sec) ago
** Execution took 0.27s (real) 0.26s (CPU)
crash64> cpuinfo -i
<<< Physical CPU 0 >>>
CPU 0, core 0 : 0xffff88127fc0a040 Intel(R) Xeon(R) CPU E5-2637 v4 @ 3.50GHz
CPU 1, core 1 : 0xffff88127fc8a040 Intel(R) Xeon(R) CPU E5-2637 v4 @ 3.50GHz
<<< Physical CPU 1 >>>
CPU 2, core 0 : 0xffff88127fd0a040 Intel(R) Xeon(R) CPU E5-2637 v4 @ 3.50GHz
CPU 3, core 1 : 0xffff88127fd8a040 Intel(R) Xeon(R) CPU E5-2637 v4 @ 3.50GHz
For details, run 'cpuinfo_x86 <address>'
** Execution took 0.00s (real) 0.00s (CPU)
crash64> cpuinfo -t
CPU 0 : state = 2 [TLBSTATE_LAZY], active_mm = 0xffff8812070a8000 (oracle)
CPU 1 : state = 2 [TLBSTATE_LAZY], active_mm = 0xffff8812225fcb00 (ocssd.bin)
CPU 2 : state = 2 [TLBSTATE_LAZY], active_mm = 0xffff8811c3ef3c00 (crsd.bin)
CPU 3 : state = 2 [TLBSTATE_LAZY], active_mm = 0xffff8812070af800 (oracle)
** Execution took 0.03s (real) 0.03s (CPU)
CPU tlb status 보여주는것 보이는가!!
메모리 상태도 훨씬 더 잘 보여준다.
crash64> meminfo -h
Usage: meminfo.py [options]
Options:
-h, --help show this help message and exit
-u, --memusage Show memory usages by tasks
-n, --nogroup Show data in individual tasks
-a, --all Show all the output
-s, --slabtop Show slabtop-like output
-S SLABDETAIL, --slabdetail=SLABDETAIL
Show details of a slab
-i, --meminfo Show /proc/meminfo-like output
-p PERCPU, --percpu=PERCPU
Convert percpu address into virtual address
-t PERCPU_TYPE, --type=PERCPU_TYPE
Specify percpu type : u8, u16, u32, u64, s8, s16, s32, s64, int
-d, --details Show detailed output
-v, --vm Show 'vm' output with more details
-e ERROR_CODE, --error=ERROR_CODE
Interpret page_fault error code
** Execution took 0.00s (real) 0.00s (CPU)
crash64> meminfo -u
======================================================================
[ RSS usage ] [ Process name ]
======================================================================
65 GiB ( 68961924 KiB) oracle
545 MiB ( 558888 KiB) java
154 MiB ( 158336 KiB) ologgerd
152 MiB ( 155912 KiB) oraagent.bin
136 MiB ( 139460 KiB) crsd.bin
128 MiB ( 131452 KiB) ocssd.bin
104 MiB ( 106576 KiB) osysmond.bin
94 MiB ( 96352 KiB) orarootagent.bi
93 MiB ( 96208 KiB) cssdagent
93 MiB ( 95680 KiB) cssdmonitor
======================================================================
Total memory usage from user-space = 68.54 GiB
** Execution took 0.03s (real) 0.03s (CPU)
crash64> meminfo -s
====================================================================
kmem_cache NAME TOTAL OBJSIZE
====================================================================
0xffff88127e889c00 buffer_head 752812 K 104
0xffff88121e8c9200 ext4_inode_cache 237376 K 1112
0xffff88127e803f00 radix_tree_node 237312 K 576
0xffff88127e889e00 dentry 146756 K 192
0xffff88122a25ae00 ext4_extent_status 18920 K 40
0xffff88127e801b00 kmalloc-64 12036 K 64
0xffff88122aa7d400 proc_inode_cache 11312 K 600
0xffff88127e801600 kmalloc-512 10992 K 512
0xffff88127e889f00 inode_cache 9504 K 544
0xffff88127e889b00 vm_area_struct 9068 K 200
====================================================================
** Execution took 0.37s (real) 0.37s (CPU)
crash64> meminfo -v
PID: 2064 TASK: ffff881191d4f000 CPU: 3 COMMAND: "kworker/3:3"
MM PGD RSS TOTAL_VM
0 0 0k 0k
** Execution took 0.00s (real) 0.00s (CPU)
crash64> meminfo -i
MemTotal: 73645076 kB
MemFree: 3573856 kB
MemAvailable: 20948876 kB
Buffers: 1256148 kB
Cached: 61856232 kB
SwapCached: 875 kB
Active: 11171682 kB
Inactive: 5587827 kB
Active(anon): 4256688 kB
Inactive(anon): 331211 kB
Active(file): 6914994 kB
Inactive(file): 5256616 kB
Unevictable: 89004 kB
Mlocked: 89005 kB
SwapTotal: 16777212 kB
SwapFree: 16711872 kB
Dirty: 1466 kB
Writeback: 0 kB
AnonPages: 4282656 kB
Mapped: 14429048 kB
Shmem: 14350532 kB
Slab: 1516736 kB
SReclaimable: 1418400 kB
SUnreclaim: 98336 kB
KernelStack: 4756 kB
PageTables: 800684 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 13399938 kB
Committed_AS: 5643195 kB
VmallocTotal: 60471536787456 kB
VmallocUsed: 508719104 kB
VmallocChunk: 35183562584064 kB
HardwareCorrupted: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap2M: 111648768 kB
DirectMap4M: 49242112 kB
** Execution took 3.48s (real) 3.48s (CPU)
User space 의 메모리사용량을 보여주는 부분에서 감탄하시는 분 있을거라 생각한다.
흔히들 많이 물어보는 내용이지만 메모리를 직접 검색해가야 하는 번거로움으로 인해
그냥 알수 없음으로 대답하곤 하는데 말이다... ( 고백한다 ㅋㅋㅋ 귀찮은 작업이라 그랬다 )
Asm 의 레지스터 및 인스트럭션에 대한 설명도 간략하게 제공한다.
crash64> revs
** function parameters for x86_64 **
%rdi - 1st argument (%rdi:64, %edi:32, %di:16, %dl:8)
%rsi - 2nd argument (%rsi:64, %esi:32, %si:16, %sl:8)
%rdx - 3rd argument (%rdx:64, %edx:32, %dx:16, %dl:8)
%rcx - 4th argument (%rcx:64, %ecx:32, %cx:16, %cl:8)
%r8 - 5th argument (%r8:64, %r8d:32, %r8w:16, %r8b:8)
%r9 - 6th argument (%r9:64, %r9d:32, %r9w:16, %r9b:8)
%rsp - Stack pointer
%rax - Return value
%rip - Instruction pointer
** Execution took 0.00s (real) 0.01s (CPU)
프로세스 트리 역시 향상된 트리형태로 색까지 입혀서 보여준다.
crash64> epstree -h
Usage: epstree.py [options]
Options:
-h, --help show this help message and exit
-p Print process ID
-g Print number of threads
-s Print task state
-t TASK_ID Print specific task and its children
** Execution took 0.00s (real) 0.00s (CPU)
crash64> epstree
swapper/0 -+- init -+- udevd -+- udevd
| | `- udevd
| |- init.tfa -+- sleep
| |- init.ohasd
| |- multipathd
| |- java
| |- auditd
| |- portreserve
| |- rsyslogd
| |- irqbalance
| |- rpcbind
| |- pbx_exchange
| |- dbus-daemon
| |- rpc.statd
| |- hald -+- hald-runner -+- hald-addon-acpi
| | `- hald-addon-inpu
| |- automount
| |- ntpd
| |- master -+- qmgr
시스템 콜 상태도 확인이 가능하다.
crash64> syscallinfo -c
2 ffffffffa04a95a0 (t) my_open [seos]
4 ffffffffa04a8260 (t) my_stat [seos]
5 ffffffffa04a8620 (t) my_fstat [seos]
6 ffffffffa04a8350 (t) my_lstat [seos]
42 ffffffffa04a07e0 (t) my_connect [seos]
43 ffffffffa04a0580 (t) my_accept [seos]
59 ffffffff816e51d0 (T) stub_execve arch/x86/kernel/entry_64.S: 509
callq 0xffffffffa04a88b0 <my_execve>
60 ffffffffa04a0410 (t) my_exit [seos]
62 ffffffffa04a3fe0 (t) my_kill [seos]
76 ffffffffa04aacf0 (t) my_truncate [seos]
80 ffffffffa04aafb0 (t) my_chdir [seos]
81 ffffffffa04ab0a0 (t) my_fchdir [seos]
82 ffffffffa04aa9e0 (t) my_rename [seos]
83 ffffffffa04aa820 (t) my_mkdir [seos]
84 ffffffffa04aa680 (t) my_rmdir [seos]
85 ffffffffa04a97a0 (t) my_creat [seos]
86 ffffffffa04a98f0 (t) my_link [seos]
87 ffffffffa04a9ca0 (t) my_unlink [seos]
88 ffffffffa04a9b20 (t) my_symlink [seos]
90 ffffffffa04a9fd0 (t) my_chmod [seos]
91 ffffffffa04aade0 (t) my_fchmod [seos]
92 ffffffffa04aa0c0 (t) my_chown [seos]
93 ffffffffa04aaec0 (t) my_fchown [seos]
94 ffffffffa04aa1c0 (t) my_lchown [seos]
101 ffffffffa04a0ed0 (t) my_ptrace [seos]
105 ffffffffa049e650 (t) my_setuid [seos]
106 ffffffffa049ee10 (t) my_setgid [seos]
113 ffffffffa049f990 (t) my_setreuid [seos]
114 ffffffffa049f390 (t) my_setregid [seos]
116 ffffffffa04a0230 (t) my_setgroups [seos]
117 ffffffffa049fdd0 (t) my_setresuid [seos]
119 ffffffffa049f500 (t) my_setresgid [seos]
122 ffffffffa049ea10 (t) my_setfsuid [seos]
123 ffffffffa049f0d0 (t) my_setfsgid [seos]
129 ffffffffa04a4190 (t) my_rt_sigqueueinfo [seos]
132 ffffffffa04aa2c0 (t) my_utime [seos]
133 ffffffffa04a9e00 (t) my_mknod [seos]
165 ffffffffa04a0f90 (t) my_mount [seos]
166 ffffffffa04a1170 (t) my_umount [seos]
169 ffffffffa049e520 (t) my_reboot [seos]
175 ffffffffa04a12c0 (t) my_init_module [seos]
176 ffffffffa04a1620 (t) my_delete_module [seos]
188 ffffffffa04accb0 (t) my_setxattr [seos]
189 ffffffffa04acdb0 (t) my_lsetxattr [seos]
190 ffffffffa04acbb0 (t) my_fsetxattr [seos]
197 ffffffffa04aceb0 (t) my_removexattr [seos]
198 ffffffffa04ad060 (t) my_lremovexattr [seos]
199 ffffffffa04acf90 (t) my_fremovexattr [seos]
231 ffffffffa04a04a0 (t) my_exit_group [seos]
235 ffffffffa04aa3b0 (t) my_utimes [seos]
257 ffffffffa04abcc0 (t) my_openat [seos]
258 ffffffffa04abed0 (t) my_mkdirat [seos]
259 ffffffffa04ac090 (t) my_mknodat [seos]
260 ffffffffa04ac260 (t) my_fchownat [seos]
261 ffffffffa04abbd0 (t) my_futimesat [seos]
263 ffffffffa04ac370 (t) my_unlinkat [seos]
264 ffffffffa04ac4f0 (t) my_renameat [seos]
265 ffffffffa04ac710 (t) my_linkat [seos]
266 ffffffffa04ac920 (t) my_symlinkat [seos]
268 ffffffffa04acaa0 (t) my_fchmodat [seos]
280 ffffffffa04ab9e0 (t) my_utimensat [seos]
288 ffffffffa04a06b0 (t) my_accept4 [seos]
322 ffffffff816e51f8 (T) stub_execveat arch/x86/kernel/entry_64.S: 532
callq 0xffffffffa04a8de0 <my_execveat>
===========================================================================
61 system calls were replaced
2 system calls were modified
** Execution took 6.46s (real) 6.44s (CPU)
CPU lock 정보도 확인할 수 있다.
crash64> lockup -h
Usage: lockup.py [options]
Options:
-h, --help show this help message and exit
-r, --reverse show longest holder at top
-t, --tasks show tasks in each runqueue
-s, --rt show RT statistics
-d, --details show task details
** Execution took 0.00s (real) 0.01s (CPU)
crash64> lockup -r
CPU 0: 0.00 sec behind by 0xffffffff81ab54e0, swapper/0 [N:120] (0 in queue)
CPU 3: 0.00 sec behind by 0xffff881191d4f000, kworker/3:3 [N:120] (1 in queue)
CPU 1: 0.00 sec behind by 0xffff88122a7aaa00, swapper/1 [N:120] (0 in queue)
CPU 2: 0.00 sec behind by 0xffff88122a7ab800, swapper/2 [N:120] (0 in queue)
무엇보다 사실 권성주샘의 익스텐션을 사용해야 하는 가장 큰 이유는 바로!
edis 이다. dis 명령의 향상판이라고 보면 되는데, 색깔도 이쁘게 넣어서
다소 어지러운 Deasm 코드를 보기 쉽게, 또 스택및 펑션에 대한 주소도
추가로 각주를 달아줄 뿐 아니라, Jmp 문등의 분기 발생 시,
색깔과 기호로 pair 를 표시해주어 손쉽게 따라갈 수 있도록 해준다!!
crash64> edis -h
Usage: edis.py [options]
Options:
-h, --help show this help message and exit
-r, --reverse displays all instructions from the start of the routine up to and including the designated address.
-l, --list Dummy argument to match with 'dis -l'
-S STACKADDR, --stack=STACKADDR
Set stack address for disasm operation
-g, --graph display jump graph on the left
-f, --full Dispaly full function code
-b, --symbol Translate symbols if possible
-j JUMP_OP_LIST, --jump=JUMP_OP_LIST
Shows graph for the specified jump operations only
-n, --noaction Only colorising the output and not connection to server
-s, --sourceonly Display source lines only, but not based on function
-c, --callgraph Shows call graph for a function
-m MAX_DEPTH, --max_depth=MAX_DEPTH
Maximum depth of graph for callgraph. default=2
** Execution took 0.00s (real) 0.01s (CPU)
crash64> edis -f ffffffff81288f49
CRASHEXT_SERVER environment variable not configured
/usr/src/debug/kernel-4.1.12/linux-4.1.12-94.3.8.el6uek/fs/kernfs/dir.c: 644
0xffffffff81288f30 <kernfs_find_ns>: push %rbp ; 0xffff880b736c7c08
0xffffffff81288f31 <kernfs_find_ns+1>: mov %rsp,%rbp
0xffffffff81288f34 <kernfs_find_ns+4>: sub $0x30,%rsp
0xffffffff81288f38 <kernfs_find_ns+8>: mov %rbx,-0x18(%rbp) ; 0x0000000000000000
0xffffffff81288f3c <kernfs_find_ns+12>: mov %r12,-0x10(%rbp) ; 0xffffffff81771ce0
0xffffffff81288f40 <kernfs_find_ns+16>: mov %r13,-0x8(%rbp) ; 0x0000000000000000
0xffffffff81288f44 <kernfs_find_ns+20>: nopl 0x0(%rax,%rax,1)
/usr/src/debug/kernel-4.1.12/linux-4.1.12-94.3.8.el6uek/include/linux/kernfs.h: 265
0xffffffff81288f49 <kernfs_find_ns+25>: movzwl 0x68(%rdi),%eax
** Execution took 0.08s (real) 0.02s (CPU), Child processes: 0.06s
보았는가? 인스트럭션에 색칠과 밑줄도 해주고, Null point 가 들어가는 부분까지
스택주소 및 16진 값으로 알려주는 부분!! 엄청 유용한 기능임을 알 수 있을것이다.
crash64> edis -c fc_starget_delete
{fc_starget_delete} -+- {fc_terminate_rport_io} -+- {scsi_is_host_device} ...
| |- {*%rax} ...
| `- {scsi_target_unblock} ...
`- {scsi_remove_target} -+- {scsi_is_host_device} ...
|- {_raw_spin_lock_irqsave} ...
|- {_raw_spin_unlock_irqrestore} ...
|- {_raw_spin_unlock_irqrestore} ...
|- {__scsi_remove_target} ...
|- {scsi_target_reap} ...
`- {warn_slowpath_null} ...
멋지지 않은가 ? (라는 말이 자꾸 나오지만 정말이다.) 이렇게 트리형태로도 보여주고,
아래 스샷처럼 화려하게 그렇지만 보기 쉽게 페어로 묶어준기도 한다.
클릭하면 더 자세히 볼 수 있다.
저 화려한 색으로 묶여있는 분기별 라인들이 보이는가?? 감동의 눈물이 흐른다..
소스코드까지 적절한 위치에 있을 경우, 이렇게 보여주기도 한다.
(현재 내 시스템에서는 이렇게 보여주지 않아서 손보고 있는 중이다.)
crash> edis -r ffffffff812461ec /usr/src/debug/kernel-3.10.0-693.11.6.el7/linux-3.10.0-693.11.6.el7.x86_64/fs/proc_namespace.c: 42 41 static int show_sb_opts(struct seq_file *m, struct super_block *sb) 42 { 0xffffffff81246190 <show_sb_opts>:show_sb_optsdata32 data32 data32 xchg %ax,%ax [FTRACE NOP] ... /usr/src/debug/kernel-3.10.0-693.11.6.el7/linux-3.10.0-693.11.6.el7.x86_64/fs/proc_namespace.c: 51 51 for (fs_infop = fs_info; fs_infop->flag; fs_infop++) { 0xffffffff812461da <show_sb_opts+0x4a>:0x4amovslq (%rbx),%rax 0xffffffff812461dd <show_sb_opts+0x4d>:0x4dtest %eax,%eax 0xffffffff812461df <show_sb_opts+0x4f>:0x4fjne 0xffffffff812461c3 <show_sb_opts+0x33> /usr/src/debug/kernel-3.10.0-693.11.6.el7/linux-3.10.0-693.11.6.el7.x86_64/fs/proc_namespace.c: 56 56 return security_sb_show_options(m, sb); 0xffffffff812461e1 <show_sb_opts+0x51>:0x51mov %r12,%rsi 0xffffffff812461e4 <show_sb_opts+0x54>:0x54mov %r13,%rdi 0xffffffff812461e7 <show_sb_opts+0x57>:0x57callq 0xffffffff812b3c70 <security_sb_show_options> /usr/src/debug/kernel-3.10.0-693.11.6.el7/linux-3.10.0-693.11.6.el7.x86_64/fs/proc_namespace.c: 57 57 } 0xffffffff812461ec <show_sb_opts+0x5c>:0x5cpop %rbx
정말 멋지지 않은가!
본문 글에 반영된 색들은 실제로 해당 기능을 사용시 보여주는 색을 그대로 표현한것이다.
사실 본문에 설명한역시 능력자님께서 손수 만들어 주셨다는 점이다.
다만 소스코드 보여주는 역할등은 일부 시스템(파이선 영향인듯) 에서는
완벽하게 돌아가지 않는것 같다.
아래와 같이 간단한 패치를 했다.( 성주샘에게 메일도 보냈으나 반영될지는 모르겠다.. 안되도 그냥 이렇게 수정해 쓰자 ㅋㅋ)
Report 는 반영되었고, 아래와 같이 변경되었다.
---
-----
일단 이것은 edis 뒤에 주소가 인자로 주어지지 않았을 경우 파이선 에러가 출력되는 것을
막고 주소를 넣어달라고 안내하는 것이며,
encode_url 이 Null 일 경우 noaction 옵션이 추가되고 해당 액션이 수행되어야 하는데,
제대로 체크가 되지 않아 보다 직관적으로 none 을 확인하도록 수정해 준 약소한 부분이다.
현재 코드트리가 제대로 출력되지 않는 문제는 아직 손보고 있다.
어찌됐든, 상당히 유용하고 도움이 엄청 되는 확장플러그인이므로,
가능하다면 앞으로 나도 pyKdump 와 pyCrashext 의 향상에 이바지를 하고 싶다.
이제 정말..... 난 먹고살길이 막막해 진것 같다.
오늘을 마지막으로 더이상의 커널 덤프 분석 공유 글은 중단하려고 한다.
그동안 나름대로 잘 읽어봐준 분들께 감사의 인사를 드리고,
다른 더 좋은 주제로 글을 쓸 수 있도록 노력하겠다.
'Skills > mY Technutz' 카테고리의 다른 글
eBPF vmcore Analysis (1) | 2020.04.06 |
---|---|
Mac 에서 launchctl 을 이용하여 특정 명령을 지정된 시간에 자동수행 시켜보자 (0) | 2020.03.19 |
The effective crash-utility for vmcore analysis (PyKdump) (0) | 2019.12.13 |
kernel Dump Analysis #18 (0) | 2019.05.11 |
Kernel Dump Analysis #17 (0) | 2019.04.04 |