Long time no see
This commit is contained in:
@@ -0,0 +1,350 @@
|
||||
# Генерация и анализ ассемблерного кода программы на 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
|
||||
Reference in New Issue
Block a user