Linux下16位链接

发布于 2024-10-05 15:35:10 字数 281 浏览 11 评论 0原文

我在linux下使用NASM Assembler 当我使用命令“nasm -f elf -l hello.lst hello.asm”时 效果很好 但是当与 gcc“gcc -o hello hello.o”链接时 它会生成错误:

hello.asm:(.text+0x4): relocation truncated to fit: R_386_16 against `.data' collect2: ld 返回 1 退出状态

我了解到这是 gcc 和 16 位的一些问题,

有什么解决方案吗?

I'm using NASM Assembler under linux
when I use the command "nasm -f elf -l hello.lst hello.asm"
it works fine
but when linking with gcc "gcc -o hello hello.o"
it generates an error :

hello.asm:(.text+0x4): relocation truncated to fit: R_386_16 against `.data'
collect2: ld returned 1 exit status

I learned that this is some problem with gcc and 16-bit

any solutions ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

空名 2024-10-12 15:35:10

Linux 甚至没有 16 位子系统 - 即使你有 gcc 链接它,你仍然无法执行它!为什么不直接使用 .bits 32 呢?

Linux doesn't even have a 16-bit subsystem - even if you got gcc to link it, you still couldn't execute it! Why don't you just use .bits 32?

满意归宿 2024-10-12 15:35:10

几年前我遇到过同样的情况,今年又遇到了同样的情况。

处理它的两种方法是:

  1. 编写自己的 16 位友好链接器(至少需要解析 .rel.text 部分)。
  2. 使用基本符号(或多个符号)手动计算绝对地址(.rel 部分仍会创建,但可以删除)。然而,这种方法很容易出错。

我总是最终做 2,但我可能应该花时间编写一个链接器(或修补 GNU ld...)。

I faced the same situation a few years ago and again this year.

Two ways to deal with it are:

  1. Write your own 16-bit friendly linker (you need to parse .rel.text section at least).
  2. Use a base symbol (or symbols) to calculate the absolute addresses manually (the .rel sections are still created, but can be removed). However, this method is very error prone.

I always end up doing 2, but I should probably make time to write a linker (or patching GNU ld...).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文