簡體   English   中英

ret導致組裝中出現段故障

[英]ret is causing a segfault in assembly

我有以下匯編代碼:

.text
.global main
main:
    push %r13
    push %r14
    push %r15
    jmp rest
x:    
    .data
    y0:    .quad   0
    .text
    mov %r14, y0
    mov $format,%rdi
    push y0
    popq %rsi
    movq %rsi, %r15
    call printf
    mov $format,%rdi
    mov $10,%rsi
    call printf
    ret
rest:    
    movq $5, %r9
    pushq %r9
    popq %rsi
    movq %rsi, %r14
    jmp x
    mov $0,%rax
    pop %r15
    pop %r14
    pop %r13
    ret
.data
format:
.byte 37
.byte 108
.byte 117
.byte 0

我希望ret可以使程序跳回到原來的位置:但是,我遇到了分段錯誤。 為什么是這樣?

這些問題幾乎總是由未能清理堆棧引起的。 您的情況也是如此。

您首先開始:

main:
    push %r13
    push %r14
    push %r15
    jmp rest

然后在rest

jmp x

x您可以執行以下操作:

mov $format,%rdi
mov $10,%rsi
call printf
ret

這使您剩下了三堆未處理的內容。 執行此ret ,它將%r15的先前值移入指令指針和段錯誤。

ret不會從跳躍中返回。 返回到call的指令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM