我正在阅读汇编代码,但我没有可用的源代码.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
Run Code Online (Sandbox Code Playgroud)
这里%ebx以某些大整数开头16000.我对这个函数正在做什么的理解是它需要一个参数,即文件流.然后它逐行读取文件.该行的最大长度100 hex是256字符.然后,它减去ebx1,并且,只要该文件足够长,保持在阅读该文件16000的线条,并在结束时ebx被0,它退出.我的理解是否正确?此外,命令sub $0x108,%rsp在这里特别重要,还是只是设置堆栈内存?
看起来像我这样:
void next_text(FILE *f, count) {
char buf[256];
while (count-- > 0) {
if (fgets(buf, sizeof buf, f)) {
func();
}
}
}
Run Code Online (Sandbox Code Playgroud)