我尝试在我的 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)的内容,但没有用
由于 32 位本身不支持 EIP 相对寻址,因此您必须手动完成。通常的方法是编写一个函数,从堆栈中获取返回地址,然后将其用作固定参考点。像这样的东西:
_main: nop
call geteip
eip:
add $msg - eip, %ebx
call outline
ret
geteip:
mov (%esp), %ebx
ret