shr*_*wea 5 macos assembly gcc
我写了这段代码.我想在Mac OS X上通过gcc编译它.但它看起来'PIE禁用了.当我运行gcc时,绝对寻址.
我用Google搜索,但我找不到解决方案.请建议我.
hello.s
.data
hello: .string "Hello World!\n"
.text
.globl _main
_main:
push %rbp
mov %rsp, %rbp
movabs $hello, %rdi
call _printf
leave
ret
Run Code Online (Sandbox Code Playgroud)
错误
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
Run Code Online (Sandbox Code Playgroud)
看起来有几个解决方案:
clang -o hello hello.s -Wl,-no_pie
Run Code Online (Sandbox Code Playgroud)
.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
Run Code Online (Sandbox Code Playgroud)
然后就可以编译并运行:
host % clang -o hello hello.s
host % ./hello
Hello World!
Run Code Online (Sandbox Code Playgroud)
System V 应用程序二进制接口的 3.5.7 节中提到了有关将 al 清零的部分。以下是相关摘录:
当调用带有变量参数的函数时,%al 必须设置为向量寄存器中传递给函数的浮点参数总数。
在你的情况下,这是零。您正在传递零浮点参数。
| 归档时间: |
|
| 查看次数: |
1650 次 |
| 最近记录: |