C源程序:
#include <iostream.h>
#include <string.h>void main()
{
    char *a = "hello";
;
    
}
反汇编:
int __cdecl main(int argc,const char **argv,const char *envp)
.text:00401005 _main           proc near               ; CODE XREF: start+E4p
.text:00401005 
.text:00401005 var_44          = byte ptr -44h
.text:00401005 var_4           = dword ptr -4
.text:00401005 argc            = dword ptr  4
.text:00401005 argv            = dword ptr  8
.text:00401005 envp            = dword ptr  0Ch
.text:00401005 
.text:00401005                 jmp     loc_0_401010
loc_0_401010:                           ; CODE XREF: _mainj
.text:00401010                 push    ebp
.text:00401011                 mov     ebp, esp
.text:00401013                 sub     esp, 44h
.text:00401016                 push    ebx
.text:00401017                 push    esi
.text:00401018                 push    edi
.text:00401019                 lea     edi, [ebp+var_44]/;var_44表示的是什么变量
.text:0040101C                 mov     ecx, 11h  //ecx为什么是11h
.text:00401021                 mov     eax, 0CCCCCCCCh
.text:00401026                 repe stosd
.text:00401028                 mov     [ebp+var_4], offset aHello ; "hello"
.text:0040102F                 pop     edi
.text:00401030                 pop     esi
.text:00401031                 pop     ebx
.text:00401032                 mov     esp, ebp
.text:00401034                 pop     ebp
.text:00401035                 retn

解决方案 »

  1.   

    var_44表示的是偏移量
    .text:00401005 var_44          = byte ptr -44h
      

  2.   

    我的意思是var_44代表的是C源代码中的什么变量!!!
      

  3.   

    var_44并不表示在C源代码中的什么变量,而是表示在程序运行时,相对于程序堆栈的偏移量。而这个被偏移过的变量,就是C源代码中变量a的地址了。
      

  4.   

    那var_4放的是hello的便移量,怎么和var_44联系起来的呢?从汇编代码中看不出来。