zoukankan      html  css  js  c++  java
  • 汇编及逆向基础杂记

    众所周知,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                    ;结束
  • 相关阅读:
    Codeforces Round #522(Div. 2) C.Playing Piano
    zstu月赛 招生
    Codeforces Round #519 D
    RMQ[区间最值查询] 算法
    Codeforces #364 (Div. 2) D. As Fa(数学公式推导 或者二分)
    尺取法
    Codeforces #366 (Div. 2) D. Ant Man (贪心)
    Codeforces #366 Div. 2 C. Thor (模拟
    裴蜀定理
    CF850 E. Random Elections
  • 原文地址:https://www.cnblogs.com/lsbs/p/4585694.html
Copyright © 2011-2022 走看看