|
主题 : : 栈的思考 [待解决] |
回复[ 8次 ]
点击[ 1274次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2007-12-31 21:56 ]
[引用]
[回复]
[ top ] | |
荣誉值:10
信誉值:14
注册日期:2007-10-15 14:54 |
栈的概念不讨论,只说我想到的
栈地址,上低下高,如果我把机器指令反向压入栈,再把SS:SP的值(地址)给CS:IP。(地址,不是SP值给IP,这是为了理解。)
那么从逻辑上推理CPU就会把他当作指令来执行。
如果可以。是否在汇编中,就有这样的技巧。 | | |
|
|
|
|
[第1楼]
[ 回复时间:2008-01-01 10:42 ]
[引用]
[回复]
[ top ] | |
荣誉值:283
信誉值:0
注册日期:2007-06-26 11:42 |
恩。有想法。cpu把cs:ip指向的数据当作指令来执行,这是肯定的。有没有这么用的,这就得看有没有问题需要这么做了,所以,这个就比较难以确定了。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2008-01-01 14:18 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
没见过这样用的,不过是个想法,如楼上说的,不知道这个有没有需求。我提出个应用的小问题:
指令的长度大都不一样,而栈是对字单元操作的。反向压栈的数据能正确解析出来好像不太容易;不知道楼主有没有解决的方法。
如果指令数据是入栈->完成后在入另一个栈,两次操作应该是能正确执行了,但好像意义不大,难道是简单的数据加密~~,有可能啊~嘿嘿 | | |
|
|
|
|
[第3楼]
[ 回复时间:2008-01-12 22:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:10
信誉值:14
注册日期:2007-10-15 14:54 |
|
|
|
|
|
[第4楼]
[ 回复时间:2008-01-20 23:23 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-01-16 01:00 |
我提出个应用的小问题:
指令的长度大都不一样,而栈是对字单元操作的。反向压栈的数据能正确解析出来好像不太容易;不知道楼主有没有解决的方法。
------------------
回复:我是初学者,对于你这个问题我的理解是,你把栈的顶地址给CS:IP。 那么CPU是否就认为这是栈呢,如果CPU在执行指令的时候不认为这是栈,是不是就不用考虑是否能正确解析这个问题呢。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2008-01-21 11:09 ]
[引用]
[回复]
[ top ] | |
荣誉值:342
信誉值:0
注册日期:2007-12-06 10:21 |
没那么复杂!
cs:ip指向的数据被cpu当作指令执行;ss:sp指向的空间被当作栈空间。如果cs==ss,ip==sp了,也就是把栈中的数据当指令了,但是在运行过程中如果再有栈操作照样会影响栈内的数据内容。所以,最终的运行结果很难预料。 | | |
|
|
|
|
[第6楼]
[ 回复时间:2008-01-21 13:34 ]
[引用]
[回复]
[ top ] | |
荣誉值:106
信誉值:0
注册日期:2007-06-26 15:10 |
没那么复杂!
cs:ip指向的数据被cpu当作指令执行;ss:sp指向的空间被当作栈空间。如果cs==ss,ip==sp了,也就是把栈中的数据当指令了,但是在运行过程中如果再有栈操作照样会影响栈内的数据内容
说的很对,没有那么复杂 | | |
|
|
|
|
[第7楼]
[ 回复时间:2008-04-18 13:00 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-03-15 23:01 |
我觉得cpu想执行,可能会遇到不正确的指令
毕竟我们不是特意压入机器码 | | |
|
|
|
|
[第8楼]
[ 回复时间:2008-04-19 14:19 ]
[引用]
[回复]
[ top ] | |
荣誉值:53
信誉值:0
注册日期:2008-02-09 02:55 |
可以把一段空间当栈来用,用"BP+偏移量"的方式将所有指令用字节的方式写入栈中,
这样最后把SS:SP交给CS:IP,这样能达目的。
但这样做和原来的CS:IP有什么区别呢?
只不过CS:IP值变化了一下而已,
目前不知道这样有什么可利用的技巧。 | | |