| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1870 人关注过本帖
标题:释放?不释放?实践是检验真理的唯一标准
只看楼主 加入收藏
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
结帖率:100%
收藏
 问题点数:0 回复次数:28 
释放?不释放?实践是检验真理的唯一标准
感谢版主加高亮!

发这贴的原因是因为有这一帖 https://bbs.bccn.net/thread-375036-1-1.html

程序代码:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char a[64] = {0};
    strcpy(a, "我用这个数组放一个字符串");
    printf("a是:%s\n", a);
   
    {
        //这是个大括号里面
        char b[64] = {0};
        strcpy(b, a);
        printf("b是:%s\n", b);
    }
    //理论上到这里b就释放了 而且写代码用这个b也确实会出错
   
    return 0;
}



GCC 4.6.2 编译参数  gcc a.c -Wall -std=c99

程序代码:

0x004013b7 <main+0>:   push   ebp
0x004013b8 <main+1>:   mov    ebp,esp
0x004013ba <main+3>:   push   edi
0x004013bb <main+4>:   push   esi
0x004013bc <main+5>:   push   ebx
0x004013bd <main+6>:   and    esp,0xfffffff0
0x004013c0 <main+9>:   sub    esp,0x90
0x004013c6 <main+15>:  call   0x40196c <__main>
0x004013cb <main+20>:  lea    ebx,[esp+0x50]
0x004013cf <main+24>:  mov    al,0x0
0x004013d1 <main+26>:  mov    edx,0x40
0x004013d6 <main+31>:  mov    edi,ebx
0x004013d8 <main+33>:  mov    ecx,edx
0x004013da <main+35>:  rep stos BYTE PTR es:[edi],al
0x004013dc <main+37>:  lea    eax,[esp+0x50]
0x004013e0 <main+41>:  mov    edx,eax
0x004013e2 <main+43>:  mov    ebx,0x408064
0x004013e7 <main+48>:  mov    eax,0x19
0x004013ec <main+53>:  mov    edi,edx
0x004013ee <main+55>:  mov    esi,ebx
0x004013f0 <main+57>:  mov    ecx,eax
0x004013f2 <main+59>:  rep movs BYTE PTR es:[edi],BYTE PTR ds:[esi]
0x004013f4 <main+61>:  lea    eax,[esp+0x50]
0x004013f8 <main+65>:  mov    DWORD PTR [esp+0x4],eax
0x004013fc <main+69>:  mov    DWORD PTR [esp],0x40807d
0x00401403 <main+76>:  call   0x40138c <printf>
0x00401408 <main+81>:  lea    ebx,[esp+0x10]
0x0040140c <main+85>:  mov    al,0x0
0x0040140e <main+87>:  mov    edx,0x40
0x00401413 <main+92>:  mov    edi,ebx
0x00401415 <main+94>:  mov    ecx,edx
0x00401417 <main+96>:  rep stos BYTE PTR es:[edi],al
0x00401419 <main+98>:  lea    eax,[esp+0x50]
0x0040141d <main+102>: mov    DWORD PTR [esp+0x4],eax
0x00401421 <main+106>: lea    eax,[esp+0x10]
0x00401425 <main+110>: mov    DWORD PTR [esp],eax
0x00401428 <main+113>: call   0x406170 <strcpy>
0x0040142d <main+118>: lea    eax,[esp+0x10]
0x00401431 <main+122>: mov    DWORD PTR [esp+0x4],eax
0x00401435 <main+126>: mov    DWORD PTR [esp],0x408086
0x0040143c <main+133>: call   0x40138c <printf>
0x00401441 <main+138>: mov    eax,0x0
0x00401446 <main+143>: lea    esp,[ebp-0xc]
0x00401449 <main+146>: pop    ebx
0x0040144a <main+147>: pop    esi
0x0040144b <main+148>: pop    edi
0x0040144c <main+149>: pop    ebp
0x0040144d <main+150>: ret    



反汇编如上

在整个main()中 堆栈只是在开始和结束的时候动过(sub    esp,0x90 lea    esp,[ebp-0xc]) 也就是说 所谓的释放是子虚乌有 直到函数返回 堆栈才会释放

以上均为个人意见 仅供参考 不当处望指正 谢谢

==============================偶素华丽的分割线==============================

马上有大牛批评了 立马再试

程序代码:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char a[64] = {0};
    strcpy(a, "我用这个数组放一个字符串");
    printf("a是:%s\n", a);
   
    {
        //这是个大括号里面
        char b[64] = {0};
        strcpy(b, a);
        printf("b是:%s\n", b);
    }
    //理论上到这里b就释放了
   
    char c[64] = "这里再有一个字符串应该是不增加堆栈大小才对";
    printf("c是:%s\n", c);

    return 0;
}



编译参数 gcc -Wall -std=c99 a.c

反汇编如下

程序代码:

0x004013b7 <main+0>:   push   ebp
0x004013b8 <main+1>:   mov    ebp,esp
0x004013ba <main+3>:   push   edi
0x004013bb <main+4>:   push   esi
0x004013bc <main+5>:   push   ebx
0x004013bd <main+6>:   and    esp,0xfffffff0
0x004013c0 <main+9>:   sub    esp,0xd0
0x004013c6 <main+15>:  call   0x4019b4 <__main>
0x004013cb <main+20>:  lea    ebx,[esp+0x90]
0x004013d2 <main+27>:  mov    al,0x0
0x004013d4 <main+29>:  mov    edx,0x40
0x004013d9 <main+34>:  mov    edi,ebx
0x004013db <main+36>:  mov    ecx,edx
0x004013dd <main+38>:  rep stos BYTE PTR es:[edi],al
0x004013df <main+40>:  lea    eax,[esp+0x90]
0x004013e6 <main+47>:  mov    edx,eax
0x004013e8 <main+49>:  mov    ebx,0x408064
0x004013ed <main+54>:  mov    eax,0x19
0x004013f2 <main+59>:  mov    edi,edx
0x004013f4 <main+61>:  mov    esi,ebx
0x004013f6 <main+63>:  mov    ecx,eax
0x004013f8 <main+65>:  rep movs BYTE PTR es:[edi],BYTE PTR ds:[esi]
0x004013fa <main+67>:  lea    eax,[esp+0x90]
0x00401401 <main+74>:  mov    DWORD PTR [esp+0x4],eax
0x00401405 <main+78>:  mov    DWORD PTR [esp],0x40807d
0x0040140c <main+85>:  call   0x40138c <printf>
0x00401411 <main+90>:  lea    ebx,[esp+0x10]
0x00401415 <main+94>:  mov    al,0x0
0x00401417 <main+96>:  mov    edx,0x40
0x0040141c <main+101>: mov    edi,ebx
0x0040141e <main+103>: mov    ecx,edx
0x00401420 <main+105>: rep stos BYTE PTR es:[edi],al
0x00401422 <main+107>: lea    eax,[esp+0x90]
0x00401429 <main+114>: mov    DWORD PTR [esp+0x4],eax
0x0040142d <main+118>: lea    eax,[esp+0x10]
0x00401431 <main+122>: mov    DWORD PTR [esp],eax
0x00401434 <main+125>: call   0x4061b8 <strcpy>
0x00401439 <main+130>: lea    eax,[esp+0x10]
0x0040143d <main+134>: mov    DWORD PTR [esp+0x4],eax
0x00401441 <main+138>: mov    DWORD PTR [esp],0x408086
0x00401448 <main+145>: call   0x40138c <printf>
0x0040144d <main+150>: lea    edx,[esp+0x50]
0x00401451 <main+154>: mov    ebx,0x408098
0x00401456 <main+159>: mov    eax,0x2b
0x0040145b <main+164>: mov    edi,edx
0x0040145d <main+166>: mov    esi,ebx
0x0040145f <main+168>: mov    ecx,eax
0x00401461 <main+170>: rep movs BYTE PTR es:[edi],BYTE PTR ds:[esi]
0x00401463 <main+172>: lea    ebx,[esp+0x7b]
0x00401467 <main+176>: mov    al,0x0
0x00401469 <main+178>: mov    edx,0x15
0x0040146e <main+183>: mov    edi,ebx
0x00401470 <main+185>: mov    ecx,edx
0x00401472 <main+187>: rep stos BYTE PTR es:[edi],al
0x00401474 <main+189>: lea    eax,[esp+0x50]
0x00401478 <main+193>: mov    DWORD PTR [esp+0x4],eax
0x0040147c <main+197>: mov    DWORD PTR [esp],0x40808f
0x00401483 <main+204>: call   0x40138c <printf>
0x00401488 <main+209>: mov    eax,0x0
0x0040148d <main+214>: lea    esp,[ebp-0xc]
0x00401490 <main+217>: pop    ebx
0x00401491 <main+218>: pop    esi
0x00401492 <main+219>: pop    edi
0x00401493 <main+220>: pop    ebp
0x00401494 <main+221>: ret    




sub    esp,0xd0

是耶非耶


我在下面又定义了一个数组 如果上面大括号里面的数组被【释放】或【重新分配】 则我这个新程序和老程序的堆栈大小应该是一样的 可是呢 并不一样 可见 所谓的大括号可以【释放】内存或【重新分配】内存是子虚乌有的 唯一的功能就是明确这些变量的作用域 而这个功能是比较鸡肋的 因为只能在一个函数内用 比神马 命名空间 差的远罢

再次重申 个人意见 仅供参考

传下exe罢
c99_braces.zip (50.78 KB)


==============================偶素华丽的分割线==============================

程序代码:
#include <stdio.h>
#include <string.h>

int main(void)
{
    char a[64] = {0};
    strcpy(a, "我用这个数组放一个字符串");
    printf("a(%p)是:%s\n", a, a);
   
    {
        //这是个大括号里面
        char b[64] = {0};
        strcpy(b, a);
        printf("b(%p)是:%s\n", b, b);
    }
    //理论上到这里b就释放了
   
    char c[64] = "这里再有一个字符串应该是不增加堆栈大小才对";
    printf("c(%p)是:%s\n", c, c);

    return 0;
}




bash-3.1$ ./c99.exe
a(0022ff00)是:我用这个数组放一个字符串
b(0022fe80)是:我用这个数组放一个字符串
c(0022fec0)是:这里再有一个字符串应该是不增加堆栈大小才对



[ 本帖最后由 zklhp 于 2012-8-11 00:02 编辑 ]
2012-08-10 17:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你在后面再分配一个变量看看用了哪个空间。“宣告不要”跟“释放资源”是两回事,正如释放指针也没有清空所指地址的数据。

授人以渔,不授人以鱼。
2012-08-10 17:11
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用TonyDeng在2012-8-10 17:11:18的发言:

你在后面再分配一个变量看看用了哪个空间。“宣告不要”跟“释放资源”是两回事,正如释放指针也没有清空所指地址的数据。

多谢大牛批评指正
2012-08-10 17:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
即是如何?欺负我不懂?

授人以渔,不授人以鱼。
2012-08-10 17:27
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
从这个测试结果看 所谓的大括号能释放内存或者说是减少内存使用或其他神马 目前是无法实现的

或许有参数能让编译器实现这个特性 谁知道啊
2012-08-10 17:33
信箱有效
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:9
帖 子:1102
专家分:4268
注 册:2012-6-19
收藏
得分:0 
能把用C99编译好的EXE发上来不。。。
2012-08-10 18:46
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用信箱有效在2012-8-10 18:46:16的发言:

能把用C99编译好的EXE发上来不。。。

已发
2012-08-10 18:54
信箱有效
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:9
帖 子:1102
专家分:4268
注 册:2012-6-19
收藏
得分:0 
已收
2012-08-10 18:56
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
这是你第二个代码的汇编文件,你看看它是怎样的:

程序代码:
; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.40219.01 

    TITLE    e:\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    : {

  00000    55         push     ebp
  00001    8b ec         mov     ebp, esp
  00003    81 ec 9c 01 00
    00         sub     esp, 412        ; 0000019cH
  00009    53         push     ebx
  0000a    56         push     esi
  0000b    57         push     edi
  0000c    8d bd 64 fe ff
    ff         lea     edi, DWORD PTR [ebp-412]
  00012    b9 67 00 00 00     mov     ecx, 103        ; 00000067H
  00017    b8 cc cc cc cc     mov     eax, -858993460        ; ccccccccH
  0001c    f3 ab         rep stosd
  0001e    a1 00 00 00 00     mov     eax, DWORD PTR ___security_cookie
  00023    33 c5         xor     eax, ebp
  00025    89 45 fc     mov     DWORD PTR __$ArrayPad$[ebp], eax

; 6    :     char a[64] = {0};

  00028    c6 45 b8 00     mov     BYTE PTR _a$[ebp], 0
  0002c    6a 3f         push     63            ; 0000003fH
  0002e    6a 00         push     0
  00030    8d 45 b9     lea     eax, DWORD PTR _a$[ebp+1]
  00033    50         push     eax
  00034    e8 00 00 00 00     call     _memset
  00039    83 c4 0c     add     esp, 12            ; 0000000cH

; 7    :     strcpy(a, "我用这个数组放一个字符串");

  0003c    68 00 00 00 00     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@
  00041    8d 45 b8     lea     eax, DWORD PTR _a$[ebp]
  00044    50         push     eax
  00045    e8 00 00 00 00     call     _strcpy
  0004a    83 c4 08     add     esp, 8

; 8    :     printf("a是:%s\n", a);

  0004d    8b f4         mov     esi, esp
  0004f    8d 45 b8     lea     eax, DWORD PTR _a$[ebp]
  00052    50         push     eax
  00053    68 00 00 00 00     push     OFFSET ??_C@_08EOHJJGDG@a?J?G?$KD?$LK?$CFs?6?$AA@
  00058    ff 15 00 00 00
    00         call     DWORD PTR __imp__printf
  0005e    83 c4 08     add     esp, 8
  00061    3b f4         cmp     esi, esp
  00063    e8 00 00 00 00     call     __RTC_CheckEsp

; 9    :   
; 10   :     {
; 11   :         //这是个大括号里面
; 12   :         char b[64] = {0};

  00068    c6 85 70 ff ff
    ff 00         mov     BYTE PTR _b$4520[ebp], 0
  0006f    6a 3f         push     63            ; 0000003fH
  00071    6a 00         push     0
  00073    8d 85 71 ff ff
    ff         lea     eax, DWORD PTR _b$4520[ebp+1]
  00079    50         push     eax
  0007a    e8 00 00 00 00     call     _memset
  0007f    83 c4 0c     add     esp, 12            ; 0000000cH

; 13   :         strcpy(b, a);

  00082    8d 45 b8     lea     eax, DWORD PTR _a$[ebp]
  00085    50         push     eax
  00086    8d 8d 70 ff ff
    ff         lea     ecx, DWORD PTR _b$4520[ebp]
  0008c    51         push     ecx
  0008d    e8 00 00 00 00     call     _strcpy
  00092    83 c4 08     add     esp, 8

; 14   :         printf("b是:%s\n", b);

  00095    8b f4         mov     esi, esp
  00097    8d 85 70 ff ff
    ff         lea     eax, DWORD PTR _b$4520[ebp]
  0009d    50         push     eax
  0009e    68 00 00 00 00     push     OFFSET ??_C@_08HHPEKKPD@b?J?G?$KD?$LK?$CFs?6?$AA@
  000a3    ff 15 00 00 00
    00         call     DWORD PTR __imp__printf
  000a9    83 c4 08     add     esp, 8
  000ac    3b f4         cmp     esi, esp
  000ae    e8 00 00 00 00     call     __RTC_CheckEsp

; 15   :     }
; 16   :     //理论上到这里b就释放了
; 17   :   
; 18   :     char c[64] = "这里再有一个字符串应该是不增加堆栈大小才对";

  000b3    b9 0a 00 00 00     mov     ecx, 10            ; 0000000aH
  000b8    be 00 00 00 00     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@
  000bd    8d bd 28 ff ff
    ff         lea     edi, DWORD PTR _c$[ebp]
  000c3    f3 a5         rep movsd
  000c5    66 a5         movsw
  000c7    a4         movsb
  000c8    33 c0         xor     eax, eax
  000ca    89 85 53 ff ff
    ff         mov     DWORD PTR _c$[ebp+43], eax
  000d0    89 85 57 ff ff
    ff         mov     DWORD PTR _c$[ebp+47], eax
  000d6    89 85 5b ff ff
    ff         mov     DWORD PTR _c$[ebp+51], eax
  000dc    89 85 5f ff ff
    ff         mov     DWORD PTR _c$[ebp+55], eax
  000e2    89 85 63 ff ff
    ff         mov     DWORD PTR _c$[ebp+59], eax
  000e8    88 85 67 ff ff
    ff         mov     BYTE PTR _c$[ebp+63], al

; 19   :     printf("c是:%s\n", c);

  000ee    8b f4         mov     esi, esp
  000f0    8d 85 28 ff ff
    ff         lea     eax, DWORD PTR _c$[ebp]
  000f6    50         push     eax
  000f7    68 00 00 00 00     push     OFFSET ??_C@_08GAIPLOLA@c?J?G?$KD?$LK?$CFs?6?$AA@
  000fc    ff 15 00 00 00
    00         call     DWORD PTR __imp__printf
  00102    83 c4 08     add     esp, 8
  00105    3b f4         cmp     esi, esp
  00107    e8 00 00 00 00     call     __RTC_CheckEsp

; 20   :
; 21   :     return 0;

  0010c    33 c0         xor     eax, eax

; 22   : }

  0010e    52         push     edx
  0010f    8b cd         mov     ecx, ebp
  00111    50         push     eax
  00112    8d 15 00 00 00
    00         lea     edx, DWORD PTR $LN7@main
  00118    e8 00 00 00 00     call     @_RTC_CheckStackVars@8
  0011d    58         pop     eax
  0011e    5a         pop     edx
  0011f    5f         pop     edi
  00120    5e         pop     esi
  00121    5b         pop     ebx
  00122    8b 4d fc     mov     ecx, DWORD PTR __$ArrayPad$[ebp]
  00125    33 cd         xor     ecx, ebp
  00127    e8 00 00 00 00     call     @__security_check_cookie@4
  0012c    81 c4 9c 01 00
    00         add     esp, 412        ; 0000019cH
  00132    3b ec         cmp     ebp, esp
  00134    e8 00 00 00 00     call     __RTC_CheckEsp
  00139    8b e5         mov     esp, ebp
  0013b    5d         pop     ebp
  0013c    c3         ret     0
  0013d    8d 49 00     npad     3
$LN7@main:
  00140    03 00 00 00     DD     3
  00144    00 00 00 00     DD     $LN6@main
$LN6@main:
  00148    b8 ff ff ff     DD     -72            ; ffffffb8H
  0014c    40 00 00 00     DD     64            ; 00000040H
  00150    00 00 00 00     DD     $LN3@main
  00154    70 ff ff ff     DD     -144            ; ffffff70H
  00158    40 00 00 00     DD     64            ; 00000040H
  0015c    00 00 00 00     DD     $LN4@main
  00160    28 ff ff ff     DD     -216            ; ffffff28H
  00164    40 00 00 00     DD     64            ; 00000040H
  00168    00 00 00 00     DD     $LN5@main
$LN5@main:
  0016c    63         DB     99            ; 00000063H
  0016d    00         DB     0
$LN4@main:
  0016e    62         DB     98            ; 00000062H
  0016f    00         DB     0
$LN3@main:
  00170    61         DB     97            ; 00000061H
  00171    00         DB     0
_main    ENDP
_TEXT    ENDS
END

授人以渔,不授人以鱼。
2012-08-10 19:19
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
嘿嘿 拼汇编来啦 有意思

梅尚程荀
马谭杨奚







                                                       
2012-08-10 19:21
快速回复:释放?不释放?实践是检验真理的唯一标准
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027176 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved