Linux kernel system.map和vmlinux.o(构建Linux内核后)中的内存地址是否相互对应?
system.map和vmlinux.o中的内存地址是否相互对应? 例如,下面是system.map文件的一部分Linux kernel system.map和vmlinux.o(构建Linux内核后)中的内存地址是否相互对应?,linux-kernel,binaryfiles,disassembly,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
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有两个不同的地址 vmlinux.o是一个可重新定位的文件,而不是可执行文件
使用文件vmlinux.o查看其类型,或更详细的readelf-hvmlinux.o
可重新定位的文件需要链接在一起,以生成最终的可执行文件,如a.out,对于您的情况,它是vmlinux
可重新定位文件中的地址不是最终地址,它们将在链接过程中重新定位。看见System.map中的地址是最终地址。因为在实际加载过程中发生了重新定位?:-在这种情况下,不会加载vmlinux.o。我只是在分解创建的二进制文件。你可以用linux、assembly等更流行的标签来标记你的问题,以获得更快的答案。