无法将参数传递给程序集 x86 中的函数

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

我试图通过堆栈将一个字符串及其长度传递到寄存器

ecx
edx
,但我遇到了分段错误:

global main

section .data
        var db "this is the message",0
        varlen equ $- var

section .text

print:
        mov  eax, 4
        mov  ebx, 1
        mov  ecx, [ebp + 4]
        mov  edx, [ebp + 8]
        int 0x80

        ret

main:
        push varlen
        push var
        call print

        mov  eax, 1
        mov  ebx, 0
        int 0x80
function assembly parameters x86 nasm
1个回答
0
投票

如果您希望您的函数有序言和尾声,请执行以下操作:

print:
    push ebp
    mov  ebp, esp
    mov  eax, 4
    mov  ebx, 1
    mov  ecx, [ebp + 8]
    mov  edx, [ebp + 12]
    int  0x80
    mov  esp, ebp
    pop  ebp
    ret

否则:

print:
    mov  eax, 4
    mov  ebx, 1
    mov  ecx, [esp + 4]
    mov  edx, [esp + 8]
    int  0x80
    ret
© www.soinside.com 2019 - 2024. All rights reserved.