Windows下的64位汇编(1)
来源:互联网 发布:光爪网络 编辑:程序博客网 时间:2024/05/16 16:17
Windows下的64位汇编与32位汇编有较大的不同。
为了给后来者提供参考,得到高手的指正,我陆续将心得写出。
一、许多高级的伪指令不再被支持
.386
.model flat,stdcall
option casemap:none
.if .endif .while
invoke等等
option nokeyword:<.while> ;检查“.while”是否被支持。如果出现:“A4027 reserved word expected”,则表示不再被支持
二、推荐的网址
开始进行 64 位 Windows 系统编程之前需要了解的所有信息
http://www.microsoft.com/china/MSDN/library/Windev/64bit/issuesx64.mspx?mfr=true
Moving to Windows x64
http://www.ntcore.com/Files/vista_x64.htm
三、基本的开发环境
操作系统:Windows 2003 Advance Server 64 R2
基本汇编软件:masm32 v9r
64位编译器和链接器:Visual Studio 2008 带的ML64 LINK 等等:
Microsoft (R) Macro Assembler (x64) Version 9.00.20706.01
Microsoft (R) Incremental Linker Version 9.00.20706.01
SDK 开发包:
Windows Server 2003 R2 Platform SDK Full Download:5.2.3790.2075.51.PlatformSDK_Svr2003R2_rtm.iso
四、头文件的修改
由于指令长度发生变化,一些头文件(.inc)的定义要修改:
masm32的安装目录是:../完整的WIN32 MASM环境/masm32
我再include目录下建立了两个子目录:
new64:用于64位的头文件
old32:masm32的原有头文件
我在桌面上建了两个批处理文件,用于编译32位和64位程序。
../完整的WIN32 MASM环境/masm32/include/new64
MSG STRUCT
; hwnd DWORD ?
; message DWORD ?
; wParam DWORD ?
; lParam DWORD ?
; time DWORD ?
; pt POINT <>
;
hwnd dq ?
message dd ?
padding1 dd ? ; padding
wParam dq ?
lParam dq ?
time dd ?
pt POINT <>
padding2 dd ? ; padding
MSG ENDS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WNDCLASSEX STRUCT
; cbSize DWORD ?
; style DWORD ?
; lpfnWndProc DWORD ?
; cbClsExtra DWORD ?
; cbWndExtra DWORD ?
; hInstance DWORD ?
; hIcon DWORD ?
; hCursor DWORD ?
; hbrBackground DWORD ?
; lpszMenuName DWORD ?
; lpszClassName DWORD ?
; hIconSm DWORD ?
cbSize dd ?
style dd ?
lpfnWndProc dq ?
cbClsExtra dd ?
cbWndExtra dd ?
hInstance dq ?
hIcon dq ?
hCursor dq ?
hbrBackground dq ?
lpszMenuName dq ?
lpszClassName dq ?
hIconSm dq ?
WNDCLASSEX ENDS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WNDCLASSA STRUCT
; style DWORD ?
; lpfnWndProc DWORD ?
; cbClsExtra DWORD ?
; cbWndExtra DWORD ?
; hInstance DWORD ?
; hIcon DWORD ?
; hCursor DWORD ?
; hbrBackground DWORD ?
; lpszMenuName DWORD ?
; lpszClassName DWORD ?
style dd ?
lpfnWndProc dq ?
cbClsExtra dd ?
cbWndExtra dd ?
hInstance dq ?
hIcon dq ?
hCursor dq ?
hbrBackground dq ?
lpszMenuName dq ?
lpszClassName dq ?
WNDCLASSA ENDS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- Windows下的64位汇编(1)
- linux下64位汇编的系统调用(1)
- Linux 下的64位汇编
- 在64位windows下使用debug汇编编程
- 【汇编学习(三)】Windows 7 64位下 Debug 的安装及使用
- 如何在64位的windows下搭建汇编开发环境?
- win7 64位下的16位汇编环境
- Mac OS X下64位汇编与Linux下64位汇编的一些不同
- 64位WIN8下学习汇编的简易环境
- 在WIN7 64位下的汇编环境搭建
- linux下64位汇编的系统调用(2)
- linux下64位汇编的系统调用(3)
- linux下64位汇编的系统调用(4)
- linux下64位汇编的系统调用(5)
- windows下的汇编学习
- windows 7 64位下汇编学习——配置debug
- Window7的64位系统下配置32位的汇编环境的心得
- Windows 64位下 PostgreSQL的编译
- 一个老程序员的心里话
- C编程题(40)
- 网页颜色值
- 博客开张
- 什么是SOA
- Windows下的64位汇编(1)
- Portal 的概念和内涵
- C编程题(42)
- ASP.Net中控件的EnableViewState属性 【转】
- 老婆生气了,我很郁闷
- 关于tcp的prequeue的一些说明
- [转]自定义应用程序配置文件(app.config)
- asp.net下載往上圖片
- ObjectARX中使用非模态对话框遇到的两个问题及解决办法