反汇编出来看到做了一堆的运算,乘、除、左右移、跳转等。其实是什么也没有做啊,逆向的时候,碰到这种代码,直接要晕掉了。
int bbb()
{
int row = 3, col = 4;
int ary[row][col];
int array(int col, int row, int ary[col][row]);
int arra2(int ary[col][row], int col, int row); // not VLA
}
反汇编:
000000000000154c <bbb>:
154c: f3 0f 1e fa endbr64
1550: 55 push %rbp
1551: 48 89 e5 mov %rsp,%rbp
1554: 41 56 push %r14
1556: 41 55 push %r13
1558: 41 54 push %r12
155a: 53 push %rbx
155b: 48 83 ec 40 sub $0x40,%rsp // rsp=0x7fffffffe130
155f: 64 4c 8b 34 25 28 00 mov %fs:0x28,%r14
1566: 00 00
1568: 4c 89 75 d8 mov %r14,-0x28(%rbp)
156c: 45 31 f6 xor %r14d,%r14d
156f: 49 89 e2 mov %rsp,%r10
1572: 4d 89 d6 mov %r10,%r14 // r14=rsp=0x7fffffffe130
1575: c7 45 bc 03 00 00 00 movl $0x3,-0x44(%rbp) // (rbp-0x44)=0x3
157c: c7 45 b8 04 00 00 00 movl $0x4,-0x48(%rbp) // (rbp-0x48)=0x4
1583: 44 8b 55 b8 mov -0x48(%rbp),%r10d // r10d=0x4
1587: 44 8b 5d bc mov -0x44(%rbp),%r11d // r11d=0x3
158b: 4d 63 e2 movslq %r10d,%r12 // r12=0x4
158e: 49 83 ec 01 sub $0x1,%r12 // r12=0x3
1592: 4c 89 65 c0 mov %r12,-0x40(%rbp) // (rbp-0x40)=0x3
1596: 4d 63 e2 movslq %r10d,%r12 // r12=0x4
1599: 4c 89 65 a0 mov %r12,-0x60(%rbp) // (rbp-0x60)=0x4
159d: 48 c7 45 a8 00 00 00 movq $0x0,-0x58(%rbp) // (rbp-0x58)=0x0
15a4: 00
15a5: 4d 63 e3 movslq %r11d,%r12 // r12=0x3
15a8: 49 83 ec 01 sub $0x1,%r12 // r12=0x2
15ac: 4c 89 65 c8 mov %r12,-0x38(%rbp) // (rbp-0x38)=0x2
15b0: 4d 63 e2 movslq %r10d,%r12 // r12=0x4
15b3: 4d 89 e0 mov %r12,%r8 // r8=0x4
15b6: 41 b9 00 00 00 00 mov $0x0,%r9d // r9d=0x0
15bc: 4d 63 e3 movslq %r11d,%r12 // r12=0x3
15bf: 4c 89 e0 mov %r12,%rax // rax=0x3
15c2: ba 00 00 00 00 mov $0x0,%edx // edx=0x0
15c7: 4d 89 cd mov %r9,%r13 // r13=0x0
15ca: 4c 0f af e8 imul %rax,%r13 // r13=rax*r13=0x3*0x0=0x0
15ce: 49 89 d4 mov %rdx,%r12 // r12=0x0
15d1: 4d 0f af e0 imul %r8,%r12 // r12=r8*r12=0x4*0x0=0x0
15d5: 4d 01 ec add %r13,%r12 // r12=r13+r12=0x0
15d8: 49 f7 e0 mul %r8 // rax=rax*r8=0x3*0x4=0xC
15db: 4d 8d 04 14 lea (%r12,%rdx,1),%r8 // r8=r12+rdx*1=0+0*1=0
15df: 4c 89 c2 mov %r8,%rdx // rdx=0x0
15e2: 49 63 c2 movslq %r10d,%rax // rax=0x4
15e5: 48 89 c6 mov %rax,%rsi // rsi=0x4
15e8: bf 00 00 00 00 mov $0x0,%edi // edi=0x0
15ed: 49 63 c3 movslq %r11d,%rax // rax=0x3
15f0: 48 89 c1 mov %rax,%rcx // rcx=0x3
15f3: bb 00 00 00 00 mov $0x0,%ebx // ebx=0x0
15f8: 48 89 fa mov %rdi,%rdx // rdx=0x0
15fb: 48 0f af d1 imul %rcx,%rdx // rdx=rdx*rcx=0x0*0x3=0x0
15ff: 48 89 d8 mov %rbx,%rax // rax=0x0
1602: 48 0f af c6 imul %rsi,%rax // rax=rax*rsi=0x0*0x3=0x0
1606: 4c 8d 04 02 lea (%rdx,%rax,1),%r8 // r8=rdx+rax*1=0+0*1=0
160a: 48 89 f0 mov %rsi,%rax // rax=0x4
160d: 48 f7 e1 mul %rcx // rax=rax*rcx=0x4*0x3=0xc
1610: 49 8d 0c 10 lea (%r8,%rdx,1),%rcx // rcx=r8+rdx*1=0
1614: 48 89 ca mov %rcx,%rdx // rdx=rcx=0
1617: 49 63 d2 movslq %r10d,%rdx // rdx=r10d=0x4
161a: 49 63 c3 movslq %r11d,%rax // rax=r11d=0x3
161d: 48 0f af c2 imul %rdx,%rax // rax=rax*rdx=0xc
1621: 48 8d 14 85 00 00 00 lea 0x0(,%rax,4),%rdx // rdx=(rax*4)+0x0=0xc*4+0=0x30
1628: 00
1629: b8 10 00 00 00 mov $0x10,%eax // eax=0x10
162e: 48 83 e8 01 sub $0x1,%rax // rax=0xf
1632: 48 01 d0 add %rdx,%rax // rax=0x30+0xf=0x3f
1635: bb 10 00 00 00 mov $0x10,%ebx // ebx=0x10
163a: ba 00 00 00 00 mov $0x0,%edx // edx=0
163f: 48 f7 f3 div %rbx // rax=rax/rbx=0x3f/0x10=0x3, rdx=0xf
1642: 48 6b c0 10 imul $0x10,%rax,%rax // rax=rax*0x10=0x3*0x10=0x30
1646: 48 89 c2 mov %rax,%rdx // rdx=0x30
1649: 48 81 e2 00 f0 ff ff and $0xfffffffffffff000,%rdx // rdx=0x0
1650: 48 89 e7 mov %rsp,%rdi // rdi=0x7fffffffe130
1653: 48 29 d7 sub %rdx,%rdi // rdi=0x7fffffffe130
1656: 48 89 fa mov %rdi,%rdx // rdx=0x7fffffffe130
1659: 48 39 d4 cmp %rdx,%rsp
165c: 74 12 je 1670 <bbb+0x124> // jump 1670
165e: 48 81 ec 00 10 00 00 sub $0x1000,%rsp
1665: 48 83 8c 24 f8 0f 00 orq $0x0,0xff8(%rsp)
166c: 00 00
166e: eb e9 jmp 1659 <bbb+0x10d>
1670: 48 89 c2 mov %rax,%rdx // rdx=0x30
1673: 81 e2 ff 0f 00 00 and $0xfff,%edx // edx=0x30
1679: 48 29 d4 sub %rdx,%rsp // rsp=0x7fffffffe100
167c: 48 89 c2 mov %rax,%rdx // rdx=0x30
167f: 81 e2 ff 0f 00 00 and $0xfff,%edx // edx=0x30
1685: 48 85 d2 test %rdx,%rdx
1688: 74 10 je 169a <bbb+0x14e> // not jump
168a: 25 ff 0f 00 00 and $0xfff,%eax // eax=0x30
168f: 48 83 e8 08 sub $0x8,%rax // rax=0x28
1693: 48 01 e0 add %rsp,%rax // rax=0x7fffffffe128
1696: 48 83 08 00 orq $0x0,(%rax) // rax=0x7fffffffe128:0x00007fffffffe138
169a: 48 89 e0 mov %rsp,%rax // rax=0x7fffffffe100
169d: 48 83 c0 03 add $0x3,%rax // rax=rax+0x3=0x7fffffffe103
16a1: 48 c1 e8 02 shr $0x2,%rax // rax=rax>>2 =0x1ffffffff840
16a5: 48 c1 e0 02 shl $0x2,%rax // rax=rax<<2 =0x7fffffffe110
16a9: 48 89 45 d0 mov %rax,-0x30(%rbp) // 0x7fffffffe170: 0x00007fffffffe100
16ad: 4c 89 f4 mov %r14,%rsp // rsp=0x7fffffffe130
16b0: 90 nop
16b1: 48 8b 5d d8 mov -0x28(%rbp),%rbx
16b5: 64 48 33 1c 25 28 00 xor %fs:0x28,%rbx
16bc: 00 00
16be: 74 05 je 16c5 <bbb+0x179>
16c0: e8 9b f9 ff ff callq 1060 <__stack_chk_fail@plt>
16c5: 48 8d 65 e0 lea -0x20(%rbp),%rsp
16c9: 5b pop %rbx
16ca: 41 5c pop %r12
16cc: 41 5d pop %r13
16ce: 41 5e pop %r14
16d0: 5d pop %rbp
16d1: c3 retq