アドレスからソースコードの位置を探すコマンド

カーネル飛んだ時とか、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