【问题标题】:Returning a char array from a NASM function从 NASM 函数返回 char 数组
【发布时间】:2015-10-05 00:01:17
【问题描述】:

为了在 NASM 中练习,我正在尝试执行以下操作:

1)从 C 中的命令行读取字符串

2)将该字符串传递给 NASM 函数,该函数将字符串作为其第一个参数

3)从 NASM 函数返回准确的字符串

前缀.asm:

;nasm -f elf32 prefix.asm -o prefix.o

segment .bss
pre resb 256

segment .text
global prefix

    prefix:
        push ebp          ;save the old base pointer value
        mov  ebp,esp      ;base pointer <- stack pointer

        mov eax,[ebp+8]   ;function argument

        add esp, 4
        pop ebp
        ret

前缀 c:

//nasm -f elf32 prefix.asm -o prefix.o
//gcc prefix.c prefix.o -o prefix -m32
#include <stdio.h>
#include <string.h>

char* prefix(char *str);

int main(void)
{
    char str[256];
    char* pre;
    int a;

    printf("Enter string: ");
    scanf("%s" , str) ;
    pre = prefix(str);
    printf("Prefix array: %s\n", pre);
    return 0;
}

在我运行(它编译没有任何问题)并将我的字符串提供给程序后,我得到一个分段错误(核心转储)错误。

【问题讨论】:

    标签: c linux nasm


    【解决方案1】:

    先尝试写一个C程序来实现char* prefix(char *str),反汇编理解一下。

    问题 1:add esp, 4 应该被删除。函数应该保留堆栈指针。 IE。 esp 在第一条指令之前和返回指令之前应该相同。您的汇编代码将 esp 增加 4。

    问题 2:不要将您的 .asm.c 命名为相同。使用不同的名称。

    【讨论】:

      猜你喜欢
      • 2011-08-05
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 2018-10-18
      • 2014-06-27
      • 1970-01-01
      • 2020-02-21
      • 2015-08-20
      相关资源
      最近更新 更多