Win32 汇编要点总结
?
寄存器有EAX,EBX,ECX,EDX,EDI,ESI,ESP,EBP。
EAX是WIN32 API 默認的返回值存放處。
ECX是LOOP指令自動減一的寄存器。
ESP是堆棧指針。
EBP經常用來在堆棧中尋址。
Masm32安裝成功以后,路徑如下:
? ? \masm32:IDE環境,內帶有文本編輯程序和模板生成程序
? ? \masm32\include:所有的頭文件
? ? \masm32\lib:所有的導入庫文件
? ? \masm32\bin:可執行文件目錄,包括Ml.exe,Link.exe,Rc.exe等。
? ? \masm32\help:幫助文檔
用ml.exe 將.asm源碼生成.obj文件。
rc.exe:編譯資源文件,把資源腳本文件rc編譯生成生成.res文件。
link.exe:鏈接程序,生成exe,dll文件等。
把資源文件和.obj文件鏈接起來生成可執行文件,也就是pe格式的文件,在鏈接的時候加上/coff命令。
WIN32中內存是平坦的,對于每個程序來說都可以使用2G范圍的地址,但各個程序之間并不會干擾。
Windows為每個程序安排了堆棧段,它是從高地址向低地址延伸的,之所以采用這種方式,是因為這樣可以使堆棧指針始終指向最近入棧的元素的起始地址,這樣的話,為訪問這個元素提供了非常便利的方式。
ptr 顯式指定后面的數據的類型
offset 全局變量的地址
addr 局部變量的地址,也可以用在全局變量上
local 定義局部變量
proc 定義子程序
proto 聲明子程序
Win32下,
系統功能模塊放在Windows的動態鏈接庫(DLL)中
作為Win32 API核心的3個DLL:
KERNEL32.DLL 系統服務功能。
GDI32.DLL 圖形設備接口。
USER32.DLL 用戶接口服務。
對于匯編語言來說,Win32 API函數返回值的類型只有dword一種類型,它永遠放在eax中。
如果要返回的內容在一個eax中放不下,Win32 API采用如下方法來解決:
a) 一般是eax中返回一個指向返回數據的指針;
b) 在調用參數中提供一個緩沖區地址,數據直接返回到這個緩沖區中去。類似變參的概念;
.data
已初始化數據段,可讀可寫的已定義變量;
當程序裝入完成時,這些值就已經在內存中;
.data?
未初始化數據段,可讀可寫的未定義變量,在可執行文件中不占空間;
.const
常量,可讀不可寫的變量;
Win32中,數據段是不可執行的,只有代碼段有可執行的屬性;
對于運行在特權級3的應用程序,.code段不可寫。除非把可執行文件PE頭部中的屬性位改成可寫;
對于運行在特權級0的程序,所有的段都有讀寫權限,包括代碼段;
?
總結
以上是生活随笔為你收集整理的Win32 汇编要点总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于VC++控制台输出中文乱码的问题
- 下一篇: CSS要点总结