方法:先通过 System.map 找到函数的起始地址,然后通过 objdump 得到反汇编后的内容。
以下示例用来查看内核中 sys_getpid() 函数的汇编代码,其中,stop-address 的值是拍脑袋想出来的。
$ grep sys_getpid ./System.map
ffffffff8026d920 T sys_getpid
$ objdump -d --start-address=0xffffffff8026d920 --stop-address=0xffffffff8026e920 ./vmlinux >tmp.S
$ head -15 tmp.S
./vmlinux: file format elf64-tradlittlemips
Disassembly of section .text:
ffffffff8026d920 <sys_getpid>:
ffffffff8026d920: 67bdfff0 daddiu sp,sp,-16
ffffffff8026d924: ffbf0008 sd ra,8(sp)
ffffffff8026d928: 03e00825 move at,ra
ffffffff8026d92c: 0c088fd0 jal ffffffff80223f40 <ftrace_caller>
ffffffff8026d930: 67ac0008 daddiu t0,sp,8
ffffffff8026d934: df840000 ld a0,0(gp)
ffffffff8026d938: 00003025 move a2,zero
ffffffff8026d93c: 0c09ebd2 jal ffffffff8027af48 <__task_pid_nr_ns>