2

次のプログラムを実行しようとしました。

C コード :

int  main()
    {
     char  *s1 = "hello";

     printf("string : %s\n", strchr(s1, 'l'));
    }

アセンブリ コード:

global strchr

    section .text

strchr:
    push rbp
    mov rbp, rsp

strchr_loop:
    mov al, byte [rsi]       ; My bug come from here
    cmp byte [rdi], al       ; and from here
    je strchr_end
    cmp byte[rdi], 0
    jz strchr_nul
    inc rdi
    jmp strchr_loop

strchr_end:
    mov rax, rdi
    mov rsp, rbp
    pop rbp

    ret

strchr_nul:
    mov rax, 0
    mov rsp, rbp
    pop rbp

    ret

これを実行すると、セグメンテーション違反が発生しました。

しかし、バグ行を使用する代わりに値「l」に置き換えると、プログラムは機能しています

cmp byte [rdi], 'l'       ; It's working
4

0 に答える 0