标题:[求助] 堆栈平衡为什么会出错
只看楼主
oicq
Rank: 1
等 级:新手上路
帖 子:34
专家分:1
注 册:2010-9-22
结帖率:85.71%
已结贴  问题点数:20 回复次数:3 
[求助] 堆栈平衡为什么会出错
#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;
}

搜索更多相关主题的帖子: 309 include return 平衡 
2011-09-26 16:23
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
你能确定80是真确的吗?(我估计你绝对不能)
如果能,直接调用 FuctAddx 试试看,看看esp对不对
2011-09-26 17:04
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
得分:10 
楼上说的有道理。。
2011-09-26 17:15
oicq
Rank: 1
等 级:新手上路
帖 子:34
专家分:1
注 册:2010-9-22
得分:0 
回复 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 编辑 ]

                                                                  D.神罗天征
2011-09-26 18:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-350928-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.291928 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved