在运行以下汇编代码时遇到错误

#cpuid using C library Functions
.section .data
output:
 .asciz "The Processor Vendor ID is '%s'\n"
.section .bss
 .lcomm buffer, 12
.section .text
.globl main
main:
 movq $0, %rax
 cpuid
 movq $buffer, %rdi
 movq %rbx, (%rdi)
 movq %rdx, (%rdi)
 movq %rcx, (%rdi)
 pushq $buffer
 pushq $output
 call printf
 addq $8, %rsp
 pushq $0
 call exit

它在C库的部分遇到段错误调用:调用printf
它以x86_64模式运行。
关于C库,我在编译x64代码期间错过了什么吗?还是代码有问题

谢谢

最佳答案

是否调用了C运行时库的初始化?必须首先运行该命令才能设置stdout。顺便说一句,堆栈跟踪将消除对问题原因的怀疑。

另外,请防止%s转换使%.12s溢出缓冲区,或者仅将NUL字节放在缓冲区之后。

关于 assembly 分割错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1817795/

10-11 15:35