鱼C论坛

 找回密码
 立即注册
查看: 1982|回复: 8

用VC和DEBUG调试同一个程序,为何如此不同??

[复制链接]
发表于 2014-5-4 23:24:58 | 显示全部楼层 |阅读模式
30鱼币
本帖最后由 欣欣celin 于 2014-5-6 21:36 编辑

原代码:
#include"stdio.h"
#include"stdlib.h"
void main(int argc, char *argv[])
{
       int i;

       printf("the number of string is: %d\n", argc-1);

       for(i=1; i<argc; i++)
      {
            printf("the string %d is: %s\n", i, argv[i]);
      }
}
VC++6.0调试如下:
--- e:\c-spy\fish-cc\cc\main\main.c  -------------------------------------------
1:    #include"stdio.h"
2:    #include"stdlib.h"
3:    void main(int argc, char *argv[])
4:    {
0040D710   push        ebp
0040D711   mov         ebp,esp
0040D713   sub         esp,44h
0040D716   push        ebx
0040D717   push        esi
0040D718   push        edi
0040D719   lea         edi,[ebp-44h]
0040D71C   mov         ecx,11h
0040D721   mov         eax,0CCCCCCCCh
0040D726   rep stos    dword ptr [edi]
5:        int i;
6:
7:        printf("the number of string is: %d\n", argc-1);
0040D728   mov         eax,dword ptr [ebp+8]
0040D72B   sub         eax,1
0040D72E   push        eax
0040D72F   push        offset string "the number of string is: %d\n" (00422fbc)
0040D734   call        printf (00401080)
0040D739   add         esp,8
8:
9:        for(i=1; i<argc; i++)
0040D73C   mov         dword ptr [ebp-4],1
0040D743   jmp         main+3Eh (0040d74e)
0040D745   mov         ecx,dword ptr [ebp-4]
0040D748   add         ecx,1
0040D74B   mov         dword ptr [ebp-4],ecx
0040D74E   mov         edx,dword ptr [ebp-4]
0040D751   cmp         edx,dword ptr [ebp+8]
0040D754   jge         main+63h (0040d773)
10:       {
11:           printf("the string %d is: %s\n", i, argv);
0040D756   mov         eax,dword ptr [ebp-4]
0040D759   mov         ecx,dword ptr [ebp+0Ch]
0040D75C   mov         edx,dword ptr [ecx+eax*4]
0040D75F   push        edx
0040D760   mov         eax,dword ptr [ebp-4]
0040D763   push        eax
0040D764   push        offset string "the string %d is: %s\n" (00422fa4)
0040D769   call        printf (00401080)
0040D76E   add         esp,0Ch
12:       }
0040D771   jmp         main+35h (0040d745)
13:   }
0040D773   pop         edi
0040D774   pop         esi
0040D775   pop         ebx
0040D776   add         esp,44h
0040D779   cmp         ebp,esp
0040D77B   call        __chkesp (00401100)
0040D780   mov         esp,ebp
0040D782   pop         ebp
0040D783   ret


DEBUG调试如下(图1~5):
01.JPG (1)      02.JPG (2)                                                                           
03.JPG (3)       04.JPG (4)

05.JPG (5)



C,学到指针,越来越迷糊,于是开始学汇编,现用以上两种方式调试同一个程式,原来区别这么大,又看不懂了,求教各位大神来也{:7_148:}万分感激



最佳答案

查看完整内容

嗯...,我想应该是这样的吧!VC上面反汇编过来的话,是32位的汇编代码,而在虚拟DOS上面的是16位的汇编代码这两个肯定是有差别的32位的汇编它的寄存器是32位的。所以它的执行效率远比16位的要高,而且寻址能力是2^32,而16位的只有2^16,所以它的地址空间也不同,而且既然是寄存器的位宽也增大的许多,那么自然他们写出的代码是不同的,而且在32位的汇编中,已经没有段地址这个概念了,它直接可以通过偏移地址可以找到!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-4 23:24:59 | 显示全部楼层
嗯...,我想应该是这样的吧!VC上面反汇编过来的话,是32位的汇编代码,而在虚拟DOS上面的是16位的汇编代码这两个肯定是有差别的32位的汇编它的寄存器是32位的。所以它的执行效率远比16位的要高,而且寻址能力是2^32,而16位的只有2^16,所以它的地址空间也不同,而且既然是寄存器的位宽也增大的许多,那么自然他们写出的代码是不同的,而且在32位的汇编中,已经没有段地址这个概念了,它直接可以通过偏移地址可以找到!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-5 00:38:47 | 显示全部楼层
大概是16位和32位区别吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-5 01:10:06 | 显示全部楼层
不懂     坐等楼下大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-5 09:51:57 | 显示全部楼层
win32汇编和win16汇编是两个概念
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-5 12:42:02 | 显示全部楼层
最好用Ollydbg调试。。。
当然用VC也不错。。。debug。。神马的都不用他。。
恩。。。相信我
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-6 16:59:35 | 显示全部楼层
系统加载一个程序不仅包含程序本身,还包括系统运行相关的附加信息。目测VC自带调试的只是main()函数部分,其他部分并没有显示而已。VC并不是反汇编。凑一下热闹(只是截取一下部分而已): 抓图27.png


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-5-6 21:35:22 | 显示全部楼层

那样的话,偶以后还得学学OD才能把以上看懂,好遥远哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-6 21:41:14 | 显示全部楼层
欣欣celin 发表于 2014-5-6 21:35
那样的话,偶以后还得学学OD才能把以上看懂,好遥远哦

←_←。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 08:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表