在Assembly中访问数组元素时出现分段错误

时间:2016-05-14 17:54:12

标签: arrays pointers assembly segmentation-fault

我打电话给C所以:

calculate(&data[index + v], &data[i + v], &data[j + v], norm_1, norm_2, ps, remaining);

在Assembly中实现的一个函数,这是汇编函数:

global calculate

current_point_a     equ     8
i_point_a           equ     12
j_point_a           equ     16
norm_1_a            equ     20
norm_2_a            equ     24
ps_a                equ     28
counter             equ     32

calculate:


        push        ebp             
        mov         ebp, esp       
        push        ebx             
        push        esi
        push        edi
;------------------------------------------------------------

        mov         eax,  [ebp+current_point_a]         
        movaps      xmm0, [eax]         ; HERE SEGMENTATION FAULT               
        movaps      xmm1, xmm0

当我尝试通过从C函数传递的地址访问数组元素时,我遇到了分段错误。

有什么问题? 我需要从内存中取出4个连续的数组元素。 我该如何解决?

我在使用32位架构的Linux上使用GCC。

1 个答案:

答案 0 :(得分:0)

我相信这是因为你假设参数是通过堆栈传递的,这并不总是正确的。不同平台上的不同编译器使用了多个calling conventions。比如,System V convention(在Linux上使用)通过寄存器传递一些参数。

很难说你应该在你的案例中使用什么,因为它取决于操作系统,编译器和编译标志。如果您使用GCC,您可以通过将-S标志传递给编译器来查看C程序生成的汇编代码,并了解自己如何准确传递参数。