从程序集中使用printf打印浮点数时出现分段错误

时间:2018-04-17 21:04:33

标签: c assembly floating-point segmentation-fault printf

汇编代码:

section .text
global calculateRoot
extern printFloat

calculateRoot:
    push    rbp                       ; save Base Pointer (bp) original value
    mov     rbp, rsp                  ; use base pointer to access stack contents
    sub rsp, 55                        ; allocating bytes in stack for local variables

    call printFloat

    mov     rsp, rbp                        ; closing stack
    pop     rbp                             ; resotre rbp
    ret

c code:

#include <string.h>
#include <stdlib.h>
#include <stdio.h>

void printFloat();

extern void calculateRoot(double num);

int main(){
    double num  = 43432432.23532534534543534;
    calculateRoot(num);

    printFloat(num);
    return 0;
}

void printFloat(){
    double h = 4332432525.324324;
    printf("\nFloating Point Number %lf\n",h);
}

上述代码会产生分段错误。我试图了解原因。当我试图以不同的方式重现问题时,我发现seg故障只发生在我尝试打印浮点数时。例如,int不会发生这种情况。此外,我发现教学中的不同数量&#34; sub rsp,55&#34;可以解决问题,例如,如果它放48或16例如将没有seg故障。我有什么东西在这里失踪吗? 非常感谢每一个答案。

n.p - 此代码不适用于任何内容。当我发现程序中发生了奇怪的事情时,我创建了它。所以这段代码是为了在我的真实程序中找到我的错误。 还有一点我注意到,当我使用8 in&#34; sub rsp,55&#34;它创建了一个seg错误,所以我在程序集中创建了另一个函数并从calculateRoot调用它,在这个函数中我创建了另一个&#34; sub rsp,8&#34;它消除了seg故障(当它用于&#34; sub rsp,55&#34时,16个工作。)

0 个答案:

没有答案