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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

原创粉丝点击