Я читаю ассемблерный код, и у меня нет доступного исходного кода.В сборке есть одна функция с именем next_text
, которую я пытаюсь понять.Может ли кто-нибудь помочь мне в этом?
next_text()
push %rbp
push %rbx
sub $0x108,%rsp
mov %rdi,%rbp
mov %esi,%ebx
jmp <next_text+45>
16 mov %rbp,%rdx
mov $0x100,%esi
mov %rsp,%rdi
callq <fgets@plt>
test %rax,%rax
jne <next_text+42>
callq <func>
42 sub $0x1,%ebx
45 test %ebx,%ebx
jg <next_text+16>
add $0x108,%rsp
pop %rbx
pop %rbp
retq
Здесь %ebx
начинается с определенного большого целого числа, например 16000
.Мое понимание того, что делает эта функция, заключается в том, что она принимает аргумент, который является потоком файлов.Затем он читает файл построчно.Максимальная длина строки составляет 100 hex
, что составляет 256
символов.Затем он вычитает ebx
на 1, и, пока файл достаточно длинный, продолжает читать файл на 16000
строк, а в конце, когда ebx
равен 0
, он завершается.Правильно ли мое понимание?Кроме того, команда sub $0x108,%rsp
особенно важна здесь, или это просто настройка стековой памяти?