c語言的基本結構
c語言的入口函式是main函式。
main函式的返回值行業標準是int
return 數字;返回值
每條語句最後以分號結尾
注釋:行注釋、塊注釋
int main(voidc語言資料型別)
資料型別就是訪問記憶體的方式
在64位機器上檢視如下資料型別的記憶體訪問方式:
int main(void使用命令)
objdump -d -m interl a.out按intel的彙編指令格式檢視反彙編結果如下:
4004ed: 55c語言指標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
寫如下程式觀察指標
#include int編譯程式時加上-g引數可以加入除錯符號資訊,同時objdump -s的時候也可以把反彙編**和c原始碼對應起來main()
使用命令
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...