我正在阅读汇编代码,但没有可用的源代码。程序集中有一个名为 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
在这里特别重要,还是只是设置堆栈内存?
最佳答案
在我看来是这样的:
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/