无法汇编我的代码:警告:警告:在只读部分“.text”中重定位,警告:在 PIE 中创建 DT_TEXTREL

问题描述 投票:0回答:1

我尝试在我的 Linux 电脑上复制我必须在 Windows 电脑上研究的汇编工作区(其中我有如何安装和使用 wsl 的说明),但是当我尝试使用以下方式进行汇编时

./assemble.ps1 ./file.s

我收到这 2 个警告:

/usr/bin/ld: /tmp/cco4Rb1Y.o: warning: relocation in read-only section `.text'
/usr/bin/ld:, warning: creating DT_TEXTREL in a PIE

我尝试组装的代码只是一个简单的测试代码:

.include "./files/utility.s"

.data
msg: .ascii "Ok /r"

.text
_main: nop
    lea msg, %ebx
    call outline
    ret

实用程序文件是一个对我们学生的目标有用的文件,我认为没有什么会影响问题。

我读过一些关于使用 rip 引用寻址(或者在我的情况下是 32 位的 eip)的内容,但没有用

ubuntu assembly windows-subsystem-for-linux compiler-warnings
1个回答
0
投票

由于 32 位本身不支持 EIP 相对寻址,因此您必须手动完成。通常的方法是编写一个函数,从堆栈中获取返回地址,然后将其用作固定参考点。像这样的东西:

_main: nop
    call geteip
eip:
    add $msg - eip, %ebx
    call outline
    ret

geteip:
    mov (%esp), %ebx
    ret
© www.soinside.com 2019 - 2024. All rights reserved.