注册 登录
编程论坛 C++教室

[求助] 堆栈平衡为什么会出错

oicq 发布于 2011-09-26 16:23, 822 次点击
#include <stdio.h>
_declspec(naked)int _stdcall FuctAddx(int aaaz,int bbbz)   
{
   

    printf("%d\n",aaaz);
    printf("%d\n",bbbz);

    __asm
    {
         add esp, 80
   
    }

    __asm ret 0x8;
   
}

int __stdcall myadd(int aaaz,int bbbz)
{
   
    __asm
    {
        jmp FuctAddx
    }
    return 0;
   
}

int main()
{
   
    myadd(309,206);
    return 0;
}

3 回复
#2
rjsp2011-09-26 17:04
你能确定80是真确的吗?(我估计你绝对不能)
如果能,直接调用 FuctAddx 试试看,看看esp对不对
#3
hoho5682011-09-26 17:15
楼上说的有道理。。
#4
oicq2011-09-26 18:29
回复 2楼 rjsp
我看了那个80 是弹出这几个压的栈      add esp , 80  用 vc 6.0 debug版本下出错   release版本下就能正常运行
00401070 > > \55            PUSH EBP                                 ;  myadd
00401071   .  8BEC          MOV EBP,ESP
00401073   .  83EC 40       SUB ESP,40
00401076   .  53            PUSH EBX
00401077   .  56            PUSH ESI
00401078   .  57            PUSH EDI
00401079   .  8D7D C0       LEA EDI,DWORD PTR SS:[EBP-40]
0040107C   .  B9 10000000   MOV ECX,10
00401081   .  B8 CCCCCCCC   MOV EAX,CCCCCCCC
00401086   .  F3:AB         REP STOS DWORD PTR ES:[EDI]
00401088   .^ E9 78FFFFFF   JMP number.00401005                          // 跳转到FuctAddx函数



[ 本帖最后由 oicq 于 2011-9-26 18:30 编辑 ]
1