码迷,mamicode.com
首页 > 其他好文 > 详细

x64汇编第一课

时间:2019-04-09 12:46:14      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:cap   clu   汇编   padding   mirror   ted   theme   rap   图片   

x64相关文档:

0.环境
编译器:ml64.exe
技术图片
技术图片

链接器:link.exe
技术图片
cmd选择:这个不要选兼容,不然link不过,不需要配置环境bi
技术图片

1.32位和64位的区别:
1.eax赋值为1,64位的高32位自动补0

mov eax, ffffffff
rax = 0x00000000ffffffff
mov eax,1
    add rax,rax
2.传参的四个寄存器统一规定依次是rcx、rdx、r8、r9
3.64位汇编中声明和定义时都不需要写参数了,64位汇编只需写区,定义变量就好
4.关于抬栈一般按模16,
1.比如传4个参数,正常是4*8=0x20,加上call的反回值寄存器0x20+8,不能模16,+8=0x30,能模16,
MyAdd proc
  sub rsp, 28h
  mov [rsp+30h], ecx ;原本第一个参数地址该是rsp+8h,再加28h,变成rsp+30h
  mov [rsp+38h], edx
  mov eax, ecx
  add eax, edx
  add rsp, 28h
  ret
MyAdd endp
2.多于4个参数的 函数内存结构  mov 【rsp+20h】xx
技术图片

2.64位HelloWord

extern MessageBoxA:proc
extern ExitProcess:proc

includelib user32.lib
includelib kernel32.lib

MB_OK EQU  0

.const
  _MSG:  
      db "Hello x64!", 0dh, 0ah, 0
  _TITLE:
      db "Title", 0
      
.data
  _BUFF: org 260
  
  

.code 




START proc 
  sub   rsp, 28h  ;нц┴З┐Н╝С  sup rsp  add rsp
  

  
  mov   rcx, 0
  mov   rdx, offset _MSG
  mov   r8,  offset _TITLE
  mov   r9,  MB_OK
  call  MessageBoxA  

  mov   rcx, 0
  call  ExitProcess
  add   rsp, 28h
  ret
START endp

 end
 
 
3.编译链接的批处理
ml64 /c hello.asm
link64 /SUBSYSTEM:WINDOWS /ENTRY:START /MACHINE:ARM hello.obj rc2.res

ml64 /c Hello.asm 
link /subsystem:windows /entry:Main Hello.obj




附件列表

     

    x64汇编第一课

    标签:cap   clu   汇编   padding   mirror   ted   theme   rap   图片   

    原文地址:https://www.cnblogs.com/yy4955/p/10676120.html

    (0)
    (0)
       
    举报
    评论 一句话评论(0
    登录后才能评论!
    © 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
    迷上了代码!