アドレスからソースコードの位置を探すコマンド
カーネル飛んだ時とか、RIP(EIP)からobjdump -d vmlinuxを見ながら位置を探したりしてたんだけれども、binutilsに含まれてるaddr2line使えばソースコードの行数簡単に見れたのね。
まぁ、これがあるからといってobjdumpでディスアセンブルさせて眺めたいケースが無くなるわけじゃないから、併用した方がいいんだろうけど。
objdumpで探す
$ cd ~/linux $ objdump -l -d vmlinux |less (/ ffffffff81525fc0と入力してReturn) ffffffff81525fc0 <dev_queue_xmit>: dev_queue_xmit(): /home/syuu/bcube-linux-stable/net/core/dev.c:2464 ffffffff81525fc0: 55 push %rbp ffffffff81525fc1: 48 89 e5 mov %rsp,%rbp ffffffff81525fc4: 41 57 push %r15 ffffffff81525fc6: 41 56 push %r14 ffffffff81525fc8: 41 55 push %r13 ffffffff81525fca: 41 54 push %r12 ffffffff81525fcc: 53 push %rbx ffffffff81525fcd: 48 83 ec 28 sub $0x28,%rsp ffffffff81525fd1: e8 6a b4 0e 00 callq ffffffff81611440 <mcount> /home/syuu/bcube-linux-stable/net/core/dev.c:2465 ffffffff81525fd6: 4c 8b 6f 20 mov 0x20(%rdi),%r13 /home/syuu/bcube-linux-stable/net/core/dev.c:2464 ffffffff81525fda: 48 89 fb mov %rdi,%rbx rcu_read_lock_bh(): /home/syuu/bcube-linux-stable/include/linux/rcupdate.h:679 ffffffff81525fdd: e8 ee 10 b5 ff callq ffffffff810770d0 <local_bh_disable> /home/syuu/bcube-linux-stable/include/linux/rcupdate.h:681 ffffffff81525fe2: 45 31 c9 xor %r9d,%r9d ffffffff81525fe5: 31 d2 xor %edx,%edx
addr2lineで探す
$ addr2line -e vmlinux -a ffffffff81525fc0 0xffffffff81525fc0 /home/syuu/linux/net/core/dev.c:2464