首页 > 开发 > C++ > 正文

程序运行前寄存器的值是怎么来的?

2017-09-11 21:34:55  来源: 网友分享

当OD停在入口点,程序一行代码都尚未执行,此时寄存器中的值是如何确定的?eip指向当前地址,esp指向堆栈,那么eax,ebx,ecx中的值是如何来的?

解决方案

就x86来说,最主要的用户程序可以控制的通用寄存器并不多,其中最重要的是 eip, esp 分別对应是用户程序的第一条指令和用户程序的堆栈地址,这2个寄存器的os会在载入用户程序的时候根据elf文件的格式设置好。当用户程序运行的时候,其他的通用寄存器eax,ebx,ecx,edx之类的使用是有编译器来管理的,用户程序在使用一个寄存器以前,编译器也会将需要的值先载入到寄存器中。对于cs,ds,es,fs这样的段寄存器,也都是操作系统设置好的。至于cr3这样的控制虚拟内存到物理内存映射表的寄存器,也是os设置好的,用户程序没有权限改变的。