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

2021-09-25 19:17:03 字數 2888 閱讀 4598

c語言的基本結構

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

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

return 數字;返回值

每條語句最後以分號結尾

注釋:行注釋、塊注釋

int main(void

)

c語言資料型別

資料型別就是訪問記憶體的方式

在64位機器上檢視如下資料型別的記憶體訪問方式:

int main(void

)

使用命令

objdump -d -m interl a.out
按intel的彙編指令格式檢視反彙編結果如下:

4004ed:    55

push

rbp 4

004ee: 48

89 e5 mov

rbp,rsp

4004f1: c6 45 e2 08

movbyte ptr [rbp-0x1e],0x8

4004f5: 0f b6 45 e2 movzx eax,byte ptr [rbp-0x1e] ;

把8位資料複製到32暫存器,位數不夠的用0填充

4004f9: 83 c0 08

addeax,0x8

4004fc: 88

45 e3 mov byte ptr [rbp-0x1d],al ;

把eax的低8位資料複製到棧

4004ff: 66 c7 45 e4 10

00mov

word ptr [rbp-0x1c],0x10

400505: 0f b7 45 e4 movzx eax,word ptr [rbp-0x1c] ;

把16位資料複製到32暫存器,位數不夠的用0填充

400509: 83 c0 10

addeax,0x10

40050c: 66

8945 e6 mov word ptr [rbp-0x1a],ax ;

把eax的低16位資料複製到棧

400510: c7 45 e8 20

0000

00mov

dword ptr [rbp-0x18],0x20

400517: 8b 45 e8 mov eax,dword ptr [rbp-0x18] ;

把32位資料複製到32位暫存器

40051a: 83 c0 20

addeax,0x20

40051d: 89

45 ec mov

dword ptr [rbp-0x14],eax

400520: 48 c7 45 f0 40

0000

movqword 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

addrax,0x40

400530: 48

8945 f8 mov

qword ptr [rbp-0x8],rax

400534: 5d pop rbp

c語言指標

寫如下程式觀察指標

#include int

main()

編譯程式時加上-g引數可以加入除錯符號資訊,同時objdump -s的時候也可以把反彙編**和c原始碼對應起來

使用命令

objdump -d -m intel -s a.out
檢視反彙編**部分如下:

typedef int * int_p;

intmain()

{ 4

0052d: 55

push

rbp 4

0052e: 48

89 e5 mov

rbp,rsp

400531: 48

83 ec 10

subrsp,0x10

int x = 257

;400535: c7 45 f4 01

0100

00mov 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

8945 f8 mov qword ptr [rbp-0x8],rax ;

再放到p變數中

記憶體布局如下圖:

未完待續……

c語言部分語法

iOS學習 第二天

第一部分 方法 類名 函式名 方法 例項 函式名 import inte cetest nsobject void test int a 代表例項方法 instance void test2 int b 代表靜態方法 end import test.h implementationtest void...

學習第二天筆記

所有識別符號都應該以字母 a z或者a z 美元符號 或者下劃線 開始。首字元之後可以是字母 a z或者a z 美元符號 或者下劃線 或數字的任何字元組合。不能使用關鍵字作為變數名或者方法名。識別符號是大小寫敏感的。合法識別符號舉例 age salary value 1 value 非法識別符號舉例...

自學筆記 0基礎自學機器學習 (第二天)

定義 機器學習是人工智慧的乙個分支領域,主要關於構造和研究可以從資料中學習的系統。小不忍則亂大謀,不可急功近利,工欲善其事,必先利其器,得能吃苦。斷糾正一些概念,通過系統來反思 整理 這些死記硬背的碎片化知識點,有利於掌控巨集觀,形成 整體性學習 中文英文 機器學習演算法 machine learn...