国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

0基礎學習ios開發筆記第二天

2019-11-14 18:04:38
字體:
來源:轉載
供稿:網友
  1. C語言的基本結構

    c語言的入口函數是main函數。

    main函數的返回值行業標準是int

    return 數字;返回值

    每條語句最后以分號結尾

    注釋:行注釋、塊注釋

    int main(void){    // line comment    /*     * block comment                                                                                                                 * block comment    */}
  2. C語言數據類型
    數據類型就是訪問內存的方式
    在64位機器上查看如下數據類型的內存訪問方式:
    int main(void){    char    ci = 8;            // 1個字節,8位,BYTE    char    csum = ci + 8;    short   si = 16;        // 2個字節,16位,Word    short   sum = si + 16;    int     ii = 32;        // 4個字節,32位,DWORD (double word)    int     isum = ii + 32;    long long li = 64;        // 8個字節,64位,QWORD (quater word)    long long lsum = li + 64;}
    使用命令
    objdump -d -M interl a.out
    按intel的匯編指令格式查看反匯編結果如下:
    4004ed:    55                       push   rbp  4004ee:    48 89 e5                 mov    rbp,rsp  4004f1:    c6 45 e2 08              mov    BYTE PTR [rbp-0x1e],0x8  4004f5:    0f b6 45 e2              movzx  eax,BYTE PTR [rbp-0x1e] ; 把8位數據復制到32寄存器,位數不夠的用0填充  4004f9:    83 c0 08                 add    eax,0x8  4004fc:    88 45 e3                 mov    BYTE PTR [rbp-0x1d],al   ; 把eax的低8位數據復制到棧  4004ff:    66 c7 45 e4 10 00        mov    WORD PTR [rbp-0x1c],0x10   400505:    0f b7 45 e4              movzx  eax,WORD PTR [rbp-0x1c]  ; 把16位數據復制到32寄存器,位數不夠的用0填充  400509:    83 c0 10                 add    eax,0x10  40050c:    66 89 45 e6              mov    WORD PTR [rbp-0x1a],ax   ; 把eax的低16位數據復制到棧  400510:    c7 45 e8 20 00 00 00     mov    DWORD PTR [rbp-0x18],0x20  400517:    8b 45 e8                 mov    eax,DWORD PTR [rbp-0x18] ; 把32位數據復制到32位寄存器  40051a:    83 c0 20                 add    eax,0x20  40051d:    89 45 ec                 mov    DWORD PTR [rbp-0x14],eax  400520:    48 c7 45 f0 40 00 00     mov    QWORD PTR [rbp-0x10],0x40  400527:    00   400528:    48 8b 45 f0              mov    rax,QWORD PTR [rbp-0x10] ; 把8個字節的數據復制到rax寄存器,rax是64位寄存器  40052c:    48 83 c0 40              add    rax,0x40  400530:    48 89 45 f8              mov    QWORD PTR [rbp-0x8],rax  400534:    5d                       pop    rbp

     

  3. C語言指針
    寫如下程序觀察指針
    #include <stdio.h>int main(){    int x = 257;    char y ='k';    int *p = &x;    PRintf("pointer lenth is %ld/n", sizeof(p));    printf("*p is %d/n", *p);    printf("p is %lx/n", p);    printf("%p/n", &x);    printf("%p/n", &y);    printf("%p/n", &p);}

    編譯程序時加上-g參數可以加入調試符號信息,同時objdump -S的時候也可以把反匯編代碼和C源碼對應起來
    使用命令

    objdump -d -M intel -S a.out

    查看反匯編代碼部分如下:

    typedef int * int_p;int main(){  40052d:    55                       push   rbp  40052e:    48 89 e5                 mov    rbp,rsp  400531:    48 83 ec 10              sub    rsp,0x10    int x = 257;  400535:    c7 45 f4 01 01 00 00     mov    DWORD PTR [rbp-0xc],0x101  ; 4字節大小的數據會對齊到能整除4的內存地址上    char y ='k';  40053c:    c6 45 f3 6b              mov    BYTE PTR [rbp-0xd],0x6b   ; char為1字節,所以沒有對齊的要求    int *p = &x;  400540:    48 8d 45 f4              lea    rax,[rbp-0xc]  ; 將x的地址放到rax寄存器  400544:    48 89 45 f8              mov    QWORD PTR [rbp-0x8],rax   ; 再放到p變量中

     

    內存布局如下圖:

    未完待續&hellip;…
  4. C語言部分語法

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沈阳市| 宁晋县| 阜南县| 芒康县| 隆化县| 长治市| 文水县| 滨海县| 罗江县| 伊春市| 宁波市| 武鸣县| 广安市| 湛江市| 肥东县| 凯里市| 温泉县| 怀来县| 襄樊市| 湟源县| 奎屯市| 弥渡县| 黄梅县| 蒙山县| 泽普县| 宝丰县| 新平| 汝州市| 苗栗市| 秭归县| 米脂县| 黑河市| 扎兰屯市| 天等县| 昌平区| 集安市| 财经| 清丰县| 漠河县| 潼关县| 皋兰县|