zoukankan      html  css  js  c++  java
  • NASM手册阅读笔记(1)

    基本格式   

      nasm -f <format> <filename> [-o <output>]

      比如:   

        nasm -f elf myfile.asm ; 将myfile.asm 编译成 elf文件格式,的 myfile.o文件,elf 是linux的可执行程序格式

    常用编译命令

    -f

      指定要编译的格式,
      windows 用 -f win32 或者win64
      linux用 -f elf
      裸机用 -f bin
    -o

       指定编译后的文件的名称 否则会有默认的文件名称
    -i

       %include指定要查找的目录,最好是能在 NASMENV 环境变量里设置固定的路径,省的每次设置
    -d

       宏定义,编译的时候添加宏定义,这样就可以在编译的时候决定代码的内容了
    -l (小写的L)
      主要是查看汇编结果,调试之前对照用的,看哪里那个地址是不是写错了什么的

    -e

      这个也是调试的时候用的,主要是查看宏展开的等是否正确

    举例

       nasm myfile.asm -d debug -I c: asmlib -f bin -o myfile.bin -l myfile.list

    编译 myfile.asm 文件
    定义 debug 宏定义,如果文件中有条件宏 就可以根据我这里定义的debug 宏来是更多调试用的指令有效了
    添加搜索文件的路径为 c: asmlib 这样如果我的文件中有%include 那么他就知道去哪里搜索对应的文件了
    定义要变的格式是 bin格式
    输出文件的名称叫 myfile.bin
    同时产生列表文件交 myfile.list

     

    NASMENV 环境变量

    NASMENV 会附加在每个编译之后,但是环境变量会被空格分开,所以nasm有个特性就是环境变量的第一个字符当做空格(不能是减号)

    比如
    '!-s!-ic: asmlib 第一个字符是! 所以这里会把当成是空格,而真正的空格就当成一个普通的字符,所以这个就等效于-s -ic: asmlib

     

    NASM -h 简单解释

    -f
      参数指定 编译的结果的格式
      bin flat-form binary files (e.g. DOS .COM, .SYS)
      ith Intel hex
      srec Motorola S-records
      aout Linux a.out object files
      aoutb NetBSD/FreeBSD a.out object files
      coff COFF (i386) object files (e.g. DJGPP for DOS)
      elf32 ELF32 (i386) object files (e.g. Linux)
      elf64 ELF64 (x86_64) object files (e.g. Linux)
      elfx32 ELFX32 (x86_64) object files (e.g. Linux)
      as86 Linux as86 (bin86 version 0.3) object files
      obj MS-DOS 16-bit/32-bit OMF object files
      win32 Microsoft Win32 (i386) object files
      win64 Microsoft Win64 (x86-64) object files
      rdf Relocatable Dynamic Object File Format v2.0
      ieee IEEE-695 (LADsoft variant) object file format
      macho32 NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (i386) object files
      macho64 NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (x86_64) object files
      dbg Trace of all info passed to output stage
      elf ELF (short name for ELF32)
      macho MACHO (short name for MACHO32)
      win WIN (short name for WIN32)

    -l
      (小写的L) 参数 可以生成 汇编而二进制文件的对照
      格式 nasm -f bin myfile.asm -l myfile.list

      使用 nasm -h 参看说明

    -o
      指定输出的文件名称
      nasm -f elf myfile.asm -o self.o

    -i
      指定搜索路径,主要是用在%include 伪指令包含的文件的所搜路径

    -d/-D
      添加预定义宏指令
      就相当于在asm 文件前面自动添加一条 %define XXXX 指令
      比如
      nasm myfile.asm -dFOO=100
      作为在文件中写下面一行语句的一种替代实现:
      %define FOO 100

    -u/-U
      与上一条相反就是取消一个宏定义

    -e
      仅预处理,包括对 宏的展开等,但是不能处理计算任务,所以 如果有 $-tablestart 会报错

    -p
      预包含一个文件
      就相当于在asm 文件前面自动添加一条 %include "filename" 伪指令

    -M
      产生对应的MAKEFILE文件

    -F
      使得输出文件带有调试信息

    -g
      使得调试信息有效

    -E
      将错误信息输出到文件中

    -s
      把出错信息输出到stdout 中

    -a
      这是在和IDE集成的时候,取消掉自身的预处理的指令,一般直接用命令行的话是用不到的

    -On
      n是数字,指优化的次数,默认是两遍

    -t
      TASM兼容模式,用不到

    -w
      开启或者关闭某些警告
      格式
      -w+orphan-labels 开启 orphan-labels 的警告
      -w-orphan-labels 关闭 orphan-labels 的警告
      可操作性的类型有
      other any warning not specifially mentioned below (default on)
      macro-params macro calls with wrong parameter count (default on)
      macro-selfref cyclic macro references (default off)
      macro-defaults macros with more default than optional parameters (default on)
      orphan-labels labels alone on lines without trailing `:' (default on)
      number-overflow numeric constant does not fit (default on)
      gnu-elf-extensions using 8- or 16-bit relocation in ELF32, a GNU extension (default off)
      float-overflow floating point overflow (default on)
      float-denorm floating point denormal (default off)
      float-underflow floating point underflow (default off)
      float-toolong too many digits in floating-point number (default on)
      user %warning directives (default on)
      lock lock prefix on unlockable instructions (default on)
      hle invalid hle prefixes (default on)
      bnd invalid bnd prefixes (default on)
      zext-reloc relocation zero-extended to match output format (default on)
      ptr non-NASM keyword used in other assemblers (default on)
      bad-pragma empty or malformed %pragma (default off)
      unknown-pragma unknown %pragma facility or directive (default off)
      not-my-pragma %pragma not applicable to this compilation (default off)
      unknown-warning unknown warning in -W/-w or warning directive (default off)
      all all possible warnings

    -v
      打印版本信息

  • 相关阅读:
    Web框架下安全漏洞的测试反思
    如何能低成本地快速获取大量目标用户,而不是与竞争对手持久战?
    Spring-Boot自定义Starter实践
    WM_QUERYENDSESSION与WM_ENDSESSION
    AutoMapper用法
    使用AutoMapper实现Dto和Model的自由转换(下)
    使用AutoMapper实现Dto和Model的自由转换(中)
    使用AutoMapper实现Dto和Model的自由转换(上)
    JSON中JObject和JArray的修改
    通信对象 System.ServiceModel.Channels.ServiceChannel 无法用于通信,因为其处于“出错”状态。
  • 原文地址:https://www.cnblogs.com/alwaysking/p/12287113.html
Copyright © 2011-2022 走看看