我正在使用汇编语言(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
谢谢!