WhiteBeaver 2023-09-23 16:36 采纳率: 90.9%
浏览 12
已结题

X86转ARM架构,汇编语言错误

1、问题:使用gcc -o main mian.c成功编译了可执行main文件,然后使用./main begin时,报错,使用gdb调试时,找到具体错误,显示:
core was generated by “./main begin”
Program terminated with signal SIGILL,ILLEgal instruction
#0 0x000000000041ffe8 in signature (n_pmcs=0x4627e0)at cpuid.c:38
warning:Source file is more recent than executable
38 asm volatile("mrs %0, MIDR_EL1\n"
Missing separate debuginfos, use: dnf debuginfo-install glibc-2.28-36.1.ky10.aarch64
2、求问,请问这个情况下如何解决这个汇编代码问题,不知是不是aarch64架构不支持这句话

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-23 18:30
    关注

    【以下回答由 GPT 生成】

    根据错误信息显示,程序在执行位于"cpuid.c"文件的第38行的"signature"函数时出现了SIGILL信号,即"ILLEgal instruction",说明在执行该指令时发生了非法指令错误。

    这个问题可能是因为你尝试在ARM架构上运行一个原本是针对x86架构编译的程序所导致的。x86和ARM是两种不同的处理器架构,它们有不同的汇编指令集,因此在不同架构上执行可能会导致非法指令错误。

    要解决这个问题,有两种可能的方法: 1. 使用跨平台的编译器工具链(如GCC)来编译代码,以在目标平台上运行。这种方法需要先将原始的C代码修改为跨平台代码,并使用正确的编译器选项来指定目标架构。 2. 如果你想将x86架构的程序移植到ARM架构上,你需要对代码进行适当的修改和优化,以使其与ARM架构兼容。这可能包括使用ARM架构的等效指令来替代x86指令,并确保代码逻辑正确。

    在你的情况下,由于你已经编译成功了可执行的"main"文件,但在运行时出现错误,可能是因为你尝试在ARM架构上运行x86编译的代码导致的。如果你希望在ARM架构上运行该程序,你可以尝试使用方法1中提到的跨平台编译器工具链来编译代码,并选择正确的目标架构。

    如果你确定你需要移植x86代码到ARM架构上,并且愿意做相应的修改和优化工作,可以提供你的代码以便更进一步的分析和指导。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月21日
  • 已采纳回答 12月13日
  • 创建了问题 9月23日

悬赏问题

  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
  • ¥15 数字信号处理考试111
  • ¥100 关于#audobe audition#的问题,如何解决?
  • ¥15 allegro17.2生成bom表是空白的
  • ¥15 请问一下怎么打通CAN通讯
  • ¥20 如何在 rocky9.4 部署 CDH6.3.2?
  • ¥35 navicat将excel中的数据导入mysql出错
  • ¥15 rt-thread线程切换的问题
  • ¥15 高通uboot 打印ubi init err 22
  • ¥15 R语言中lasso回归报错