Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 汇编-js与ja指令_C_Assembly_X86_Reverse Engineering - Fatal编程技术网

C 汇编-js与ja指令

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

因此,我的目标是写出与此程序集对应的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   
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 );
}