|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
CALL 这点 有点迷啊
就检测点10.5 来说 , 问题一:call wor ptr ds:[0eh] 这条指令执行前IP 是多少怎么计算,执行后IP是多少
问题二:PUSH IP 是把哪个IP放入栈中
程序代码如下
assume cs:codesg
stacksg segment
dw 8 dup (0)
stacksg ends
codesg segment
start:
mov ax,stacksg
mov ss,ax
mov sp,16
mov ds,ax
mov ax,0
call word ptr ds:[0EH]
inc ax
inc ax
inc ax
mov ax,4c00h
int 21h
codesg ends
end start
希望理解的鱼友们帮我解答这点疑惑,最好能把这点原理解释清楚谢谢
问题一:执行前ip是0Dh,是按照从start开始到call前每条指令的字节数相加,也就是call的起始地址。执行后会地址跑飞。因为单步或中断把操作写入栈中,导致076a:0e这里的地址发生了改变,应该会直接跳到ip=7302。
问题二:是把ip=0011入栈,因为回来的时候就可以直接到inc ax这个的起始地址接下去运行。
|
|