Linux操作系统分析学习第一周感悟

来源:互联网 发布:c语言if语句例题 编辑:程序博客网 时间:2024/06/06 05:48

【自己的废话】

这是我的第一篇博客,献给我伟大的linux系统。
开始了Linux操作系统的第一周的学习,感触良多。对于计算机我是一个门外汉(以前是扭螺丝的),而对于linux系统那就更不用说了。在此课程之前曾在培训班学习过一段时间的linux系统,不过那是很久远,很久远的事情了,对于linux系统只是了解点了皮毛。
都说好奇害死猫,对于linux系统我充满了好奇心,现在要害死我了,我希望对linux系统了解更加的多一点点。

第一周主要是针对汇编语言的复习,汇编语言是一门晦涩难懂的语言,但是又是一门很接地气(接近硬件,接近操作系统)的语言,若是能够了解少许更是极好的;
如何将一段c程序转换成汇编代码呢?
在linux环境下,使用gcc编译器编译。

c代码如下:

    int g(int x)    {        int g(int x)    {      return x + 3;    }    int f(int x)    {      return g(x);    }    int main(void)    {      return f(8) + 1;    }

通过编译命令:

gcc -S -o main.s main.o -m32(生成32位机的指令)

汇编代码如下:

    g:        pushl   %ebp        movl    %esp, %ebp        movl    8(%ebp), %eax        addl    $3, %eax        popl    %ebp        ret    f:        pushl   %ebp        movl    %esp, %ebp        subl    $4, %esp        movl    8(%ebp), %eax        movl    %eax, (%esp)        call    g        leave    main:        pushl   %ebp        movl    %esp, %ebp        subl    $4, %esp        movl    $8, (%esp)        call    f        addl    $1, %eax        leave        ret

为了获得更加纯粹的汇编代码,将生成的汇编代码文件中会存在很多以.开通的语句(表示链接)删除掉;
分析汇编代码的过程中,我学到了什么呢?

mov指令的及集中内存寻址方式(b, w, l, q依次表示8位,16位,32位,64位,话说小白的我以前真不知道)以%开头的寄存器标识符,立即数是以$开头的数值寄存器寻址:movl %eax, %edx   edx = eax;  register mode (将eax寄存器中的内容放到edx寄存器中)立即数寻址:movl $0x123, %edx edx = 0x123;  immediate (把0x123数值放到寄存器edx中)直接寻址:直接访问一个指定的内存地址的数据movl 0x123,  %edx edx = *(int32_t*)0x123; direct (把地址为0x123的内存数据放到寄存器edx中)间接寻址:将寄存器中的值作为一个内存地址来访问内存movl (%ebx), %edx edx = *(int32_t*)ebx;   indirect(将寄存器ebx的值看成内存地址,将该地址的对应的内存数值放点寄存器edx中)变址寻址:movl 4(%ebx), %edx edx = *(int32_t*)(ebx + 4); displaced(变址寻址);(将寄存器ebx的地址加4得到的新地址的内存数值放到寄存器edx中)堆栈是向下增长的
    pubshl %eax:                subl $4, %esp                movl %eax, (%esp)   // 将寄存器eax中的内存数值放入到寄存器esp存放的内存地址中去    pop %eax  :                movl (%esp)x                addl $4 %esp    call 0x12345push %eip(*)                movl $0x12345 %eip(*)    //不允许程序员直接操作eip等寄存器    ret:        popl %eip(*)    enter:        pushl %ebp        movl  %esp,%ebp    leave:        movl %ebp, %esp        popl %ebp

好了,第一篇博客写完了,我知道一定很low,不过开始嘛,都是这样一个过程了,哈哈~~~希望若干年后的自己看着不要太脸红啊……
2017年9月9日
写于上海徐汇区

原创粉丝点击