c - 这个函数在汇编中的作用是什么?

标签 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 在这里特别重要,还是只是设置堆栈内存?

最佳答案

在我看来是这样的:

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

关于c - 这个函数在汇编中的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53440082/

相关文章:

c - 在C和WINAPI中模拟按键被按下

c - 一种将标准输出输出到屏幕和文件的方法?

c++ - 了解 MSVS C++ 编译器优化

c - 为什么右移 64 位是恒等式而不是幂零(返回 0)?

Android 64 位架构支持

c - C中的malloc可以有多大?

c++ - 全局(静态编译)变量位于何处?

c - 用于 nasm/yasm 和 C 的 Polygot 包含文件

c++ - < 比 <= 快吗?

无法理解简单程序集 x86 中 %rax 的值