现在有这么一个函数
void main()
{
int a = 2;
cout<<&a<<endl;
while(a)
{
;
}
cout<<”fun end”<<endl;
}
函数运行起来会是这个样子:先打印出a的地址,假设是0x12345678,接着会进入死循环。现在如果要求你寻找某个办法,来跳出循环打印”fun end”,然后结束整个函数。(函数正在运行,不允许修改代码,也不能ctrl+c)你会怎么做呢?
从上一篇的博文我们知道了打印出来的地址0x12345678是逻辑地址,如果是在i386以前的操作系统里,我们只要从SS里找到段基址,再加上0x12345678,就能获得变量a的物理地址,修改这个物理地址上的值,把它变为0.就自然跳出循环打印结束了。但是,如果是在i386之后的32位操作系统会是怎么样呢?
我们常说英特尔X86体系,是由于后来者能够兼容前者但是又能够做一些前者不能够做到的事情。i386之后,在分段式管理的基础上又