bootloader ld 0x10000 relocation truncated to fit: R_X86_64_16
.intel_syntax noprefix
.code16
.text
.globl _start
_start:
mov ax, cs
mov ds, ax
mov es, ax
mov ax, 0x00
mov ss, ax
mov sp, 0x7c00
mov ax, 0x1301
mov bx, 0x000f
mov dx, 0x0200 # row 2
mov cx, 12
push ax
mov ax, ds
mov es, ax
pop ax
lea bp, StartLoaderMessage
int 0x10
jmp $
StartLoaderMessage: .ascii "Start Loader"
操作:
$ as -o loader.o loader.s
$ ld -Ttext 0x10000 --oformat=binary loader.o -o loader.bin # 0x10000刚好1M // 报错
loader.o: In function `_start':
(.text+0x22): relocation truncated to fit: R_X86_64_16 against `.text'+28
$ ld -Ttext 0x7c00 --oformat=binary loader.o -o loader.bin2 # 正常
将loader.bin2文件反编译后发现StartLoaderMessage是绝对定位, 使用0x10000时超过了real mode 16-bit寻址规定的1M空间, 请问这种情况要怎么解决?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论