【发布时间】:2009-11-30 04:07:25
【问题描述】:
在运行以下汇编代码时遇到错误
#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 代码时遗漏了什么?还是代码有问题
谢谢
【问题讨论】:
-
可能希望在这些 movq 之间适当增加 %rdi
-
谢谢大家,我解决了这个问题。这是我加载的错误库,在我使用 /lib/ld-linux-x86-64.so.2 手动 ld 并用 _start 替换主函数后正常工作。我把它当作动态链接。抱歉英语不好