x64汇编第一课

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

2

1

mov eax,1

2

    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

9

9

1

MyAdd proc

2

  sub rsp, 28h

3

  mov [rsp+30h], ecx ;原本第一个参数地址该是rsp+8h,再加28h,变成rsp+30h

4

  mov [rsp+38h], edx

5

  mov eax, ecx

6

  add eax, edx

7

  add rsp, 28h

8

  ret

9

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

 

1

46

1


2


3

extern MessageBoxA:proc

4

extern ExitProcess:proc

5


6

includelib user32.lib

7

includelib kernel32.lib

8


9

MB_OK EQU  0

10


11

.const

12

  _MSG:  

13

      db "Hello x64!", 0dh, 0ah, 0

14

  _TITLE:

15

      db "Title", 0

16

      

17

.data

18

  _BUFF: org 260

19

  

20

  

21


22

.code 

23


24


25


26


27

START proc 

28

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

29

  

30


31

  

32

  mov   rcx, 0

33

  mov   rdx, offset _MSG

34

  mov   r8,  offset _TITLE

35

  mov   r9,  MB_OK

36

  call  MessageBoxA  

37


38

  mov   rcx, 0

39

  call  ExitProcess

40

  add   rsp, 28h

41

  ret

42

START endp

43


44

 end

45

 

46

 
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

1

ml64 /c hello.asm

2

link64 /SUBSYSTEM:WINDOWS /ENTRY:START /MACHINE:ARM hello.obj rc2.res

3


4

ml64 /c Hello.asm 

5

link /subsystem:windows /entry:Main Hello.obj

来自为知笔记(Wiz)

附件列表

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

时间: 2024-07-29 23:51:07

x64汇编第一课的相关文章

x64汇编第一讲,Vs系列配置x64环境与x86环境

目录 x64汇编环境配置 一丶x64环境配置 1.1 VS系列编译器配置X64Asm开发环境. 二丶Vs配置X86汇编环境. x64汇编环境配置 一丶x64环境配置 现在windows系统都是64位了,那么对应的汇编也就是说已经升级到64位了. 一直没有时间写博客将64位汇编写出来.所以现在细心整理一下. 首先我们先配置好开发环境,然后我们才能进行开发. 1.1 VS系列编译器配置X64Asm开发环境. 1.1新建一个项目.项目里面添加一个.asm后缀的文件. 当然后缀.asm文件没有,所以我们

【C++探索之旅】开宗明义+第一部分第一课:什么是C++?

内容简介 1.课程大纲 2.第一部分第一课:什么是C++? 3.第一部分第二课预告:C++编程的必要软件 开宗明义 亲爱的读者,您是否对C++感兴趣,但是C++看起来很难,或者别人对你说C++挺难的,你不知道如何入门? 别担心,这个系列教程就是为C++初学者准备的. 不可否认,C++是一门非常著名的语言.几乎学计算机的同学都难免要碰一下C++,中国的大学课堂一般也是先学C语言入门,然后就是Java或者C++. C++ 这门语言的使用很广泛,特别是在游戏开发领域,C++的性能和无限可能性使得其几乎

Windows X64汇编入门(1)

Windows X64汇编入门(1) tankaiha 最近断断续续接触了些64位汇编的知识,这里小结一下,一是阶段学习的回顾,二是希望对64位汇编新手有所帮助.我也是刚接触这方面知识,文中肯定有错误之处,大家多指正. 文章的标题包含了本文的四方面主要内容: (1)Windows:本文是在windows环境下的汇编程序设计,调试环境为Windows Vista 64位版,调用的均为windows API. (2)X64:本文讨论的是x64汇编,这里的x64表示AMD64和Intel的EM64T,

手动脱PeCompact 2.20壳实战-吾爱破解培训第一课选修作业四

作者:Fly2015 PeCompact壳又是一个没有听说过的壳,需要脱壳的程序是吾爱破解培训的第一课的选修作业四.最近对脱壳有点上瘾了,当然也遭受了脱壳受挫的无奈,但是比较幸运还是把这个壳给搞了. 对加壳程序进行查壳. 工具DIE显示程序加的是PeCompact壳,并且原来没加壳的程序使用Microsoft Visual C/C++(2008)编写的,这一点对于查找原程序的真实OEP非常有帮助. OD载入加壳的程序进行分析,加壳程序的入口点的汇编代码. F8走了几步,坑啊,写壳的作者在代码中设

手动脱FSG壳实战--吾爱破解培训第一课作业3

作者:Fly2015 对于FSG壳,之前没有接触过是第一次接触,这次拿来脱壳的程序仍然是吾爱破解论坛破解培训的作业3的程序.对于这个壳折腾了一会儿,后来还是被搞定了. 1.查壳 首先对该程序(吾爱破解培训第一课作业三.exe)进行查壳: 很遗憾,这次DIE也不行了,不过没事. 2.脱壳 OD载入该加壳的程序进行分析,下面是入口点的汇编代码: 起初对于该种加壳程序也是比较陌生,但是由于OD使用的还算熟悉,以及结合该加壳程序获取函数的API调用地址的特点,很快发现了该程序的关键点汇编: 于是在地址0

手动脱UPX 壳实战--吾爱破解培训第一课作业1

作者:Fly2015 Windows平台的加壳软件还是比较多的,因此有很多人对于PC软件的脱壳乐此不彼,本人菜鸟一枚,也学习一下PC的脱壳.要对软件进行脱壳,首先第一步就是 查壳,然后才是 脱壳. 推荐比较好的查壳软件: PE Detective .Exeinfo PE.DIE工具. 需要脱壳的程序是吾爱破解论坛的windows逆向破解培训http://www.52pojie.cn/thread-378612-1-1.html第一课的作业题1. 1.对该程序(吾爱破解培训第一课作业一.exe)进

sql第一课笔记

这是我看了imooc的视频教程之后重新写的笔记. 虽然之前也是学习过SQL Server数据库,但是也是忘记得差不多了.现在重新捡起来,安装一次数据库练习,使用的是mysql. 第一课是最简单的创建,修改,查看,删除数据库: mysql 有密码之后在命令行登陆 用的是 shell>mysql -u root -p; 提示输入密码: 登陆成功之后,把提示符mysql变成以当前计算机帐户名@主机名 当前数据库的格式:prompt \[email protected]\h \d> prompt命令下

OpenCV 第一课(安装与配置)

OpenCV 第一课(安装与配置) win10,opencv-2.4.13, 安装, vs2013, 配置 下载安装软件 官网OpenCV下载地址下载最新版本,我下载的是opencv.2.4.13,然后解压安装,我写的路径是D:\Program Files.注意本文中绿色标注的要换成你自己的安装路径. 这里得说一点,可能是因为网速太差的原因,昨天晚上下载了几次安装时都提示说"cannott open file'opencv-2.4.13.exe' as archive".我当时一直不明

读书笔记 - 《格鲁夫给经理人的第一课》

这本书对我的启发远远超过其它的企业管理类图书,不愧是资深前辈写的书.虽然名为第一课,实际上对于中层经理人来说,已经不再需要第二课了.这本书从简单的早餐店开始,讲解了管理杠杆率.开会.决策.规划.矩阵组织.激励.绩效.招人.薪酬.培训,以浅显的语言讲解了几乎是一个中层经理人所需理解的全部工作,使我对工作的认识有了大幅度提高,已经基本可以摆脱漫无头绪的状态!这本书准备丢在公司,没事就翻看思考一下,在实践中继续深入领悟!