gpt4 book ai didi

c - 在 NASM 中实现 strstr 的问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:18:20 25 4
gpt4 key购买 nike

我一直在努力在 NASM 中实现以下 strstr 函数:

char *strstr(const char *s1, const char *s2) {
size_t n = strlen(s2);
while(*s1)
if(!memcmp(s1++,s2,n))
return s1-1;
return 0;
}

到目前为止,我有以下代码:

global _mystrstr
extern _strlen
extern _memcmp
_mystrstr:

; prologue goes here

; moving s1 to edi and s2 to esi
; pushing n onto the stack and jumping to the loop

; while(*s1)
.while_loop:
cmp byte[edi], 0
je .return_null
; memcmp(s1++,s2,n)
push dword[esp + 4]
push esi
push edi
call _memcmp
add esp, 12
inc edi
; if(!memcmp(s1++,s2,n))
cmp eax, 0
jne .while_loop
jmp .return_value

.return_value:
; blah blah

.return_null:
; standard stuff goes here

出于某种原因,memcmp 永远不会返回 0。我已经用 printf 打印出 eax 保存的值来测试它,它总是 1 或 -1。谁能指出我在这里可能做错了什么?

最佳答案

eax 压入堆栈后,esp 指向该内存位置。线路

push    dword[esp + 4]

不会推送n的值,而是预先推送的值。
将行替换为

push dword[esp]

再试一次。

关于c - 在 NASM 中实现 strstr 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34533511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com