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架构不支持这句话
X86转ARM架构,汇编语言错误
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注【以下回答由 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架构上,并且愿意做相应的修改和优化工作,可以提供你的代码以便更进一步的分析和指导。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报