汇编及逆向基础杂记

时间:2021-08-18 16:11:19

 

众所周知,CPU就是执行所有程序的工作单元。

在关于x86与x64的问题上,x64体系并非一个全新的平台架构,而是基于x86架构扩展而来的。x64体系仍保留着向下兼容的能力,在long-mode的64位执行环境里,往往仍能使用32位的编程技术,主要是因为,虽然64位环境中default address size(默认地址大小)是64位,但绝大部分指令的default operand size(默认操作数大小)依然是32位的,而从软件编程来看,Pointer(指针)值的地址宽度是64位的,但integer与long的默认数据宽度仍然是32位,除非明确指出使用64位的long long类型访问,64位执行环境中指令使用REX prefix来访问64位的数据宽度。

 

nasm语法与intel使用的语法在内存操作数寻址的表达上主要存在两方面区别:

1)operand size(操作数尺寸)的指示字

2)segment override prefix(段改写前缀)的位置

 

intel语法中:

1 mov dword ptr [eax], 1      ;dword ptr指示字
2 mov eax, cs:[20100h]   ;段前缀在括号外

而nasm语法为:

1 mov dword [eax], 1        ;操作数的尺寸指示字去掉ptr字
2 mov eax, [cs:20100h]     ;段前缀放在括号里

另外就是应注意nasm中宏定义的方式:

1 %macro NMI_DISABLE 0         ;由%macro开始,参数个数为0
2 %endmacro ;结束