變數**於數學,是計算機語言中能儲存計算結果或能表示值抽象概念。變數可以通過變數名訪問。在指令式語言中,變數通常是可變的
int x = 10;
變數型別 變數名 = 變數值;
char
8bit
1位元組short
16bit
2位元組int
32bit
4位元組log
32bit
4位元組當我們在c語言裡建立乙個變數的時候
int x = 5;
int y = 6;
00c517b8 mov dword ptr [x],5
00c517bf mov dword ptr [y],6
實際上在彙編層面,我們通過mov指令把變數的值放到x的位置
printf("%x",&x); //0xdca034
我們的**實際上是
mov dword ptr[0xdca034],5
如何證實這個彙編**就是我們的定義變數?
我們先在全域性變數定義乙個x=5
int x = 5;
然後列印一次x的值
printf("%x\n", x); //5
然後我們通過彙編指令mov來修改x的值
當我們定義乙個變數的時候
實際上就是使用彙編指令
當我們使用mov指令內聯彙編強行修改x的變數是成功的,說明int x=5,和我們的彙編是乙個作用
mov dword ptr ds:[x],5 int x=5;
mov dword ptr ds:[x],0x12345678 x=0x12345678;
上**
#include "pch.h"
#include int x = 5;
int main()
printf("%x\n", x);
}
反彙編
#include "pch.h"
#include int x = 5;
int main()
printf("%x\n", x);
00ec421c mov eax,dword ptr [x (0eca014h)]
00ec4221 push eax
00ec4222 push offset string "%x\n" (0ec7bcch)
00ec4227 call _printf (0ec1375h)
00ec422c add esp,8
}00ec422f pop edi
00ec4230 pop esi
00ec4231 pop ebx
00ec4232 add esp,0c0h
00ec4238 cmp ebp,esp
00ec423a call __rtc_checkesp (0ec1212h)
00ec423f mov esp,ebp
00ec4241 pop ebp
00ec4242 ret
C語言再學習 宣告與定義
什麼是定義?什麼是宣告?它們有何區別?舉個例子 a int i b extern int i 關於 extern,後面解釋 哪個是定義?哪個是宣告?或者都是定義或者都是宣告?我所教過的學生幾乎沒有一 人能回答上這個問題。這個十分重要的概念在大學裡從來沒有被提起過!什麼是定義 所謂的定義就是 編譯器 ...
C語言再學習 函式
一 函式概述 1 首先什麼是函式?函式是用於完成特定任務的程式 的自包含單元。2 為什麼使用函式?第 一 函式的使用可以身故重複 的編寫。第 二 函式使得程式更加模組化,有利於程式的閱讀修改和完善。3 main函式原型 int main int argc,char argv,char envp 第乙...
c語言 再學習筆記
簡單的來說 在區域性變數前加上 static 可以延長他的生命週期 由 函式呼叫時 延長至 程式存活週期 在全域性變數前加上static 可以減小它的作用域 由 多檔案可見,減小到單檔案內 可見 局變數的說明之前再加以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性...