您的位置:首页 > 其它

[安全]基础知识_汇编(字节序说明+masm基础)

2017-07-10 23:23 260 查看

CPU存储数据的方式

字节序

小端序:WIN数据在内存中的布局方式;

大端序:UNIX数据在内存中的布局方式;网络字节序默认方式;

e.g. 整数0x01020304

大端:[01][02][03][04] 注意左边是高地址,而右边是低地址

小端: [04][03][02][01] 注意左边是高地址,而右边是低地址

[注] 位序:我们通常所说的字节序是指字节之间的关系,但是即使是一个字节中的某一位(bit)也是有排序的问题的。位序也有大端序,小端序,中端序;

开发时,不用关心位序,编译器和CPU会自己处理这些事情。

[注]内存操作运算需注意字节序,例如,我们将一个整数指针,强制转换为一个字符指针类型,然后对字符指针类型的四个字节进行算数运算,此时必须知道CPU采用了哪种字节序存储数据。不然代码可能出错,或者移植到其他机器时不能正常运行。

常见的内存操作运算有:强制转换后对碎片数据的算术运算,内存copy/write,读写文件等。

算术运算时,不改变被运算数据的字节序,不用关心被操作数据的字节序

常见运算符有+ - * / % & | ~ << >> = 等,注意& | ~ << >> 是算术运算而不是内存操作运算,所以他们进行混合运算时,不用关心字节序或者位序问题。赋值运算符仅在数据类型兼容的时候才不涉及字节序问题,才能算作算术运算。

[注]IP地址的字节序:

IP地址的整数值,自IP地址生成后,一直是网络字节序。因此在转字节序的时候,往往跳过对IP地址的字节序转换,仅需要做算术赋值操作即可。

[注]字节序转换函数:

OS一般都提供htons、htonl、ntohs、ntohl这四个字节序操作函数,这些函数的目的虽然相同,而且操作后内存布局也相同,但是从算术运算的角度来看这些函数的特性是与机型相关的:在WIN下这四个函数会改变所操作的数的数值,但是在UNIX下就不回改变数据的算术值,UNIX下这些函数是空操作。这个差别也可能是为什么UNIX服务器上程序的性能会高于WIN的一个小原因。

编写汇编程序

利用masm

MASM是Microsoft Macro Assembler 的缩写,是微软公司为x86 微处理器家族开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80x86汇编以及Win32Asm,是Windows下开发汇编的利器。

【使用方法】

如果你的电脑是X86,那么没有太多限制,直接网上现下载masm5.0,并将所有文件解压到非C盘中某一个文件夹之内(编写的.asm文件也放在这里面)在运行中使用cmd命令,进入你文件所在目录:

如文件在D:\masm中,键入d:\masm便可进入该文件夹 。使用masm .asm 命令生成obj文件,link .obj链接生成exe文件 然后 就可以执行了,同样也是确保在文件目录下,使用 .exe命令,还有就是debug的方法,使用方法类似 debug .exe(Masm.exe和链接程序Link.exe等EXE文件事先须拷贝到d:masm)。

如果你的电脑不是X86而是x64,那么就需要使用DOSBox工具。安装完成后,打开软件会出现两个界面,在可运行界面会让你先挂载你的目录 。输入你的文件所在目录便可以,例如 mount d d:masm “d”作为虚拟d盘 “d:masm”你要虚拟的文件夹位置。然后就可按着x86的方法操作了。很多具体的DOSBox的使用方法,请自行学习,如果一般用于汇编的话,挂载也可以写到DOSBox的option文件中方便使用 。

【基本流程】

编写.asm文件

masm **.asm 文件为 **.obj 文件

link **.obj 为 **.exe 文件

debug **.exe

[注]debug时,将EXE文件放置在D:\masm文件夹中,否则出现 extended error 2 错误!

Debug命令

DEBUG各命令详细说明
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  masm 汇编 字节序