system.map和vmlinux.o中的内存地址(构建Linux内核之后),它们是否相互对应?

时间:2018-01-31 23:56:25

标签: linux-kernel binaryfiles disassembly

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有两个不同的地址?

1 个答案:

答案 0 :(得分:1)

vmlinux.o可重定位文件,而不是可执行文件文件。

使用file vmlinux.o查看其类型,或更详细的readelf -h vmlinux.o

需要将可重定位文件链接在一起以生成最终可执行文件(例如a.out,对于您的情况vmlinux)。

可重定位文件中的地址不是最终地址,它们将在链接期间重新定位。请参阅linkingELF formatSystem.map中的地址是最后一个。