編譯器怎麼知道內存地址
❶ 怎麼能查看子程序的匯編代碼入口內存地址
你好,
子程序的匯編代碼只有在最終的Link階段才會為代碼和數據分配內存地址,因此指定代碼段的地址一般是通過寫一個link腳本來進行的。Link階段時,編譯器的Linker會讀取你寫的Link腳本,並且按照腳本的規定給代碼分配地址。
根據
子程序的匯編代碼開發工具的不同,link腳本的語法和形式也有所不同。ARM MDK,ARM ADS,Eclips+GCC,Linux GCC, ARM Realview等開發工具都支持Link腳本。
如果你英文還可以,建議你直接找到開發工具的Help手冊去研究。如果你英語實在不行,也可以把開發工具名稱和你代碼的具體情況告訴我,我幫你看看。
❷ 如何用匯編語言讀取內存值
匯編語言讀取內存的方式有兩種:立即數定址(包括在編譯器中的變數地址),寄存器定址。就拿80X86匯編來說,簡單的使用MOV指令就可以完成對內存地址的讀寫,一下是立即數定址和寄存器定址實現內存讀寫的例子:
MOV AX,[8000] ;立即數定址,將AX寄存器中放入偏移地址8000中的內容
MOV AX,[SI] ;寄存器定址,將SI寄存器中的值作為地址,SI寄存器中存放的地址中 內容送到AX寄存器中。另外,任何通用寄存
(AX,BX,CX,DX,SI,DI,BP,SP)都可以放入方括弧[]中行定址
NUMBER DW 1234H ;變數地址定義
...
MOV AX,[NUMBER] ;將NUMBER的地址進行定址,然後將地址內的內容送入AX寄存 器中
需要注意的是,如果需要往立即數地址中直接寫入或讀取數據,則需要添加數據的大小標識符,否則編譯器會產生錯誤。如下:
MOV [8000],1234H ;錯誤的指令!
MOV WORD PTR [8000],1234H ;正確,往偏移地址8000的內存位置中放入WORD類型的數據1234H
❸ 困擾很久的問題,C語言里一個變數存在一塊內存里,那必然需要有一塊內存存儲它的地址。它的地址的地址。
你可以這么理解,它的地址就是內存的編號了;如果非要用另一個地址來存這個編號,那麼你得另外創建變數,新創建的這個變數的地址也是一個內存的編號;編譯器不會主動給你創建這個變數。
❹ c++怎麼通過字面值找內存地址
這有點像內存補丁之類的黑客知識了……
內存中數據是按位元組存儲的,查找一個字元'a',那是很難的,因為一個位元組一共就能表示256種狀態,出現'a'的概率太高了,但是你卻很難知道這個內存單元到底代表什麼含義,甚至不知道是不是個字元串。
當年的金山游俠,首先是針對一個進程進行的,而且進行內存查找還要進行好幾次才行。想自己編個金山游俠??呵呵
何況,一般程序很難訪問其他進程的內存,因為操作系統在運行各個程序時,各進程的地址空間是邏輯上獨立的,都是00...0到ff...f,普通編程手段根本無法跨進程操作。
綜上,一般訪問不到,訪問到了你也編不出高精度的查找程序,即便找到了也不敢肯定你找到的是什麼。
❺ 內存定址中段地址如何確定如果要用某個段寄存器指出段地址,指令中如何表示謝謝。
嘿嘿 俺來幫你解答
1 內存定址中段地址是由計算機的編譯器分配的,它根據計算機當前內存實際使用情況,專為用戶分配一個合適的固定的地址空間。
2 要用某個段寄存器指出段地址,可以使用下列指令 :
MOV AX,CS ;將代碼段的段地址送給累加器
MOV AX,DS ;將數據段的段地址送給累加器
MOV AX,ES ;將附加段的段地址送給累加器
MOV AX,SS ;將堆棧段的段地址送給累加器
呵呵 滿意 就給加分啊
❻ 求教:Dev C++如何看內存中的值
print /x &name[0]
獲得內存地址: