assembly uiCA汇编代码检查未检测到JCC错误

3j86kqsm  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(126)

我试图使用uiCA检查我的代码,但发生了意想不到的事情!我的一个cmp jcc位于0x 7 e,即(126),但uiCA没有检测到它的JCC勘误表问题!!!

7e: 3c 2b                   cmp    al,0x2b
80: 74 de                   je     0x60

要检查的完整代码

0000000000000000 <.text>:
   0:   49 89 d0                mov    r8,rdx
   3:   48 31 c0                xor    rax,rax
   6:   49 89 00                mov    QWORD PTR [r8],rax
   9:   49 89 40 08             mov    QWORD PTR [r8+0x8],rax
   d:   49 89 40 10             mov    QWORD PTR [r8+0x10],rax
  11:   b9 21 00 00 00          mov    ecx,0x21
  16:   48 8d 7f 3f             lea    rdi,[rdi+0x3f]
  1a:   48 83 e7 c0             and    rdi,0xffffffffffffffc0
  1e:   49 89 f9                mov    r9,rdi
  21:   49 89 78 18             mov    QWORD PTR [r8+0x18],rdi
  25:   48 8b 06                mov    rax,QWORD PTR [rsi]
  28:   48 ba 68 74 74 70 73    movabs rdx,0x2f2f3a7370747468
  2f:   3a 2f 2f 
  32:   48 39 d0                cmp    rax,rdx
  35:   75 33                   jne    0x6a
  37:   49 b9 ff ff ff ff ff    movabs r9,0xffffffffff
  3e:   00 00 00 
  41:   4c 21 ca                and    rdx,r9
  44:   48 89 17                mov    QWORD PTR [rdi],rdx
  47:   41 c6 00 05             mov    BYTE PTR [r8],0x5
  4b:   48 83 c7 40             add    rdi,0x40
  4f:   48 83 c6 08             add    rsi,0x8
  53:   49 89 f9                mov    r9,rdi
  56:   e9 af 00 00 00          jmp    0x10a
  5b:   90                      nop
  5c:   90                      nop
  5d:   90                      nop
  5e:   90                      nop
  5f:   90                      nop
  60:   88 07                   mov    BYTE PTR [rdi],al
  62:   48 83 c7 01             add    rdi,0x1
  66:   48 83 c6 01             add    rsi,0x1
  6a:   0f b6 06                movzx  eax,BYTE PTR [rsi]
  6d:   8d 50 9f                lea    edx,[rax-0x61]
  70:   80 fa 1a                cmp    dl,0x1a
  73:   72 eb                   jb     0x60
  75:   48 8d 50 d0             lea    rdx,[rax-0x30]
  79:   80 fa 0a                cmp    dl,0xa
  7c:   72 e2                   jb     0x60
  7e:   3c 2b                   cmp    al,0x2b
  80:   74 de                   je     0x60
  82:   3c 2d                   cmp    al,0x2d
  84:   74 da                   je     0x60
  86:   3c 2e                   cmp    al,0x2e
  88:   74 d6                   je     0x60
  8a:   3c 3a                   cmp    al,0x3a
  8c:   74 12                   je     0xa0
  8e:   8d 50 bf                lea    edx,[rax-0x41]
  91:   80 fa 1a                cmp    dl,0x1a
  94:   73 4a                   jae    0xe0
  96:   04 20                   add    al,0x20
  98:   eb c6                   jmp    0x60

测试使用:https://uica.uops.info/
这是uiCA中的bug吗?还是我错过了什么?

sz81bmfz

sz81bmfz1#

你看到的只是代码的长度,而不是它的执行位置(内存偏移)。你用一个'unknown'(0)内存偏移量执行了你的代码(我想你没有改变**'alignment offset'的值,它等于0,对吗?)。你需要告诉uiCA你希望代码在哪里执行,一个32字节对齐的内存。将'alignment offset'设置为32**,您将看到**' J '标志(代表JCC勘误表**)。也许你的代码在一个16字节对齐的内存中执行,并且在执行时没有问题(没有JCC勘误表)。

相关问题