PIE已禁用,在mac OS X上使用gcc进行asm编程时的绝对寻址

zyfwsgd6  于 2022-11-13  发布在  Mac
关注(0)|答案(1)|浏览(211)

我写了这段代码。我想在Mac OS X上用gcc编译它。但是当我运行gcc时,它显示“PIE禁用。绝对寻址”。
我在谷歌上搜索了一下,但我找不到解决办法。请给我建议。
你好。s

.data
hello: .string "Hello World!\n"

.text
.globl _main

_main:
    push %rbp
    mov %rsp, %rbp
    movabs $hello, %rdi
    call _printf
    leave
    ret

误差

ld: warning: PIE disabled. Absolute addressing (perhaps -mdynamic-no-pic) not allowed in
code signed PIE, but used in _main from /var/folders/xs/4z9kr_n93111fhv9_j1dd9gw0000gn/T/ex2_64-369300.o. 
To fix this warning, don't compile with -mdynamic-no-pic or link with -Wl,-no_pie
ymzxtsji

ymzxtsji1#

看起来有几个解决方案:
1.使用-Wl、-no_pie链接:

clang -o hello hello.s -Wl,-no_pie

1.不要使用绝对寻址。

.data
hello: .string "Hello World!\n"

.text
.globl _main

_main:
    push %rbp
    mov %rsp, %rbp
    lea hello(%rip), %rdi
    mov $0, %rax
    call _printf
    leave
    ret

然后,您可以编译并运行:

host % clang -o hello hello.s            
host % ./hello 
Hello World!

关于将al清零的部分在System V应用程序二进制接口的3.5.7节中提到,下面是相关摘录:
调用采用变量参数的函数时,必须将%al设置为向量寄存器中传递给函数的浮点参数总数。
在您的情况下,这是零。您正在传入零个浮点参数。

相关问题