ここで明らかな何かが欠けている必要がありますが、文字列の終わりを見つけることができないようです.
私のコードは、次のようないくつかの呼び出しから始まります。
; read user input
;
mov eax, SYSCALL_READ ; read function
mov ebx, STDIN ; Arg 1: file descriptor
mov ecx, buf ; Arg 2: address of buffer (buffer is input)
mov edx, BUFLEN ; Arg 3: buffer length (defined as 256)
int 080h
mov [rlen], eax ; save length of string read
教授は私たちに作業用のシェル プログラムをくれましたが、私はそのほとんどをうまく処理できました。私をうんざりさせているのは、使用している文字列の長さが rlen に含まれるようになったという印象でしたが、次のように入力すると:
mov byte[esi + rlen], 92 ; add a zero
セグメンテーション違反が発生します。[buf + rlen] を使用した場合も同様です。buf も ESI も単独では segfault を引き起こさないので、rlen は私が思っていることをしていないように思えます。
何が起こっているのかを理解するのを手伝ってくれる人はいますか?