я написал утилиту hexdump на языке ассемблера, используя компилятор nasm и компоновщик ld. Предполагается, что программа выгружает шестнадцатеричные значения для любого входного файла. буфер 16 байт. код
LoadBuff:
push ebx
push edx
push eax
mov eax,3 ;sys_read call
mov ebx,0 ;read from standard input
mov ecx,Buff ;pass the buffer adress
mov edx,BuffLen ;pass the number of bytes to be read at a time
int 80h ;call the linux kernel
mov ebp,eax
;cmp eax,0 ;number of characters read is returned in eax
;jz exit ;if zero character is returned i.e end of iinput file
;jump to exit
xor ecx,ecx
pop eax
pop edx
pop ebx
ret
Если линии
;cmp eax,0
;jz exit
раскомментированы, код работает нормально, без какой-либо ошибки сегмента. Однако, когда я комментирую его и включаю эти строки в вызывающую программу, чтобы выполнить такое же сравнение в вызывающей стороне, а не здесь, эта процедура сегментирует ошибки.
обратная трассировка gdb дает
#0 0x00000000 in ?? ()
Любая идея, почему это происходит именно так?