我试图使用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吗?还是我错过了什么?
1条答案
按热度按时间sz81bmfz1#
你看到的只是代码的长度,而不是它的执行位置(内存偏移)。你用一个'unknown'(0)内存偏移量执行了你的代码(我想你没有改变**'alignment offset'的值,它等于0,对吗?)。你需要告诉uiCA你希望代码在哪里执行,一个32字节对齐的内存。将'alignment offset'设置为32**,您将看到**' J '标志(代表JCC勘误表**)。也许你的代码在一个16字节对齐的内存中执行,并且在执行时没有问题(没有JCC勘误表)。