大灰狼之二——CS,IP寄存器
CS:code segment。字面理解,也就是跟代码有关的寄存器,存放代码的基地址。代码均在内存中,要找到它们除了基地址自然还有偏移地址,自然,IP寄存器也就是存放代码的偏移地址。也就是说,CS:IP地址下存放的内容就是CPU马上就要执行的程序的内容。
而一段简单的代码:
char msg[]="hello,world";
int main(int argc,char *argv)
{
printf("%s\n",msg);
return 0;
}
大灰狼还教了debug调试工具,command下直接输入debug即进入了调试工具,命令如下:
r:查看和改变各个寄存器内容
d:查看内存中的内容 如d ss:0000则查看该内存地址下的内容
u:将机器码转为汇编
a:以汇编指令改变寄存器中内容,而这些指令直接写入内存,也就是CPU马上将会执行的命令,写到的内存的地址即存入CS:IP
t:跟踪程序一步一步的运行。因此两个IP值相减可以获得上一个程序运行的内存大小。
CS:code segment。字面理解,也就是跟代码有关的寄存器,存放代码的基地址。代码均在内存中,要找到它们除了基地址自然还有偏移地址,自然,IP寄存器也就是存放代码的偏移地址。也就是说,CS:IP地址下存放的内容就是CPU马上就要执行的程序的内容。
而一段简单的代码:
char msg[]="hello,world";
int main(int argc,char *argv)
{
printf("%s\n",msg);
return 0;
}
这段简单的代码,分为两部分:msg:全局变量,printf语句,属于程序执行部分。而一个简单的程序如此,在内存中的存放也就分为三部分,分别为数据段,存放全局变量;代码段,存放程序执行代码;堆栈段:存放局部变量,参数。
大灰狼还教了debug调试工具,command下直接输入debug即进入了调试工具,命令如下:
r:查看和改变各个寄存器内容
d:查看内存中的内容 如d ss:0000则查看该内存地址下的内容
u:将机器码转为汇编
a:以汇编指令改变寄存器中内容,而这些指令直接写入内存,也就是CPU马上将会执行的命令,写到的内存的地址即存入CS:IP
t:跟踪程序一步一步的运行。因此两个IP值相减可以获得上一个程序运行的内存大小。