此功能在组装中的目的是什么?

时间:2018-11-23 02:46:53

标签: c assembly x86-64

我正在阅读汇编代码,但没有可用的源代码。我努力理解的程序集中有一个名为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行,直到ebx0为止,它退出。我的理解正确吗?另外,命令sub $0x108,%rsp在这里是否特别重要,还是只是设置堆栈内存?

1 个答案:

答案 0 :(得分:5)

在我看来就像这样:

void next_text(FILE *f, count) {
    char  buf[256];
    while (count-- > 0) {
        if (fgets(buf, sizeof buf, f)) {
            func();
        }
    }
}