gpt4 book ai didi

从 c 调用汇编函数导致段错误

转载 作者:行者123 更新时间:2023-12-05 01:37:07 28 4
gpt4 key购买 nike

这是我的汇编程序add.s

.globl add

add:
movl 4(%esp), %eax
movl 8(%esp), %ebx
addl %ebx, %eax
ret

这是我的 C 程序。我正在尝试从 C 程序调用汇编程序。

#include <stdio.h>

int add(int a, int b);

int main() {
int res = add(5,6);
printf("%d",res);
return 0;
}

但是上面的代码给我一个段错误。是什么导致了这个错误,我该如何解决?

最佳答案

假设 cdecl 调用约定,您正在使用 ebx 寄存器,它应该不会被破坏:它的值必须被保存如果要修改,则由被调用者恢复。

调用者 假设 ebx 不会通过调用函数来改变。因此,如果 callee 修改了 ebx,它必须先保存它,然后在从函数返回之前将其恢复为原始值。


寄存器eaxecxedx 无需先保存再恢复即可使用。因此,我建议在您的代码中将 ebx 替换为 edx:

add:
movl 4(%esp), %eax
movl 8(%esp), %edx
addl %edx, %eax
ret

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

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