私はそれは、Cライブラリの呼び出しの一部でセグメンテーションフォールトが発生し、次のアセンブリコード組立セグメンテーションフォールト
#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
の走行時にエラーが発生しました:コールのprintf をそれはx86_64のモードで実行されています。 私はCライブラリに関するx64コードのコンパイル中に逃したものは何もありませんか?またはアセンブリでのコード
おかげ
は、それらのMOVQの – Managu
感謝の間に適切な量だけ%のRDIを増やすことができますみんな、私は問題を解決した。 /lib/ld-linux-x86-64.so.2で手作業でインストールした後に読み込んだのは間違ったlibでしたが、main関数を_startに置き換えました。 私はそれを動的リンクとして使いました。 悪い英語のため申し訳ありません –