自问自答,证明自己不是拿来主义,呵呵……通过定义额外的变量并观察其地址特征及生长方向,str[]定义在栈上,*str既不在栈也不在堆上,而在全局/静态区上。基于此,有关是否溢出的问题也就有了分析的基础。
目前关于快慢的问题暂时没想到可靠的实验解释方法。
目前关于快慢的问题暂时没想到可靠的实验解释方法。
梦想拥有一台龙芯3A-4000
int main(void) { char str[] = "User32"; return 0; }
; Listing generated by Microsoft (R) Optimizing Compiler Version 18.00.30501.0 TITLE D:\項目\測試\VS\test\test1\test1.cpp .686P .XMM include listing.inc .model flat INCLUDELIB MSVCRTD INCLUDELIB OLDNAMES PUBLIC _main PUBLIC ??_C@_06MFHBAGGM@User32?$AA@ ; `string' EXTRN @_RTC_CheckStackVars@8:PROC EXTRN __RTC_InitBase:PROC EXTRN __RTC_Shutdown:PROC ; 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 rtc$IMZ ENDS ; COMDAT ??_C@_06MFHBAGGM@User32?$AA@ CONST SEGMENT ??_C@_06MFHBAGGM@User32?$AA@ DB 'User32', 00H ; `string' CONST ENDS ; Function compile flags: /Odtp /RTCsu /ZI ; File d:\項目\測試\vs\test\test1\test1.cpp ; COMDAT _main _TEXT SEGMENT _str$ = -12 ; size = 7 _main PROC ; COMDAT ; 2 : { 00000 55 push ebp 00001 8b ec mov ebp, esp 00003 81 ec d0 00 00 00 sub esp, 208 ; 000000d0H 00009 53 push ebx 0000a 56 push esi 0000b 57 push edi 0000c 8d bd 30 ff ff ff lea edi, DWORD PTR [ebp-208] 00012 b9 34 00 00 00 mov ecx, 52 ; 00000034H 00017 b8 cc cc cc cc mov eax, -858993460 ; ccccccccH 0001c f3 ab rep stosd ; 3 : char str[] = "User32"; 0001e a1 00 00 00 00 mov eax, DWORD PTR ??_C@_06MFHBAGGM@User32?$AA@ 00023 89 45 f4 mov DWORD PTR _str$[ebp], eax 00026 66 8b 0d 04 00 00 00 mov cx, WORD PTR ??_C@_06MFHBAGGM@User32?$AA@+4 0002d 66 89 4d f8 mov WORD PTR _str$[ebp+4], cx 00031 8a 15 06 00 00 00 mov dl, BYTE PTR ??_C@_06MFHBAGGM@User32?$AA@+6 00037 88 55 fa mov BYTE PTR _str$[ebp+6], dl ; 4 : ; 5 : return 0; 0003a 33 c0 xor eax, eax ; 6 : } 0003c 52 push edx 0003d 8b cd mov ecx, ebp 0003f 50 push eax 00040 8d 15 00 00 00 00 lea edx, DWORD PTR $LN5@main 00046 e8 00 00 00 00 call @_RTC_CheckStackVars@8 0004b 58 pop eax 0004c 5a pop edx 0004d 5f pop edi 0004e 5e pop esi 0004f 5b pop ebx 00050 8b e5 mov esp, ebp 00052 5d pop ebp 00053 c3 ret 0 $LN5@main: 00054 01 00 00 00 DD 1 00058 00 00 00 00 DD $LN4@main $LN4@main: 0005c f4 ff ff ff DD -12 ; fffffff4H 00060 07 00 00 00 DD 7 00064 00 00 00 00 DD $LN3@main $LN3@main: 00068 73 DB 115 ; 00000073H 00069 74 DB 116 ; 00000074H 0006a 72 DB 114 ; 00000072H 0006b 00 DB 0 _main ENDP _TEXT ENDS END