在Visual Studio 2010中,MASM文件不起作用

时间:2013-03-08 06:37:07

标签: assembly x86

如果我在Visual Studio 2010项目中运行ASM文件,则在调用asm函数后它会崩溃

使用asm代码: -

.386           
.model flat, c 
TEXT        SEGMENT
ALIGN       4  
L_add PROC

   push     ebp                   
   mov      ebp, esp

   mov      edx, dword ptr[ebp + 12]
   mov      eax, dword ptr[ebp + 8]
   add      edx, eax

   mov      esp, ebp  
   pop      ebp                                      
   ret      0                
   L_add ENDP
   TEXT     ENDS
   END**

上述代码在visual studio 2010中不起作用,如果我将TEXT SEGMENT更改为.code段,它工作正常,.codeTEXT SEGMENT之间有什么区别但是上面的代码可以在visual studio 2005上使用。

disaasembly at calling place:
b = hs_L_shl(L_var1,var2);
012D1484  movsx       eax,word ptr [var2]  
012D1488  push        eax  
012D1489  mov         ecx,dword ptr [L_var1]  
012D148C  push        ecx  
012D148D  call        @ILT+455(_hs_L_shl) (12D11CCh)  
012D1492  add         esp,8  
012D1495  mov         dword ptr [b],eax

Disaasembly at function with .code: 
hs_L_shl PROC


  ;  PROLOGUE START

   push  ebp                    
012D15B0  push        ebp  
   mov  ebp, esp
012D15B1  mov         ebp,esp  
   sub      esp, 24               
012D15B3  sub         esp,18h  
   push  ebx
012D15B6  push        ebx  
   push     esi
012D15B7  push        esi

Disaasembly at function with TEXT SEGMENT: 

  ;  PROLOGUE START

   push  ebp                   
012D15B0  push        ebp  
   mov  ebp, esp
012D15B1  mov         ebp,esp  
   sub      esp, 24                
012D15B3  sub         esp,18h  
   push  ebx
012D15B6  push        ebx  
   push     esi
012D15B7  push        esi

1 个答案:

答案 0 :(得分:0)

它崩溃了,因为返回地址不在它应该的位置。该函数将2个参数压入堆栈对吗?那你为什么要使用ret 0,你应该使用ret 8