asm 查看字节码

a.asm

global Start
section .text                              
  inc dword [esi]
  push edi
  mov edi,[esp+0x14]
λ nasm -f win32 a.asm -l a.lst
     1                                  global Start
     2                                  section .text                              
     3 00000000 FF06                      inc dword [esi]
     4 00000002 57                        push edi
     5 00000003 8B7C2414                  mov edi,[esp+0x14]

如果你编写的是x64指令:

λ nasm -f win64 a.asm -l a.lst
>nasm --help
Usage: nasm [-@ response_file] [options...] [--] filename
       nasm -v (or --v)

Options (values in brackets indicate defaults):

    -h            show this text and exit (also --help)
    -v (or --v)   print the NASM version number and exit
    -@ file       响应文件; 每行一个命令行选项

    -o outfile    将输出写入输出文件
    --keep-all    即使发生错误也不会删除输出文件

    -Xformat      指定错误报告格式(gnu或vc)
    -s            将错误消息重定向到stdout
    -Zfile        将错误消息重定向到文件

    -M            在stdout上生成Makefile依赖项
    -MG           d:o, 假定丢失的文件已生成
    -MF file      设置Makefile依赖文件
    -MD file      assemble and generate dependencies
    -MT file      依赖目标名称
    -MQ file      依赖关系目标名称(带引号)
    -MP           发出虚假目标

    -f format     选择输出文件格式
       bin                  平面原始二进制文件(MS-DOS,嵌入式,...)[默认]
       ith                  Intel Hex编码的平面二进制
       srec                 摩托罗拉S记录编码的平面二进制
       aout                 Linux a.out
       aoutb                NetBSD/FreeBSD a.out
       coff                 COFF(i386)(DJGPP,某些Unix变体)
       elf32                ELF32 (i386) (Linux,大多数Unix变体)
       elf64                ELF64 (x86-64) (Linux,大多数Unix变体)
       elfx32               ELFx32 (ELF32 for x86-64) (Linux)
       as86                 as86(bin86 / dev86工具链)
       obj                  特尔/微软OMF(MS-DOS,OS / 2,Win16)
       win32                Microsoft扩展了Win32的COFF(i386)
       win64                Microsoft为Win64(x86-64)扩展了COFF
       rdf                  可重定位动态对象文件格式v2.0
       ieee                 IEEE-695(LADsoft变体)目标文件格式
       macho32              Mach-O i386(Mach,包括MacOS X及其变体)
       macho64              Mach-O x86-64(Mach,包括MacOS X及其变体)
       dbg                  跟踪传递到输出阶段的所有信息
       elf                  “elf32”的旧别名
       macho                “macho32”的旧别名
       win                  “win32”的旧别名

    -g            生成调试信息
    -F format     选择调试格式(取决于输出格式)
    -gformat      与-g -F格式相同
       elf32:     dwarf     ELF32 (i386) dwarf (newer) [default]
                  stabs     ELF32 (i386) stabs (older)
       elf64:     dwarf     ELF64 (x86-64) dwarf (newer) [default]
                  stabs     ELF64 (x86-64) stabs (older)
       elfx32:    dwarf     ELFx32 (x86-64) dwarf (newer) [default]
                  stabs     ELFx32 (x86-64) stabs (older)
       obj:       borland   Borland Debug Records [default]
       win32:     cv8       Codeview 8+ [default]
       win64:     cv8       Codeview 8+ [default]
       ieee:      ladsoft   LADsoft Debug Records [default]
       macho32:   dwarf     Mach-O i386 dwarf for Darwin/MacOS [default]
       macho64:   dwarf     Mach-O x86-64 dwarf for Darwin/MacOS [default]
       dbg:       debug     Trace of all info passed to debug stage [default]

    -l listfile   将列表写入列表文件
    -Lflags...    将可选信息添加到列表文件
       -Lb        显示内置宏程序包(标准和%use)
       -Ld        显示字节并以十进制而不是十六进制重复计数
       -Le        显示预处理的输出
       -Lf        忽略.nolist(强制输出)
       -Lm        显示带有扩展参数的多行宏调用
       -Lp        每过一次输出一个列表文件,以防出错
       -Ls        显示所有单行宏定义
       -Lw        每行之后刷新输出
       -L+        启用所有列表选项(非常详细!)

    -Oflags...    优化操作码,立即数和分支偏移
       -O0        没有优化
       -O1        最小优化
       -Ox        多遍优化(默认)
       -Ov        显示最后执行的通过次数
    -t            以受限的SciTech TASM兼容模式组装

    -E (or -e)    仅预处理(默认情况下将输出写入标准输出)
    -a            不要预处理(仅assemble)
    -Ipath        将路径名添加到包含文件路径
    -Pfile        预包含文件(--include)
    -Dmacro[=str] 预定义宏
    -Umacro       取消定义宏
   --pragma str   预执行特定的 %%pragma
   --before str   在输入之前添加行(通常是预处理程序语句)
   --no-line      忽略输入中的%line指令

   --prefix str   将给定的字符串添加到所有extern的名称之前,
                  通用符号和全局符号(--gprefix)
   --suffix str   将给定的字符串附加到所有extern的名称中,
                  通用符号和全局符号(--gprefix)
   --lprefix str  将给定的字符串放在本地符号之前
   --lpostfix str 将给定的字符串附加到本地符号

    -w+x          启用警告x(-Wx)
    -w-x          禁用警告x(-Wno-x)
    -w[+-]error   宣传所有错误警告 (-Werror)
    -w[+-]error=x 将警告x提升为错误 (-Werror=x)
       all                  所有可能的警告
       bnd                  无效的BND前缀[on]
       db-empty             没有用于数据声明的操作数[on]
       environment          不存在的环境变量[on]
       float                所有带有“ float-”前缀的警告
       float-denorm         浮点异常[关闭]
       float-overflow       浮点溢出[on]
       float-toolong        浮点数中的位数过多[on]
       float-underflow      浮点下溢[关闭]
       hle                  无效的HLE前缀[on]
       label                所有带有“ label-”前缀的警告
       label-orphan         仅在行上加上标签,而不能在末尾加上“:”
       label-redef          标签重新定义为相同的值[off]
       label-redef-late     label(在代码生成过程中重新定义) [error]
       lock                 可解锁指令上的LOCK前缀 [on]
       macro                所有带有前缀的警告 "macro-"
       macro-defaults       具有比可选参数更多默认值的宏 [on]
       macro-params         所有带有前缀的警告 "macro-params-"
       macro-params-legacy  不正确地调用多行宏以获得旧版支持 [on]
       macro-params-multi   参数计数错误的多行宏调用 [on]
       macro-params-single  参数计数错误的单行宏调用 [on]
       negative-rep         常规%rep计数 [on]
       number-overflow      数值常数不适合 [on]
       obsolete             所有带有前缀的警告 "obsolete-"
       obsolete-nop         指令已过时,并且是目标CPU上的noop [on]
       obsolete-removed     指令已过时并已在目标CPU上删除 [on]
       obsolete-valid       指令已过时,但在目标CPU上有效 [on]
       phase                稳定期间的相位误差 [off]
       pragma               所有带有前缀的警告 "pragma-"
       pragma-bad           格式错误的%pragma [off]
       pragma-empty         空%pragma指令 [off]
       pragma-na            %pragma不适用于此编译 [off]
       pragma-unknown       未知的%pragma工具或指令 [off]
       ptr                  其他汇编程序中使用的非NASM关键字 [on]
       regsize              寄存器大小规格被忽略 [on]
       unknown-warning      -W / -w或警告指令中的未知警告 [off]
       user                 %warning指令 [on]
       warn-stack-empty     警告堆栈为空 [on]
       zeroing              初始化节中的RESx变为零 [on]
       zext-reloc           重定位零扩展以匹配输出格式 [on]
       other                上面没有特别提到的任何警告 [on]

   --limit-X val  设定执行极限X
       passes               总通过次数[不限]
       stalled-passes       没有前进的通过次数[1000]
       macro-levels         宏扩展级别[10000]
       macro-tokens         tokens processed during single-lime macro expansion [10000000]
       mmacros              最后返回之前的多行宏 [100000]
       rep                  %rep count [1000000]
       eval                 expression evaluation descent [8192]
       lines                总处理的源代码行 [2000000000]
posted @ 2020-08-05 23:34  Ajanuw  阅读(321)  评论(0编辑  收藏  举报