system.map和vmlinux.o中的内存地址是否相互对应? 例如,以下是system.map文件的一部分
c03011ec T handle_fiq_as_nmi
c0301270 T do_IPI
c0301274 T do_DataAbort
c0301328 T do_PrefetchAbort
这是vmlinux.o的反汇编文件的一部分。
000001ec <handle_fiq_as_nmi>:
1ec: e92d4038 push {r3, r4, r5, lr}
1f0: e3004000 movw r4, #0
1f4: ee1d3f90 mrc 15, 0, r3, cr13, cr0, {4}
1f8: e3404000 movt r4, #0
1fc: e7935004 ldr r5, [r3, r4]
为什么handle_fiq_as_nmi有两个不同的地址?
答案 0 :(得分:1)
vmlinux.o
是可重定位文件,而不是可执行文件文件。
使用file vmlinux.o
查看其类型,或更详细的readelf -h vmlinux.o
需要将可重定位文件链接在一起以生成最终可执行文件(例如a.out
,对于您的情况vmlinux
)。
可重定位文件中的地址不是最终地址,它们将在链接期间重新定位。请参阅linking,ELF format。 System.map
中的地址是最后一个。