如何在汇编中使用外部函数(x86)

时间:2017-03-22 13:19:17

标签: assembly x86

我正在使用汇编语言(NASM),我目前正在重写一些函数,例如strlen和strncmp,我正在尝试重做strstr。

我在C中创建了它是如何工作的,我带来了类似的东西:

char    *my_strstr(char *str, char *match)
{
    int i = -1;
    int len = strlen(match);
    while (str[++i] != '\0')
          if (strncmp((str + i), match, len) == 0)
             return (str + i);
    return (NULL);
}

我有strlen NASM功能和我的strncmp NASM功能。 在我的header.asm我有:

section .text
    global strlen:function
    global strcmp:function
    global strstr:function

现在我要调用的文件都是我之前做过的函数(也没有检查NULL str)它可能不起作用但是......那不是问题

    %include "src/header.asm"
    extern strlen
    extern strncmp

strstr:
    ;; bla bla bla
    call strlen
    mov  rdx, rax ; the return value of strlen is in rax right ?
    ;; bla bla bla
    call strncmp ;
    cmp rax, 0h ; the return value still is in rax right ?
    je bla bla bla
    ;; bla bla bla

当我编译时,我收到以下错误:

srcs/strstr.asm:2: error: no special symbol features supported here
srcs/strstr.asm:3: error: no special symbol features supported here

如何继续使用这些功能?

我使用我的C文件使用的动态库libasm.so(包含那些函数)。标准库不再存在,编译绕过了stdlib。我的编译命令是:gcc main.c -Wl,-rpath =。 -L。 -lasm -fno-builtin

谢谢!

0 个答案:

没有答案