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                    ;结束
  • 相关阅读:
    nsight system
    unity 拿到管线权限的解决方案
    Erlang cowboy 入门参考
    [Erlang]Mnesia分布式应用
    erlang浅谈
    erlang 中带下划线变量的使用
    erlang 符号相关基本语法
    Erlang与ActionScript3采用JSON格式进行Socket通讯
    Erlang游戏开发-协议
    Erlang之IO编程
  • 原文地址:https://www.cnblogs.com/lsbs/p/4585694.html
Copyright © 2011-2022 走看看