首页
社区
课程
招聘
[旧帖] [求助]来到看雪的第一次提问 0.00雪花
发表于: 2008-9-23 22:13 3102

[旧帖] [求助]来到看雪的第一次提问 0.00雪花

2008-9-23 22:13
3102
如何用OllYDBG修改源程序代码,并保存?
       还有push命令不是很理解,我只知道是进栈,很多教材上的函数中,比如:
push ax
mov ax,bx
明明直接mov ax,bx就可以解决的东西为什么要先进栈之后才mov ax,bx
还有pop指令,pop是出栈,但是是不是仅仅是出栈,比如pop ax ,是不是先把ax的内容清0后再出栈,还是什么的?
还有一个指令问题,指令在内存中是机器码形式的,这我知道,但是每个指令的长度是不同的,
既然是不同的,系统怎么区分这些指令,
ja  si 和nop同是机器码,都顺序排列,比如说机器码这样 0AAAAH,0EEH系统怎么区分他们是0AAAAEEH,还是0AAAAH,0EEH?
大家来帮帮忙,先谢谢了饿

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
本人新手,大体上说说Push与Pop吧!!
PUSH与POP是进栈与出栈命令.栈可看作是一个大容器,容器中的东西只能叠放,也就是先放进去的在最底下,取的时候只能取到最后放进去的.
寄存器AX可看作小的容器,寄存器的数量有限(自己去查,印象深点),比如在现在小容器中都装满了大米,现在你又想用小容器装花生,你会怎么办?当然先把大米倒在一个地方(这是入栈),再去装花生.当花生被吃完,你要把大米放回哪个容器中(这就是出栈).

POP AX,AX清零不清零没关系,关键是AX中的数据要没用.因为这个命令要改写AX中的数据.
2008-9-23 22:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学到东西!!!
2008-9-23 22:51
0
雪    币: 427
活跃值: (65)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
同意2楼

ax先暂时保存到堆栈应该等下出来有用的
其实你可以不问,把push ax改成push xxx,看看程序有没有问题就知道了。
2008-9-23 23:01
0
雪    币: 317
活跃值: (93)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
5
我记得天草好象有说过这个,而且瞒清楚的!
2008-9-24 09:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
push ax
mov ax,bx
明明直接mov ax,bx就可以解决的东西为什么要先进栈之后才mov ax,bx
---------
目的在于保存ax的值,就像函数调用之前都要进行的现场保护一样。

还有pop指令,pop是出栈,但是是不是仅仅是出栈,比如pop ax ,是不是先把ax的内容清0后再出栈,还是什么的?
---------
pop和push是对栈的操作。
pop ax,就是把栈顶的东西抛出到ax这个容器里面,所以不管ax先前有什么都会被这个抛过来的值覆盖,所以ax并不需要什么操作。
push ax,就是把ax的值放到栈顶,因为只是取了ax的值,ax本身没有变化;栈增加一层。

还有一个指令问题,指令在内存中是机器码形式的,这我知道,但是每个指令的长度是不同的,
既然是不同的,系统怎么区分这些指令,
ja  si 和nop同是机器码,都顺序排列,比如说机器码这样 0AAAAH,0EEH系统怎么区分他们是0AAAAEEH,还是0AAAAH,0EEH?
---------
这个http://bbs.pediy.com/showthread.php?t=50907有讲到,intel有文档规定指令对应的二进制值。其实这跟指令长度无关,就像是一个对应表。
2008-9-24 11:02
0
雪    币: 261
活跃值: (32)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
7
第一个还不怎么懂,为什么这样可以保存ax的值?
现在知道了,不过还是感谢
2008-9-24 12:12
0
游客
登录 | 注册 方可回帖
返回
//