![](zzz/editor/img/code.gif)
程序代码:
; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.40219.01
TITLE e:\My_Documents\Projects\C_Test\test2\test2.cpp
.686P
.XMM
include listing.inc
.model flat
INCLUDELIB MSVCRTD
INCLUDELIB OLDNAMES
PUBLIC ??_C@_08GAIPLOLA@c?J?G?$KD?$LK?$CFs?6?$AA@ ; `string'
PUBLIC ??_C@_0CL@LCHNGBJP@?U?b?$MA?o?T?Y?S?P?R?$LL?$LI?v?W?V?$LH?$PL?$LE?$KO?S?$KG?$LI?C?J?G?$LC?$LL?T?v?$LM?S?$LG?Q@ ; `string'
PUBLIC ??_C@_08HHPEKKPD@b?J?G?$KD?$LK?$CFs?6?$AA@ ; `string'
PUBLIC ??_C@_08EOHJJGDG@a?J?G?$KD?$LK?$CFs?6?$AA@ ; `string'
PUBLIC ??_C@_0BJ@PJBNBAIL@?N?R?S?C?U?b?$LI?v?J?$PN?W?i?$LH?E?R?$LL?$LI?v?W?V?$LH?$PL?$LE?$KO?$AA@ ; `string'
PUBLIC __$ArrayPad$
PUBLIC _main
EXTRN __imp__printf:PROC
EXTRN _strcpy:PROC
EXTRN ___security_cookie:DWORD
EXTRN @__security_check_cookie@4:PROC
EXTRN @_RTC_CheckStackVars@8:PROC
EXTRN __RTC_CheckEsp:PROC
EXTRN _memset:PROC
EXTRN __RTC_Shutdown:PROC
EXTRN __RTC_InitBase:PROC
; COMDAT ??_C@_08GAIPLOLA@c?J?G?$KD?$LK?$CFs?6?$AA@
; File e:\my_documents\projects\c_test\test2\test2.cpp
CONST SEGMENT
??_C@_08GAIPLOLA@c?J?G?$KD?$LK?$CFs?6?$AA@ DB 'c', 0caH, 0c7H, 0a3H, 0baH
DB '%s', 0aH, 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0CL@LCHNGBJP@?U?b?$MA?o?T?Y?S?P?R?$LL?$LI?v?W?V?$LH?$PL?$LE?$KO?S?$KG?$LI?C?J?G?$LC?$LL?T?v?$LM?S?$LG?Q@
CONST SEGMENT
??_C@_0CL@LCHNGBJP@?U?b?$MA?o?T?Y?S?P?R?$LL?$LI?v?W?V?$LH?$PL?$LE?$KO?S?$KG?$LI?C?J?G?$LC?$LL?T?v?$LM?S?$LG?Q@ DB 0d5H
DB 0e2H, 0c0H, 0efH, 0d4H, 0d9H, 0d3H, 0d0H, 0d2H, 0bbH, 0b8H, 0f6H
DB 0d7H, 0d6H, 0b7H, 0fbH, 0b4H, 0aeH, 0d3H, 0a6H, 0b8H, 0c3H, 0caH
DB 0c7H, 0b2H, 0bbH, 0d4H, 0f6H, 0bcH, 0d3H, 0b6H, 0d1H, 0d5H, 0bbH
DB 0b4H, 0f3H, 0d0H, 0a1H, 0b2H, 0c5H, 0b6H, 0d4H, 00H ; `string'
CONST ENDS
; COMDAT ??_C@_08HHPEKKPD@b?J?G?$KD?$LK?$CFs?6?$AA@
CONST SEGMENT
??_C@_08HHPEKKPD@b?J?G?$KD?$LK?$CFs?6?$AA@ DB 'b', 0caH, 0c7H, 0a3H, 0baH
DB '%s', 0aH, 00H ; `string'
CONST ENDS
; COMDAT ??_C@_08EOHJJGDG@a?J?G?$KD?$LK?$CFs?6?$AA@
CONST SEGMENT
??_C@_08EOHJJGDG@a?J?G?$KD?$LK?$CFs?6?$AA@ DB 'a', 0caH, 0c7H, 0a3H, 0baH
DB '%s', 0aH, 00H ; `string'
CONST ENDS
; COMDAT ??_C@_0BJ@PJBNBAIL@?N?R?S?C?U?b?$LI?v?J?$PN?W?i?$LH?E?R?$LL?$LI?v?W?V?$LH?$PL?$LE?$KO?$AA@
CONST SEGMENT
??_C@_0BJ@PJBNBAIL@?N?R?S?C?U?b?$LI?v?J?$PN?W?i?$LH?E?R?$LL?$LI?v?W?V?$LH?$PL?$LE?$KO?$AA@ DB 0ceH
DB 0d2H, 0d3H, 0c3H, 0d5H, 0e2H, 0b8H, 0f6H, 0caH, 0fdH, 0d7H, 0e9H
DB 0b7H, 0c5H, 0d2H, 0bbH, 0b8H, 0f6H, 0d7H, 0d6H, 0b7H, 0fbH, 0b4H
DB 0aeH, 00H ; `string'
CONST ENDS
; COMDAT rtc$TMZ
rtc$TMZ SEGMENT
__RTC_Shutdown.rtc$TMZ DD FLAT:__RTC_Shutdown
rtc$TMZ ENDS
; COMDAT rtc$IMZ
rtc$IMZ SEGMENT
__RTC_InitBase.rtc$IMZ DD FLAT:__RTC_InitBase
; Function compile flags: /Odtp /RTCsu /ZI
rtc$IMZ ENDS
; COMDAT _main
_TEXT SEGMENT
_c$ = -216 ; size = 64
_b$4520 = -144 ; size = 64
_a$ = -72 ; size = 64
__$ArrayPad$ = -4 ; size = 4
_main PROC ; COMDAT
; 5 : {
push ebp
mov ebp, esp
sub esp, 412 ; 0000019cH
push ebx
push esi
push edi
lea edi, DWORD PTR [ebp-412]
mov ecx, 103 ; 00000067H
mov eax, -858993460 ; ccccccccH
rep stosd
mov eax, DWORD PTR ___security_cookie
xor eax, ebp
mov DWORD PTR __$ArrayPad$[ebp], eax
; 6 : char a[64] = {0};
mov BYTE PTR _a$[ebp], 0
push 63 ; 0000003fH
push 0
lea eax, DWORD PTR _a$[ebp+1]
push eax
call _memset
add esp, 12 ; 0000000cH
; 7 : strcpy(a, "我用这个数组放一个字符串");
push OFFSET ??_C@_0BJ@PJBNBAIL@?N?R?S?C?U?b?$LI?v?J?$PN?W?i?$LH?E?R?$LL?$LI?v?W?V?$LH?$PL?$LE?$KO?$AA@
lea eax, DWORD PTR _a$[ebp]
push eax
call _strcpy
add esp, 8
; 8 : printf("a是:%s\n", a);
mov esi, esp
lea eax, DWORD PTR _a$[ebp]
push eax
push OFFSET ??_C@_08EOHJJGDG@a?J?G?$KD?$LK?$CFs?6?$AA@
call DWORD PTR __imp__printf
add esp, 8
cmp esi, esp
call __RTC_CheckEsp
; 9 :
; 10 : {
; 11 : //这是个大括号里面
; 12 : char b[64] = {0};
mov BYTE PTR _b$4520[ebp], 0
push 63 ; 0000003fH
push 0
lea eax, DWORD PTR _b$4520[ebp+1]
push eax
call _memset
add esp, 12 ; 0000000cH
; 13 : strcpy(b, a);
lea eax, DWORD PTR _a$[ebp]
push eax
lea ecx, DWORD PTR _b$4520[ebp]
push ecx
call _strcpy
add esp, 8
; 14 : printf("b是:%s\n", b);
mov esi, esp
lea eax, DWORD PTR _b$4520[ebp]
push eax
push OFFSET ??_C@_08HHPEKKPD@b?J?G?$KD?$LK?$CFs?6?$AA@
call DWORD PTR __imp__printf
add esp, 8
cmp esi, esp
call __RTC_CheckEsp
; 15 : }
; 16 : //理论上到这里b就释放了
; 17 :
; 18 : char c[64] = "这里再有一个字符串应该是不增加堆栈大小才对";
mov ecx, 10 ; 0000000aH
mov esi, OFFSET ??_C@_0CL@LCHNGBJP@?U?b?$MA?o?T?Y?S?P?R?$LL?$LI?v?W?V?$LH?$PL?$LE?$KO?S?$KG?$LI?C?J?G?$LC?$LL?T?v?$LM?S?$LG?Q@
lea edi, DWORD PTR _c$[ebp]
rep movsd
movsw
movsb
xor eax, eax
mov DWORD PTR _c$[ebp+43], eax
mov DWORD PTR _c$[ebp+47], eax
mov DWORD PTR _c$[ebp+51], eax
mov DWORD PTR _c$[ebp+55], eax
mov DWORD PTR _c$[ebp+59], eax
mov BYTE PTR _c$[ebp+63], al
; 19 : printf("c是:%s\n", c);
mov esi, esp
lea eax, DWORD PTR _c$[ebp]
push eax
push OFFSET ??_C@_08GAIPLOLA@c?J?G?$KD?$LK?$CFs?6?$AA@
call DWORD PTR __imp__printf
add esp, 8
cmp esi, esp
call __RTC_CheckEsp
; 20 :
; 21 : return 0;
xor eax, eax
; 22 : }
push edx
mov ecx, ebp
push eax
lea edx, DWORD PTR $LN7@main
call @_RTC_CheckStackVars@8
pop eax
pop edx
pop edi
pop esi
pop ebx
mov ecx, DWORD PTR __$ArrayPad$[ebp]
xor ecx, ebp
call @__security_check_cookie@4
add esp, 412 ; 0000019cH
cmp ebp, esp
call __RTC_CheckEsp
mov esp, ebp
pop ebp
ret 0
npad 3
$LN7@main:
DD 3
DD $LN6@main
$LN6@main:
DD -72 ; ffffffb8H
DD 64 ; 00000040H
DD $LN3@main
DD -144 ; ffffff70H
DD 64 ; 00000040H
DD $LN4@main
DD -216 ; ffffff28H
DD 64 ; 00000040H
DD $LN5@main
$LN5@main:
DB 99 ; 00000063H
DB 0
$LN4@main:
DB 98 ; 00000062H
DB 0
$LN3@main:
DB 97 ; 00000061H
DB 0
_main ENDP
_TEXT ENDS
END