Files
sibsutis/infolabs/assembly/report.md
T
2025-11-27 12:09:05 +07:00

351 lines
7.7 KiB
Markdown

# Генерация и анализ ассемблерного кода программы на C
---
## main.c
```c
void inc(int *p){(*p)++;}
void dec(int *p){(*p)--;}
int main(){
int x=10;
inc(&x);
dec(&x);
return 0;
}
```
---
## linux_x86_64_numbered.s
```asm
1 .file "main.c"
2 .text
3 .globl inc
4 .type inc, @function
5 inc:
6 .LFB0:
7 .cfi_startproc
8 pushq %rbp
9 .cfi_def_cfa_offset 16
10 .cfi_offset 6, -16
11 movq %rsp, %rbp
12 .cfi_def_cfa_register 6
13 movq %rdi, -8(%rbp)
14 movq -8(%rbp), %rax
15 movl (%rax), %eax
16 leal 1(%rax), %edx
17 movq -8(%rbp), %rax
18 movl %edx, (%rax)
19 nop
20 popq %rbp
21 .cfi_def_cfa 7, 8
22 ret
23 .cfi_endproc
24 .LFE0:
25 .size inc, .-inc
26 .globl dec
27 .type dec, @function
28 dec:
29 .LFB1:
30 .cfi_startproc
31 pushq %rbp
32 .cfi_def_cfa_offset 16
33 .cfi_offset 6, -16
34 movq %rsp, %rbp
35 .cfi_def_cfa_register 6
36 movq %rdi, -8(%rbp)
37 movq -8(%rbp), %rax
38 movl (%rax), %eax
39 leal -1(%rax), %edx
40 movq -8(%rbp), %rax
41 movl %edx, (%rax)
42 nop
43 popq %rbp
44 .cfi_def_cfa 7, 8
45 ret
46 .cfi_endproc
47 .LFE1:
48 .size dec, .-dec
49 .globl main
50 .type main, @function
51 main:
52 .LFB2:
53 .cfi_startproc
54 pushq %rbp
55 .cfi_def_cfa_offset 16
56 .cfi_offset 6, -16
57 movq %rsp, %rbp
58 .cfi_def_cfa_register 6
59 subq $16, %rsp
60 movq %fs:40, %rax
61 movq %rax, -8(%rbp)
62 xorl %eax, %eax
63 movl $10, -12(%rbp)
64 leaq -12(%rbp), %rax
65 movq %rax, %rdi
66 call inc
67 leaq -12(%rbp), %rax
68 movq %rax, %rdi
69 call dec
70 movl $0, %eax
71 movq -8(%rbp), %rdx
72 subq %fs:40, %rdx
73 je .L5
74 call __stack_chk_fail@PLT
75 .L5:
76 leave
77 .cfi_def_cfa 7, 8
78 ret
79 .cfi_endproc
80 .LFE2:
81 .size main, .-main
82 .ident "GCC: (GNU) 15.2.1 20251112"
83 .section .note.GNU-stack,"",@progbits
```
---
# windows_x86_64_numbered.s
```asm
1 .file "main.c"
2 .text
3 .globl inc
4 .def inc; .scl 2; .type 32; .endef
5 .seh_proc inc
6 inc:
7 pushq %rbp
8 .seh_pushreg %rbp
9 movq %rsp, %rbp
10 .seh_setframe %rbp, 0
11 .seh_endprologue
12 movq %rcx, 16(%rbp)
13 movq 16(%rbp), %rax
14 movl (%rax), %eax
15 leal 1(%rax), %edx
16 movq 16(%rbp), %rax
17 movl %edx, (%rax)
18 nop
19 popq %rbp
20 ret
21 .seh_endproc
22 .globl dec
23 .def dec; .scl 2; .type 32; .endef
24 .seh_proc dec
25 dec:
26 pushq %rbp
27 .seh_pushreg %rbp
28 movq %rsp, %rbp
29 .seh_setframe %rbp, 0
30 .seh_endprologue
31 movq %rcx, 16(%rbp)
32 movq 16(%rbp), %rax
33 movl (%rax), %eax
34 leal -1(%rax), %edx
35 movq 16(%rbp), %rax
36 movl %edx, (%rax)
37 nop
38 popq %rbp
39 ret
40 .seh_endproc
41 .globl main
42 .def main; .scl 2; .type 32; .endef
43 .seh_proc main
44 main:
45 pushq %rbp
46 .seh_pushreg %rbp
47 movq %rsp, %rbp
48 .seh_setframe %rbp, 0
49 subq $48, %rsp
50 .seh_stackalloc 48
51 .seh_endprologue
52 call __main
53 movl $10, -4(%rbp)
54 leaq -4(%rbp), %rax
55 movq %rax, %rcx
56 call inc
57 leaq -4(%rbp), %rax
58 movq %rax, %rcx
59 call dec
60 movl $0, %eax
61 addq $48, %rsp
62 popq %rbp
63 ret
64 .seh_endproc
65 .def __main; .scl 2; .type 32; .endef
66 .ident "GCC: (GNU) 15.2.0"
```
---
# riscv64_numbered.s
```asm
1 .file "main.c"
2 .option pic
3 .attribute arch, "rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zmmul1p0_zaamo1p0_zalrsc1p0_zca1p0_zcd1p0"
4 .attribute unaligned_access, 0
5 .attribute stack_align, 16
6 .text
7 .align 1
8 .globl inc
9 .type inc, @function
10 inc:
11 .LFB0:
12 .cfi_startproc
13 addi sp,sp,-32
14 .cfi_def_cfa_offset 32
15 sd ra,24(sp)
16 sd s0,16(sp)
17 .cfi_offset 1, -8
18 .cfi_offset 8, -16
19 addi s0,sp,32
20 .cfi_def_cfa 8, 0
21 sd a0,-24(s0)
22 ld a5,-24(s0)
23 lw a5,0(a5)
24 addiw a5,a5,1
25 sext.w a4,a5
26 ld a5,-24(s0)
27 sw a4,0(a5)
28 nop
29 ld ra,24(sp)
30 .cfi_restore 1
31 ld s0,16(sp)
32 .cfi_restore 8
33 .cfi_def_cfa 2, 32
34 addi sp,sp,32
35 .cfi_def_cfa_offset 0
36 jr ra
37 .cfi_endproc
38 .LFE0:
39 .size inc, .-inc
40 .align 1
41 .globl dec
42 .type dec, @function
43 dec:
44 .LFB1:
45 .cfi_startproc
46 addi sp,sp,-32
47 .cfi_def_cfa_offset 32
48 sd ra,24(sp)
49 sd s0,16(sp)
50 .cfi_offset 1, -8
51 .cfi_offset 8, -16
52 addi s0,sp,32
53 .cfi_def_cfa 8, 0
54 sd a0,-24(s0)
55 ld a5,-24(s0)
56 lw a5,0(a5)
57 addiw a5,a5,-1
58 sext.w a4,a5
59 ld a5,-24(s0)
60 sw a4,0(a5)
61 nop
62 ld ra,24(sp)
63 .cfi_restore 1
64 ld s0,16(sp)
65 .cfi_restore 8
66 .cfi_def_cfa 2, 32
67 addi sp,sp,32
68 .cfi_def_cfa_offset 0
69 jr ra
70 .cfi_endproc
71 .LFE1:
72 .size dec, .-dec
73 .align 1
74 .globl main
75 .type main, @function
76 main:
77 .LFB2:
78 .cfi_startproc
79 addi sp,sp,-32
80 .cfi_def_cfa_offset 32
81 sd ra,24(sp)
82 sd s0,16(sp)
83 .cfi_offset 1, -8
84 .cfi_offset 8, -16
85 addi s0,sp,32
86 .cfi_def_cfa 8, 0
87 li a5,10
88 sw a5,-20(s0)
89 addi a5,s0,-20
90 mv a0,a5
91 call inc
92 addi a5,s0,-20
93 mv a0,a5
94 call dec
95 li a5,0
96 mv a0,a5
97 ld ra,24(sp)
98 .cfi_restore 1
99 ld s0,16(sp)
100 .cfi_restore 8
101 .cfi_def_cfa 2, 32
102 addi sp,sp,32
103 .cfi_def_cfa_offset 0
104 jr ra
105 .cfi_endproc
106 .LFE2:
107 .size main, .-main
108 .ident "GCC: (GNU) 15.1.0"
109 .section .note.GNU-stack,"",@progbits
```
---
## INFO
---
### gcc_version
gcc (GCC) 15.2.1 20251112
Copyright (C) 2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
---
### linux_gcc_version
gcc (GCC) 15.2.1 20251112
Copyright (C) 2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
---
### mingw_version
x86_64-w64-mingw32-gcc (GCC) 15.2.0
Copyright (C) 2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
---
### riscv_version
riscv64-linux-gnu-gcc (GCC) 15.1.0
Copyright (C) 2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
---
### sysinfo
Linux archlinux 6.17.8-arch1-1 #1 SMP PREEMPT_DYNAMIC Fri, 14 Nov 2025 06:54:20 +0000 x86_64 GNU/Linux
NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://gitlab.archlinux.org/groups/archlinux/-/issues"
PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
LOGO=archlinux-logo