level 3
S0-5ad
楼主
提供了一C程序,但 f 函数被抹去了,就留下汇编。你能通过汇编计算出程序输出结果吗?
0000000000001149 <f>:
1149: f3 0f 1e fa endbr64
114d: 55 push %r
bp
114e: 48 89 e5 mov %rsp,%rbp
1151: 89 7d ec mov %edi,-0x14(%rbp)
1154: 8b 45 ec mov -0x14(%rbp),%eax
1157: 89 45 fc mov %eax,-0x4(%rbp)
115a: c1 65 ec 03 shll $0x3,-0x14(%rbp)
115e: 8b 45 fc mov -0x4(%rbp),%eax
1161: 31 45 ec xor %eax,-0x14(%rbp)
1164: 8b 45 ec mov -0x14(%rbp),%eax
1167: 89 45 fc mov %eax,-0x4(%rbp)
116a: 83 7d ec 01 cmpl $0x1,-0x14(%rbp)
116e: 74 10 je 1180 <f+0x37>
1170: c1 7d ec 02 sarl $0x2,-0x14(%rbp)
1174: 8b 45 fc mov -0x4(%rbp),%eax
1177: 31 45 ec xor %eax,-0x14(%rbp)
117a: 8b 45 ec mov -0x14(%rbp),%eax
117d: 89 45 fc mov %eax,-0x4(%rbp)
1180: 8b 45 fc mov -0x4(%rbp),%eax
1183: 5d pop %rbp
1184: c3 retq
#include <stdio.h>
int f(int x){
????????????
}
int main() {
int a=114115;
printf("%d",f(a));
return 0;
}
2024年03月08日 00点03分
1
0000000000001149 <f>:
1149: f3 0f 1e fa endbr64
114d: 55 push %r
bp
114e: 48 89 e5 mov %rsp,%rbp
1151: 89 7d ec mov %edi,-0x14(%rbp)
1154: 8b 45 ec mov -0x14(%rbp),%eax
1157: 89 45 fc mov %eax,-0x4(%rbp)
115a: c1 65 ec 03 shll $0x3,-0x14(%rbp)
115e: 8b 45 fc mov -0x4(%rbp),%eax
1161: 31 45 ec xor %eax,-0x14(%rbp)
1164: 8b 45 ec mov -0x14(%rbp),%eax
1167: 89 45 fc mov %eax,-0x4(%rbp)
116a: 83 7d ec 01 cmpl $0x1,-0x14(%rbp)
116e: 74 10 je 1180 <f+0x37>
1170: c1 7d ec 02 sarl $0x2,-0x14(%rbp)
1174: 8b 45 fc mov -0x4(%rbp),%eax
1177: 31 45 ec xor %eax,-0x14(%rbp)
117a: 8b 45 ec mov -0x14(%rbp),%eax
117d: 89 45 fc mov %eax,-0x4(%rbp)
1180: 8b 45 fc mov -0x4(%rbp),%eax
1183: 5d pop %rbp
1184: c3 retq
#include <stdio.h>
int f(int x){
????????????
}
int main() {
int a=114115;
printf("%d",f(a));
return 0;
}