在x86-64程序集中使用'extern'语句包含printf导致程序功能中断[关闭]

问题描述 投票:0回答:2

我刚刚在Linux上的x86-64程序集中完成了一个合并排序的工作实现(我通过在使用GDB执行后检查内存来确认这一点,并且我目前正在尝试添加功能,以通过链接和调用printf。

但是,我注意到,在我的“ section .text”声明前直接添加“ extern printf”行之后,不再对mergesort产生的数组进行排序(使用gcc时,我确保链接到libc)。

这是我的代码的示例(当前,printarr除了返回外不执行任何操作,在调用mergesort之后,我使用GDB断点检查内存):

extern printf ; including this line breaks mergesort functionality

section .text
global _start
_start:
    ; This is the main function
    mov     dl, byte [right]
    mov     sil, byte [left]
    mov     rdi, testarr
    call    mergesort

    mov     rsi, 7
    call    printarr

    mov     rax, SYS_EXIT
    syscall
sorting assembly x86 x86-64 glibc
2个回答
0
投票

不能


-1
投票
我发现了错误。在_start函数的开头,我将两个变量加载到RDX和RSI的低8位(分别为dl和sil)。在我的原始代码中,我假设这些寄存器将是清楚的。
© www.soinside.com 2019 - 2024. All rights reserved.