如何解决在 C 代码中使用 asm 并在没有 -no-pie 选项的情况下进行编译
我的简单程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char argmore[]="Hello world";
int main ( int argc,char** argv) {
/////// printf
asm ("movq $1,%rax\n"
"movq $1,%rdi\n"
"movq $argmore,%rsi\n"
"movq $11,%rdx\n"
"syscall");
/////// exit
asm ("movq $60,%rdi\n"
"syscall");
return 0;
}
当我编译这个程序时:
gcc -no-pie -o test test.c
它工作正常,打印“hello word”并成功退出。但是当我将其编译为:
gcc -o test test.c
我收到此错误:
/usr/bin/ld: /tmp/ccjSTY9T.o: relocation R_X86_64_32S against undefined symbol `argmore' can not be used when making a PIE object; recompile with -fPIE
collect2: error: ld returned 1 exit status
我不想用 -no-pie
选项编译我的程序。我应该怎么办?如何在没有 -no-pie
选项的情况下更改我的程序以正确编译?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。