![](/img/trans.png)
[英]Why does calling the C abort() function from an x86_64 assembly function lead to segmentation fault (SIGSEGV) instead of an abort signal?
[英]Why does this x86_64 assembly code does not work?
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;
}
但是,当我执行程序时,它不会输出任何内容,也不会关闭。
您需要在循环内增加rax。
在循环中增加rax
。 否则,您将始终测试相同的字节。
my_strlen:
xor rax, rax
dec rax
.LOOP:
inc rax
cmp BYTE[rdi+rax], 0
jne .LOOP
在循环之外增加rax
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.