为什么这个 x86_64 汇编代码不起作用?
section .text
global my_strlen
my_strlen:
xor rax, rax
.LOOP:
cmp BYTE[rdi+rax], 0
jne .LOOP
inc rax
ret
我执行它:
#include <stddef.h>
#include <stdio.h>
extern size_t my_strlen(const char *str);
int main(int argc, char *argv[]) {
if(argc!=2) return 1;
printf("%lu\n", (unsigned long)my_strlen(argv[1]));
return 0;
}
但是当我执行程序时,它不会输出任何内容,也不会关闭。
section .text
global my_strlen
my_strlen:
xor rax, rax
.LOOP:
cmp BYTE[rdi+rax], 0
jne .LOOP
inc rax
ret
I execute it with:
#include <stddef.h>
#include <stdio.h>
extern size_t my_strlen(const char *str);
int main(int argc, char *argv[]) {
if(argc!=2) return 1;
printf("%lu\n", (unsigned long)my_strlen(argv[1]));
return 0;
}
But when I execute the program, it does not output anything and it does not close.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您需要在循环内增加 rax 。
You need to increment rax inside the loop.
在循环中增加
rax
。否则,您总是测试同一个字节。Increment
rax
in the loop. Otherwise, you always test the same byte.在循环外增加 rax
Increasing rax outside the loop