Assembly 这次集会的目的是什么

Assembly 这次集会的目的是什么,assembly,x86,reverse-engineering,Assembly,X86,Reverse Engineering,我正在逆转一些恶意软件,我在反汇编过程中遇到了以下问题: │ 0x0040f5ec 8bd8 mov ebx, eax │ 0x0040f5ee 85db test ebx, ebx │ ┌─< 0x0040f5f0 7507 jne 0x40f5f9 │ │ 0x0040f5f2 8bc6 mov ea

我正在逆转一些恶意软件,我在反汇编过程中遇到了以下问题:

│           0x0040f5ec      8bd8           mov ebx, eax
│           0x0040f5ee      85db           test ebx, ebx
│       ┌─< 0x0040f5f0      7507           jne 0x40f5f9
│       │   0x0040f5f2      8bc6           mov eax, esi
│      ┌──< 0x0040f5f4      e9b3000000     jmp 0x40f6ac
│      │└─> 0x0040f5f9      57             push edi
│           0x0040f5ec 8bd8 mov ebx,eax
│           0x0040f5ee 85db测试ebx,ebx
│       ┌─< 0x0040f5f0 7507 jne 0x40f5f9
│       │   0x0040f5f2 8bc6 mov eax,esi
│      ┌──< 0x0040f5f4 e9b3000000 jmp 0x40f6ac
│      │└─> 0x0040f5f9 57推式edi
据我所知,用寄存器本身测试寄存器将始终设置零标志。然后JNE将检查零标志,如果未设置,则跳转。如果是这样的话,为什么我们在针对寄存器本身测试之后就有JNE跳转呢?在什么情况下执行

我是否误解了测试或JNE操作,或者我还遗漏了什么


感谢您的帮助,如果这是一个愚蠢的问题,请道歉。

测试执行and操作。所以,如果ebx包含一个3,与3的AND是3,它不是零。但如果ebx包含一个0,那么0加0等于零。jne基于零标志,零标志根据受测试指令影响的英特尔文档

编辑

Disassembly of section .text:

0000000000000000 <.text>:
   0:   85 db                   test   %ebx,%ebx
   2:   3b 1c 25 00 00 00 00    cmp    0x0,%ebx
节的反汇编。文本:
0000000000000000 :
0:85 db测试%ebx,%ebx
2:3b 1c 25 00 00 cmp 0x0,%ebx

它是两个字节的指令,用于使用test来比较是否为零。因此,这可能就是为什么您会看到test reg,reg,如果相等或不相等,则会跳转,而不是与零比较。

一些注释使其更容易:

       0x0040f5ec      8bd8           mov ebx, eax    ;  
       0x0040f5ee      85db           test ebx, ebx   ;  if ( eax == 0 )
   ┌─< 0x0040f5f0      7507           jne 0x40f5f9    ;  {
   │   0x0040f5f2      8bc6           mov eax, esi    ;      eax = esi;
  ┌──< 0x0040f5f4      e9b3000000     jmp 0x40f6ac    ;  } else {
  │└─> 0x0040f5f9      57             push edi        ;      // call some method
0x0040f5ec 8bd8 mov ebx、eax;
0x0040f5ee 85db测试ebx,ebx;如果(eax==0)
┌─< 0x0040f5f0 7507 jne 0x40f5f9;{
│   0x0040f5f2 8bc6 mov eax,esi;eax=esi;
┌──< 0x0040f5f4 e9b3000000 jmp 0x40f6ac;}其他{
│└─> 0x0040f5f9 57推式edi;//调用某个方法

好的,这是表示
if(!ebx)的最佳方式jmp…
?一点也不傻!虽然之前可能在stackoverflow上问过,但这对每个人来说都不明显,然后即使理解了ANDIN,人们也想知道为什么使用测试而不是与零进行比较。xor ebx,ebx vs mov ebx,0也属于这一类。可能重复的可能重复