函数fun_b有如下整体结构:
long fun_b(unsigned long x) { long val = 0; long i; for ( ... ; ... ; ... ) { } return val; }
GCC C编译器产生如下汇编代码:
long fun_b(unsigned long x) x in %rdi fun_b: movl $64, %edx movl $0, °/0eax .L10: movq %rdi,%rcx andl $1,%ecx addq %rax,%rax orq %rcx,%rax shrq %rdi subq $1,%rdx jne .L10 rep;ret
逆向工程这段代码的操作,然后完成下面的工作:
A. 根据汇编代码版本填写C代码中缺失的部分。
B. 解释循环前为什么没有初始测试也没有初始跳转到循环内部的测试部分。
C. 用自然语言描述这个函数是计算什么的。