首页
社区
课程
招聘
[求助]超简单问题。关于push
发表于: 2008-10-2 16:18 9581

[求助]超简单问题。关于push

2008-10-2 16:18
9581
push eax 如果此时eax=0  之后对eax操作,eax=1.然后pop eax,能弹出来吗?再有,push 1 是什么意思?也是压栈吗?如果是,怎么弹出?那push 地址 这个又怎么弹出呢?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (32)
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
push XXX 的意思就是暂存XXX到堆栈

其他不明白你的意思
2008-10-2 17:03
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
就是说
push eax
inc eax
pop eax   这个成立吗?
push 1
pop 1   这个呢?  肯定是非法。不过push 1 不是非法吧?这个是什么意思呢?怎么弹出?
push 404444
pop 404444   这个也是非法吧? 怎么弹出?
2008-10-2 17:21
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
成立不成立,自己测试不就知道了?
2008-10-2 17:28
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
晕,我想知道是什么意思,不是简单的成不成立。
2008-10-2 17:38
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
去看INTEL的指令,那些可以,哪些不可以
2008-10-2 17:42
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
7
[quote=;]...[/quote]
你汇编基础没打好.
push XX,是将参数进栈保存,pop 是将当前堆栈中的内容弹出到寄存器中.

----------------------------------------------------------------

就是说
push eax
inc eax
pop eax   这个成立吗? // 当然成立
push 1
pop 1   这个呢?  肯定是非法。不过push 1 不是非法吧?这个是什么意思呢?怎么弹出?
// pop的东西必须弹到寄存器中,你咋乱弹呢~~
push 404444
pop 404444   这个也是非法吧? 怎么弹出?
// 同上~~
2008-10-2 17:45
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
pop的东西不一定弹到寄存器把 还可以弹出某内存里把
2008-10-2 17:57
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
9
哎, 智障人士....
2008-10-2 18:37
0
雪    币: 399
活跃值: (38)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
10


这倒不至于,只是完全是门外汉罢了
2008-10-2 18:50
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
好強,讓大牛無言了~~~~~~~
2008-10-2 19:28
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
学习+膜拜
2008-10-2 19:31
0
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
很囧.....
2008-10-2 19:46
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
汇编基础没打好,应该属于智障了。反正怎么都无所谓,我就想知道是怎么回事。那push 1是压到哪了?如果push 1 改变esp值的话,怎么弹出这个push 1?push 1后的结果是什么?怎么弹出push 1? 还是没有好的答案。没有明白是怎么回事。
2008-10-2 21:20
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
15
1. 那push 1是压到哪了?-->压到你程序空间的局部堆栈里了
2. 如果push 1 改变esp值的话,怎么弹出这个push 1?
-->堆栈向上自减,向下自增. push 1 后.ebp+4. 此时你再执行pop指令时,系统会把当前在栈顶的内容取出,存入某个寄存器中去.
-------------------------------------------------
我实在找不出怎么回答你问题的好方法了,总之啊.先把基础打好,再来问问题,就不会闹笑话了...
2008-10-2 21:43
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
智障未必,汇障到是100%

push eax =>mov dword ptr ds:[esp] eax
           add esp,4
inc eax
pop eax  =>mov eax, dword ptr ds:[esp]
           sub esp,4
自己看结果吧
2008-10-2 21:50
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
17
楼上写错了..
2008-10-2 21:57
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
push 1后esp+4。 明白。 那push 1 是把00000001 压入吗?然后要出栈,就是弹出。需要pop esp+4?这个是非法的吧?还有,ebp+4是之前的栈。ebp是栈的指针,出压栈不是先进后出的吗?难道能把esp+4里的内容弹出来?
基础没打好,不过看书也没看懂。只能求教各位了。请大家帮帮忙,尽量说的详细一些。
2008-10-2 22:22
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
这个错了吗?哪里?应该是pop的解释吧?或者add esp,4 sub esp,4 都不应该存在?哦,应该换过来?
2008-10-2 22:28
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
20
反正我是不说了.
其他同学,愿意教他的就教吧.哈哈...
2008-10-2 22:38
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
晕,书里说得不明不白。怎么你说的也这样啊?
2008-10-2 22:47
0
雪    币: 56
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
貌似不只是汇编基础问题了.多看些书
2008-10-2 23:17
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
23
这样才对:

push eax  => sub esp, 4
             mov [esp], eax

pop  eax  => mov eax, [esp]
             add esp, 4

你可看做 push 为先减再存
         pop  为先取再加
2008-10-2 23:25
0
雪    币: 39
活跃值: (2951)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
push 1   
相当于
mov eax, 1
push eax
但是这种语法只适用32位汇编,16位汇编不支持push后面跟常数。

另外,push进去的东东不一定要pop到同一个操作数,例如
push eax
pop ebx  ; 结果EBX=EAX

pop后面不能跟常数,只能跟寄存器或内存变量,例如:
pop eax
pop dword ptr ds:[ebx]
都是正确的

但是
pop 1
是错误的。
2008-10-2 23:52
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
25
学汇编前,最好先学一门高级语言吧!否则等于在天书世界里面遨游!
2008-10-3 00:15
0
游客
登录 | 注册 方可回帖
返回
//