【发布时间】:2016-07-22 15:38:18
【问题描述】:
所以我的目标是写出与这个程序集对应的 C 代码:
0: 85 f6 test %esi,%esi
2: 78 13 js 17 <part3+0x17>
4: 83 fe 07 cmp $0x7,%esi
7: 77 14 ja 1d <part3+0x1d>
9: 8d 0c f5 00 00 00 00 lea 0x0(,%rsi,8),%ecx
10: 48 d3 ff sar %cl,%rdi
13: 48 89 f8 mov %rdi,%rax
16: c3 retq
17: b8 00 00 00 00 mov $0x0,%eax
1c: c3 retq
1d: b8 00 00 00 00 mov $0x0,%eax
22: c3 retq
我有点困惑,因为测试 %esi 寄存器的第一个循环在第二个循环结束之前就结束了。
第二个 if 语句是否在第一个循环内将 %esi 与 7 进行比较?还是这是 if , else if 的情况??
【问题讨论】:
-
我在任何地方都看不到循环。是的,它是
if/else if。当然它所做的只是返回东西,你不需要else。 -
if (esi < 0 || esi > 7) return 0; return (int64_t)rdi >> (8*esi);? -
有趣的事实:因为这两种情况都是一样的(
return 0),而ja包括js,你可以忽略js。 -
@Jester 我的错 - 术语不正确,请编辑它,但感谢您的帮助
-
@EOF 谢谢!确实是这样!
标签: c assembly x86 reverse-engineering