linux 汇编 nasm pdf,linux汇编nasm、反汇编ndisasm

linux汇编nasm、反汇编ndisasm

首页 计算机相关 linux命令 linux汇编nasm、反汇编ndisasm

NASM(The Netwide Assembler),是一款基于80x86和x86-64平台的汇编语言编译程序,其设计初衷是为了实现编译器程序跨平台和模块化的特性。

NASM支持大量的文件格式,包括Linux,*BSD,a.out,ELF,COFF,Mach−O,Microsoft 16−bit OBJ,Win32以及Win64,同时也支持简单的二进制文件生成。它的语法被设计的简单易懂,相较Intel的语法更为简单,支持目前已知的所有x86架构之上的扩展语法,同时也拥有对宏命令的良好支持-o 指定输出文件名

-f 指定输出格式

nasm支持的输出格式有*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)

ndisasm-e 忽略文件开头的字节数

-k offset,length 偏移字节数,要跳过的字节长度

-b(16 32 64) 默认为16位模式root@DESKTOP-MBTVBV7:~/ccc# objdump -h main.o

main.o: file format elf64-x86-64

Sections:

Idx Name Size VMA LMA File off Algn

0 .data 0000000d 0000000000000000 0000000000000000 00000200 2**2

CONTENTS, ALLOC, LOAD, DATA

1 .text 00000022 0000000000000000 0000000000000000 00000210 2**4

CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE

从objdump可以看出,指令在文件偏移0x210处,长度为0x22root@DESKTOP-MBTVBV7:~/ccc# objdump -d main.o

0000000000000000 :

0: b8 01 00 00 00 mov $0x1,%eax

5: bf 01 00 00 00 mov $0x1,%edi

a: be 00 00 00 00 mov $0x0,%esi

f: ba 0d 00 00 00 mov $0xd,%edx

14: 0f 05 syscall

16: b8 3c 00 00 00 mov $0x3c,%eax

1b: bf 00 00 00 00 mov $0x0,%edi

20: 0f 05 syscall

这里是GAS汇编AT&T语法,如果看的不舒服可以用ndisasm反汇编,由于ndisasm指令不能自己识别指令所在位置,所以得自己指定偏移地址

h结尾代表16进制,下面意思为,先跳过文件main.o的 0x210 个字节,然后开始反汇编,反汇编了 0x22 个字节时,往后跳过 10000 字节,如果后面还有字节就继续,如果没有了则终止root@DESKTOP-MBTVBV7:~/ccc# ndisasm -b 64 main.o -e 210h -k 22h,10000

00000000 B801000000 mov eax,0x1

00000005 BF01000000 mov edi,0x1

0000000A BE00000000 mov esi,0x0

0000000F BA0D000000 mov edx,0xd

00000014 0F05 syscall

00000016 B83C000000 mov eax,0x3c

0000001B BF00000000 mov edi,0x0

00000020 0F05 syscall

00000022 skipping 0x2710 bytes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NASM中文手册.pdfnasm必备哈 1.1 什么是NASM [1]NASM是一个为可移植性与模块化而设计的一个80x86的汇编器。它支持相当多 的目标文件格式,包括Linux和'NetBSD/FreeBSD','a.out','ELF','COFF',微软16 位的'OBJ'和'Win32'。它还可以输出纯二进制文件。它的语法设计得相当的简 洁易懂,和Intel语法相似但更简单。它支持'Pentium','P6','MMX','3DNow!', 'SSE' and 'SSE2'指令集, 1.1.1 为什么还需要一个汇编器? NASM当初被设计出来的想法是'comp.lang.asm.x86'(或者可能是'alt.lang.asm' ,我忘了),从本质上讲,是因为没有一个好的免费的x86系例的汇编器可以使用, 所以,必须有人来写一个。 (*)'a86'不错,但不是免费的,而且你不可能得到32位代码编写的功能,除非你 付费,它只使用在dos上。 (*) 'gas'是免费的,而且在dos下和unix下都可以使用,但是它是作为'gcc'的一 个后台而设计的,并不是很好,'gcc'一直就提供给它绝对正确的代码,所以它的 错误检测功能相当弱,还有就是对于任何一个想真正利用它写点东西的人来讲, 它的语法简直太可怕了,并且你无法在里面写正确的16位代码。 (*) 'as86'是专门为Minix和Linux设计的,但看上去并没有很多文档可以参考。 (*) 'MASM'不是很好,并且相当贵,还且只能运行在DOS下。 (*) 'TASM'好一些,但却极入与MASM保持兼容,这就意味着无数的伪操作码和繁琐 的约定,并且它的语法本质上就是MASM的,伴随着的就是一些自相矛盾和奇怪的 东西。它也是相当贵的,并且只能运行在DOS下。 所以,只有NASM才能使您愉悦得编程。目前,它仍在原型设计阶段-我们不期望它 能够超越所有的这些汇编器。但请您发给我们bug报告,修正意见,和其他有用的 信息,还有其他任何你手头有的对我们有用的信息(感谢所有已经这样在做了的 人们),我们还会不断地改进它。 1.1.2 许可条件 请阅读作为NASM发布的一部分的文件'Licence',只有在该许可条件下你才可以使 用NASM
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值