// 排版有点乱,没有图片直观。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int f_14a2(int *va, int vb)
{
/*14a2: f3 0f 1e fa endbr64
14a6: 55 push %rbp
14a7: 48 89 e5 mov %rsp,%rbp
14aa: 48 89 7d e8 mov %rdi,-0x18(%rbp) va
14ae: 89 75 e4 mov %esi,-0x1c(%rbp) vb */
//14b1: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp)
int i = 0;
//14b8: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%rbp)
int j = 0;
/*14bf: eb 1d jmp 14de <printf@plt+0x46e>
14c1: 8b 45 f8 mov -0x8(%rbp),%eax // eax = i
14c4: 48 98 cltq
14c6: 48 8d 14 85 00 00 00 lea 0x0(,%rax,4),%rdx // rdx = i + 4 + 0x0
14cd: 00
14ce: 48 8b 45 e8 mov -0x18(%rbp),%rax // va
14d2: 48 01 d0 add %rdx,%rax // rax = va + i + 4
14d5: 8b 00 mov (%rax),%eax // eax = va[i]
14d7: 01 45 fc add %eax,-0x4(%rbp) // j = j + va[i]
14da: 83 45 f8 01 addl $0x1,-0x8(%rbp) // i++
14de: 8b 45 f8 mov -0x8(%rbp),%eax
14e1: 3b 45 e4 cmp -0x1c(%rbp),%eax
14e4: 7c db jl 14c1 <printf@plt+0x451>*/
for (i = 0; i < vb; i++) {
j += va[i];
}
/*14e6: 8b 45 fc mov -0x4(%rbp),%eax
14e9: 5d pop %rbp
14ea: c3 retq */
return j;
}
int f_14eb(int (*va)[4], int vb)
{
/*14eb: f3 0f 1e fa endbr64
14ef: 55 push %rbp
14f0: 48 89 e5 mov %rsp,%rbp
14f3: 48 89 7d e8 mov %rdi,-0x18(%rbp) // va
14f7: 89 75 e4 mov %esi,-0x1c(%rbp)*/ // vb
//14fa: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp)
int i = 0;
//1501: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%rbp)
int j = 0;
int k;
/*1508: eb 35 jmp 153f <printf@plt+0x4cf>
150a: c7 45 f8 00 00 00 00 movl $0x0,-0x8(%rbp) // k = 0
1511: eb 22 jmp 1535 <printf@plt+0x4c5>
1513: 8b 45 f4 mov -0xc(%rbp),%eax // eax = i
1516: 48 98 cltq
1518: 48 c1 e0 04 shl $0x4,%rax // rax = i << 4
151c: 48 89 c2 mov %rax,%rdx // rdx = i << 4
151f: 48 8b 45 e8 mov -0x18(%rbp),%rax // rax = va
1523: 48 01 c2 add %rax,%rdx // rdx = va + i << 4
1526: 8b 45 f8 mov -0x8(%rbp),%eax // eax = j
1529: 48 98 cltq
152b: 8b 04 82 mov (%rdx,%rax,4),%eax // eax = rdx + i * 4
152e: 01 45 fc add %eax,-0x4(%rbp) // j = j+(rdx+i*4)
1531: 83 45 f8 01 addl $0x1,-0x8(%rbp) // k++
1535: 83 7d f8 03 cmpl $0x3,-0x8(%rbp) // k < 4
1539: 7e d8 jle 1513 <printf@plt+0x4a3>
153b: 83 45 f4 01 addl $0x1,-0xc(%rbp) // i++
153f: 8b 45 f4 mov -0xc(%rbp),%eax // eax = i
1542: 3b 45 e4 cmp -0x1c(%rbp),%eax
1545: 7c c3 jl 150a <printf@plt+0x49a>*/
for (i = 0; i < vb; i++) {
for (k = 0; k < 4; k++) {
j = va[i][k];
}
}
/*1547: 8b 45 fc mov -0x4(%rbp),%eax
154a: 5d pop %rbp
154b: c3 retq */
return j;
}
int f_1372()
{
/*1372: f3 0f 1e fa endbr64
1376: 55 push %rbp
1377: 48 89 e5 mov %rsp,%rbp
137a: 48 83 c4 80 add $0xffffffffffffff80,%rsp
137e: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax
1385: 00 00
1387: 48 89 45 f8 mov %rax,-0x8(%rbp)
138b: 31 c0 xor %eax,%eax*/
//138d: c7 45 a8 0a 00 00 00 movl $0xa,-0x58(%rbp)
//1394: c7 45 ac 14 00 00 00 movl $0x14,-0x54(%rbp)
int a[2] = {10, 20};
//139b: 48 8d 45 a8 lea -0x58(%rbp),%rax
//139f: 48 89 45 98 mov %rax,-0x68(%rbp)
int *p1 = a;
/*13a3: c7 45 d0 01 00 00 00 movl $0x1,-0x30(%rbp)
13aa: c7 45 d4 02 00 00 00 movl $0x2,-0x2c(%rbp)
13b1: c7 45 d8 03 00 00 00 movl $0x3,-0x28(%rbp)
13b8: c7 45 dc f7 ff ff ff movl $0xfffffff7,-0x24(%rbp)
13bf: c7 45 e0 04 00 00 00 movl $0x4,-0x20(%rbp)
13c6: c7 45 e4 05 00 00 00 movl $0x5,-0x1c(%rbp)
13cd: c7 45 e8 06 00 00 00 movl $0x6,-0x18(%rbp)
13d4: c7 45 ec f8 ff ff ff movl $0xfffffff8,-0x14(%rbp)*/
int b[2][4] = {{1, 2, 3, -9}, {4, 5, 6, -8}};
//13db: 48 8d 45 d0 lea -0x30(%rbp),%rax
//13df: 48 89 45 a0 mov %rax,-0x60(%rbp)
int (*p2)[4] = b;
/*13e3: 48 8b 45 98 mov -0x68(%rbp),%rax
13e7: be 02 00 00 00 mov $0x2,%esi
13ec: 48 89 c7 mov %rax,%rdi
13ef: e8 ae 00 00 00 callq 14a2 <printf@plt+0x432>
13f4: 89 45 8c mov %eax,-0x74(%rbp)*/
int ret1 = f_14a2(p1, 2);
/*13f7: 48 8b 45 a0 mov -0x60(%rbp),%rax
13fb: be 02 00 00 00 mov $0x2,%esi
1400: 48 89 c7 mov %rax,%rdi
1403: e8 e3 00 00 00 callq 14eb <printf@plt+0x47b>
1408: 89 45 90 mov %eax,-0x70(%rbp)*/
int ret2 = f_14eb(p2, 2);
/*140b: c7 45 b0 04 00 00 00 movl $0x4,-0x50(%rbp)
1412: c7 45 b4 04 00 00 00 movl $0x4,-0x4c(%rbp)
1419: c7 45 b8 04 00 00 00 movl $0x4,-0x48(%rbp)
1420: c7 45 bc 05 00 00 00 movl $0x5,-0x44(%rbp)
1427: c7 45 c0 05 00 00 00 movl $0x5,-0x40(%rbp)
142e: c7 45 c4 05 00 00 00 movl $0x5,-0x3c(%rbp)*/
int c[6] = {4, 4, 4, 5, 5, 5};
/*1435: 48 8d 45 b0 lea -0x50(%rbp),%rax
1439: be 06 00 00 00 mov $0x6,%esi
143e: 48 89 c7 mov %rax,%rdi
1441: e8 5c 00 00 00 callq 14a2 <printf@plt+0x432>
1446: 89 45 94 mov %eax,-0x6c(%rbp)*/
int ret3 = f_14a2(c, 6);
/*1449: 8b 45 8c mov -0x74(%rbp),%eax
144c: 89 c6 mov %eax,%esi
144e: 48 8d 3d af 0b 00 00 lea 0xbaf(%rip),%rdi # 2004 <printf@plt+0xf94>
1455: b8 00 00 00 00 mov $0x0,%eax
145a: e8 11 fc ff ff callq 1070 <printf@plt>*/
printf("ret1 = %d\n", ret1);
/*145f: 8b 45 90 mov -0x70(%rbp),%eax
1462: 89 c6 mov %eax,%esi
1464: 48 8d 3d a6 0b 00 00 lea 0xba6(%rip),%rdi # 2011 <printf@plt+0xfa1>
146b: b8 00 00 00 00 mov $0x0,%eax
1470: e8 fb fb ff ff callq 1070 <printf@plt>*/
printf("ret2 = %d\n", ret2);
/*1475: 8b 45 94 mov -0x6c(%rbp),%eax
1478: 89 c6 mov %eax,%esi
147a: 48 8d 3d 9d 0b 00 00 lea 0xb9d(%rip),%rdi # 201e <printf@plt+0xfae>
1481: b8 00 00 00 00 mov $0x0,%eax
1486: e8 e5 fb ff ff callq 1070 <printf@plt>*/
printf("ret3 = %d\n", ret3);
/*148b: 90 nop
148c: 48 8b 55 f8 mov -0x8(%rbp),%rdx
1490: 64 48 33 14 25 28 00 xor %fs:0x28,%rdx
1497: 00 00
1499: 74 05 je 14a0 <printf@plt+0x430>
149b: e8 c0 fb ff ff callq 1060 <__stack_chk_fail@plt>
14a0: c9 leaveq
14a1: c3 retq */
return 0;
}
int f_154c(){ return 0; }
int f_1169(){ return 0; }
int f_127a(){ return 0; }
int f_12ac(){ return 0; }
int f_1308(){ return 0; }
int f_16d2(){ return 0; }
int f_18c2(){ return 0; }
int main()
{
f_1372();
f_154c();
f_1169();
f_127a();
f_12ac();
f_1308();
f_16d2();
f_18c2();
return 0;
}