gpt4 book ai didi

android - 从 C 调用 ARM 汇编函数导致段错误

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:39 25 4
gpt4 key购买 nike

我正在自学一些 ARM 汇编,但我什至无法运行一个简单的程序。我设置了一个工具链和一切,我的代码编译得很好。但是,当我在带有 Android 的 Galaxy Nexus(我正在测试的唯一平台)上从 /data/local/tmp/ 执行我的程序时,我总是会收到“已停止(信号)”和/或“139 段错误”(通常没有数字)。当我尝试从 C 代码调用汇编函数时,就会发生这种情况。

neontest.c:

#include <stdio.h>

void neon_test(void); // I also tried variations like extern, but no avail

int main(int argc, char* argv[]) {
printf("\nHello World\n"); // works just fine
neon_test(); // segmentation fault
printf("Done!");
return 0;
}

(neontest.h 文件当前为空)

neontest_neon.s:

.text // added because some wiki said so
.arch armv7a
.fpu neon
.thumb
.syntax unified

.align 4
.global neon_test
.func neon_test
neon_test:
NOP
.endfunc

.end

我担心这是一个供股问题,但我什至不知道如何正确识别超出这一点的问题。

最佳答案

有一种解决方案适用于大多数情况:

使用调试器

它将向您显示错误发生的确切位置,并且通常或多或少地清楚发生了什么。

也就是说,这里有一些猜测:

  1. 正如@hivert 所说,您确实忘记了返回 (BX LR)。
  2. Thumb 函数必须用.thumb_func 标记以便链接器正确处理它。仅 .thumb 是不够的。

关于android - 从 C 调用 ARM 汇编函数导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17806601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com