system.map和vmlinux.o中的内存地址(构建Linux内核后),它们是否一一对应?
Memory addresses in the system.map and vmlinux.o (after building Linux kernel), Do they correspond to each other?
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 有两个不同的地址?
vmlinux.o
是一个 可重定位的 文件,而不是 可执行的 文件。
用file vmlinux.o
看其类型,还是更详细readelf -h vmlinux.o
需要将可重定位文件链接在一起以生成最终的可执行文件(如 a.out
,对于您的情况是 vmlinux
)。
可重定位文件中的地址不是最终地址,它们将在链接时重定位。参见 linking, ELF format。 System.map
中的地址是最后一个。
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 有两个不同的地址?
vmlinux.o
是一个 可重定位的 文件,而不是 可执行的 文件。
用file vmlinux.o
看其类型,还是更详细readelf -h vmlinux.o
需要将可重定位文件链接在一起以生成最终的可执行文件(如 a.out
,对于您的情况是 vmlinux
)。
可重定位文件中的地址不是最终地址,它们将在链接时重定位。参见 linking, ELF format。 System.map
中的地址是最后一个。