Необработанное исключение (

Discussion in 'Реверсинг' started by Welemir, 8 Aug 2010.

  1. Welemir

    Welemir Elder - Старейшина

    Joined:
    10 Jan 2008
    Messages:
    229
    Likes Received:
    11
    Reputations:
    -4
    Access violation выскочил при компиляции:


    Code:
    
    
    #include <windows.h>
    
    int myadd(int,int);
    
    int main()
    
      {
    
    
    	int res = 0;
    
    	__asm  {
    
          xor eax,eax
    	  xor edx,edx	
          push 5
    	  push 10
          call myadd
    	  mov res,eax
    	  retn
    
    
    
    	}
    
    }
    
    
    
    	int myadd (int x,int y) {
    
    
    
    	__asm {
    
    		mov eax,x
    		mov edx,y
    		add eax,edx
    
    
    	}
    
    
    }
    
    
    

    Вот только непонятно,почему.Ещё и интеллисенс говорит,что у меня в еах есть уже число 625,а как это может быть,если перед вызовом я обнуляю регистры ?! Плюс компиль должен сам заботиться о стеке(во всяком случае,так пишет Пирогов : ) ) в плане возврата параметров.
     
  2. Welemir

    Welemir Elder - Старейшина

    Joined:
    10 Jan 2008
    Messages:
    229
    Likes Received:
    11
    Reputations:
    -4
    Как ни пробую - ставлю рет,ретн,указывю количество байт для возврата - бес толку.
     
  3. ph0enix.re

    ph0enix.re New Member

    Joined:
    4 Aug 2010
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    по умолчанию в студии, на сколько помню, конвенция вызовов для функций - cdecl. Стек освобождает вызывающая сторона. Поэтому после call myadd необходимо написать add esp, 8
    Да и посмотри наконец, что тебе сбацал компилятор в дизасме.
     
  4. Welemir

    Welemir Elder - Старейшина

    Joined:
    10 Jan 2008
    Messages:
    229
    Likes Received:
    11
    Reputations:
    -4
    ой...там такой набор инструкций - кот наплакал : (.Могу скинуть,конечно,но сам я в нём буквально утопаю...Не имел конкретно с ним дело.
     
  5. fluffylion

    fluffylion Member

    Joined:
    22 Feb 2010
    Messages:
    55
    Likes Received:
    10
    Reputations:
    0
    Welemir, ph0enix.re правильно посоветовал, вот как должно выглядеть:
    Code:
    __asm
    {
       xor eax,eax
       xor edx,edx
       push 5
       push 10
       call myadd
       add esp, 8
       mov res,eax
    }
     
    1 person likes this.