gpt4 book ai didi

linux - 'BL' arm指令反汇编如何工作?

转载 作者:IT王子 更新时间:2023-10-29 00:12:03 24 4
gpt4 key购买 nike

'bl' 或带有链接指令的分支几乎总是变成 0xebfffffe

但是,处理器和 GNU binutils objdump 以某种方式知道分支位置:

00000000 <init_module>:
0: e1a0c00d mov ip, sp
4: e92ddff0 push {r4, r5, r6, r7, r8, r9, sl, fp, ip, lr, pc}
8: e24cb004 sub fp, ip, #4
c: e24dd038 sub sp, sp, #56 ; 0x38
10: ebfffffe bl 0 <init_module>
14: e59f0640 ldr r0, [pc, #1600] ; 65c <init_module+0x65c>
18: ebfffffe bl 74 <init_module+0x74>

他们怎么知道的?

最佳答案

问题是由于您正在查看目标文件的反汇编,而不是最终的可执行文件或共享对象。

当汇编程序生成目标文件时,bl 目标的最终地址还没有固定(它取决于将与其链接的其他目标文件)。因此,汇编器将地址设置为 0,但也添加了一个重定位,告诉链接器这个 bl 应该放在最终文件中的什么位置。 (您可以通过添加 -r 开关在 objdump 中查看重定位信息。)

链接时,链接器处理重定位,计算目标函数的最终地址并修补指令,使目标地址对齐。如果反汇编最终链接的可执行文件,您将看到不同的操作码。

关于linux - 'BL' arm指令反汇编如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15003701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com