gpt4 book ai didi

linux - 我如何用 GCC 或其他工具编译这个程序集文件?

转载 作者:太空宇宙 更新时间:2023-11-04 09:12:14 25 4
gpt4 key购买 nike

我从 wiki 复制了一个示例汇编代码:

.section .data

s0 : .asciz "Processor Brand String: %.48s\n"
err : .asciz "Feature unsupported.\n"

.section .text

.global main
.type main,@function
.align 32
main:
pushq %rbp
movq %rsp, %rbp
subq $48, %rsp
pushq %rbx

movl $0x80000000, %eax
cpuid

cmpl $0x80000004, %eax
jl error

movl $0x80000002, %esi
movq %rsp, %rdi
......
......
jmp end

.align 16
error:
movq $err, %rdi
xorb %al, %al
call printf

.align 16
end:
popq %rbx
movq %rbp, %rsp
popq %rbp
xorl %eax, %eax
ret

我将 main 替换为 _start 并在末尾添加系统调用,然后使用“as”和“ld”成功构建了它。但我认为它应该以某种方式直接用 GCC 编译。那我需要做什么?

最佳答案

gcc -no-pie main.s 对于这个定义了一个 main 的源代码,就像定义一个 .c >主要

gcc -no-pie -nostartfiles start.s 如果您自己定义 _start(ELF 入口点)。 (因为你在 Linux 上,glibc 可以通过动态链接器 Hook 初始化自己,即使你的 _start 没有调用 glibc init 函数。)

要构建不带任何库的静态二进制文件,gcc -nostdlib -static start.s

关于linux - 我如何用 GCC 或其他工具编译这个程序集文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53878588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com