Я пытаюсь прочитать сборочные линии и расшифровать, что они делают, и я получил это далеко:
% eax в настоящее время 70, и он будет перезаписан
% ebx - это введенная мной строка, состоящая из 70 "м" с. Его адрес 0x804d850 и продолжается до 0x804d896 как завершающий символ. Все промежуточные адреса имеют значение 109 для м.
Это строка, на которой я застрял:
0x0804927b <+39>: movzbl (%ebx), %eax
0x0804927e <+42>: test %al, %al
Из того, что я понимаю, я пытаюсь переместить байт из моей строки, чтобы перезаписать% eax, а затем увеличить его до нуля. Затем я сравниваю младший байт% eax («m», который просто movzbl'd) с нулем.
Как получается, что я могу получить% al равным 0? Разве это не соответствует символу NULL? Если я введу это в качестве моего 70-го символа для строки, строка будет содержать всего 69 символов, а с конца все равно будет 'm'.
Извините, если этот вопрос сформулирован в замешательстве.