C 汇编-js与ja指令
因此,我的目标是写出与此程序集对应的C代码:C 汇编-js与ja指令,c,assembly,x86,reverse-engineering,C,Assembly,X86,Reverse Engineering,因此,我的目标是写出与此程序集对应的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 0
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
0:85 f6测试%esi,%esi
2:78 13 js 17
4:83 fe 07 cmp$0x7,%esi
7:77 14 ja 1d
9:8d 0c f5 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 mov$0x0,%eax
1c:c3 retq
1d:b8 00 mov$0x0,%eax
22:c3 retq
我有点困惑,因为测试%esi寄存器的第一个循环在第二个循环结束之前结束
第二条if语句是否在第一个循环中将%esi与7进行比较?或者这是一种“如果”,或者“如果”的情况吗?让我总结一下,已经说过的话
0: 85 f6 test %esi,%esi
2: 78 13 js 17 <part3+0x17>
“cx=8*rsi”//不太明显,它“只是”一个乘法)
rdi>>cl;//不是cx,但是cx是安全的让我总结一下,已经说过的话
0: 85 f6 test %esi,%esi
2: 78 13 js 17 <part3+0x17>
“cx=8*rsi”//不太明显,它“只是”一个乘法)
rdi>>cl;//不是cx,但cx是安全的我在任何地方都看不到循环。是的,它是
如果
/否则如果
。当然,它所做的只是返回内容,如果(esi<0 | | esi>7)返回0,则不需要else
;返回(int64_t)rdi>>(8*esi)代码>?有趣的事实:由于两种情况都相同(返回0
),并且ja
包含js
,您可以忽略js
@Jester my bad-不正确的术语,我会编辑它,但感谢您的帮助help@EOF谢谢事实就是这样!我在任何地方都看不到环路。是的,它是如果
/否则如果
。当然,它所做的只是返回内容,如果(esi<0 | | esi>7)返回0,则不需要else
;返回(int64_t)rdi>>(8*esi)代码>?有趣的事实:由于两种情况都相同(返回0
),并且ja
包含js
,您可以忽略js
@Jester my bad-不正确的术语,我会编辑它,但感谢您的帮助help@EOF谢谢事实就是这样!
9: 8d 0c f5 00 00 00 00 lea 0x0(,%rsi,8),%ecx
10: 48 d3 ff sar %cl,%rdi
17: b8 00 00 00 00 mov $0x0,%eax
1c: c3 retq
1d: b8 00 00 00 00 mov $0x0,%eax
22: c3 retq
{
if (esi < 0) return 0;
if (esi > 7) return 0;
return rdi >> ( 8 * rsi );
}