题目
写给自己看
mov word ptr ss:[0],offset s
是将标号s处的偏移地址写入ss:[0]中,但一开始有个困惑,s的偏移地址具体是多少呢,但其实这道题不用关注具体的数值,因为之后的计算是以相对值得出的。
call dword ptr ss:[0]
这句话意思同注释
s: mov ax,offset s
sub ax,ss:[0cH]
对于这句话来说,让ax得到了s的偏移地址,之后让ax=ax-ss:[0CH],那么ss:[0CH]里面是什么呢?其实就是cs:ip中的ip,此时,堆栈中保存的ip指向nop,而ax保存的是s的偏移地址,那么两者相减就相差1(似乎nop的ip是这样计算的,我无法保证正确)。
mov bx,cs
sub bx,ss:[0eH]
那么显而易见,ss:[0eH]中保存的就是cs,那么两者相减就是0。