汇编与反汇编

对于一段nasm的汇编代码

section .text

global mystart ; make the main function externally visible

mystart:
xor bx,bx
start: mov ax,1
add ax,bx
jmp short next
nop
nop
nop
next: mov bx,ax

; 2 exit the program

; 2a prepare the argument for the sys call to exit
push dword 0 ; exit status returned to the operating system

; 2b make the call to sys call to exit
mov eax, 0x1 ; system call number for exit
sub esp, 4 ; OS X (and BSD) system calls needs "extra space" on stack
int 0x80 ; make the system call

  

生成list文件
nasm -f elf 6-2.asm -l 6-2.lst

1 section .text
2 
3 global mystart ; make the main function externally visible
4 
5 mystart:
6 00000000 6631DB xor bx,bx
7 00000003 66B80100 start: mov ax,1
8 00000007 6601D8 add ax,bx
9 0000000A EB03 jmp short next
10 0000000C 90 nop
11 0000000D 90 nop
12 0000000E 90 nop
13 0000000F 6689C3 next: mov bx,ax
14 
15 ; 2 exit the program
16 
17 ; 2a prepare the argument for the sys call to exit
18 00000012 6800000000 push dword 0 ; exit status returned to the operating system
19 
20 ; 2b make the call to sys call to exit
21 00000017 B801000000 mov eax, 0x1 ; system call number for exit
22 0000001C 81EC04000000 sub esp, 4 ; OS X (and BSD) system calls needs "extra space" on stack
23 00000022 CD80 int 0x80 ; make the system call

  


顺带出来的.o可执行文件里的机器码:

7f45 4c46 0101 0100 0000 0000 0000 0000
0100 0300 0100 0000 0000 0000 0000 0000
4000 0000 0000 0000 3400 0000 0000 2800
0600 0300 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0100 0000 0100 0000
0600 0000 0000 0000 3001 0000 2400 0000
0000 0000 0000 0000 1000 0000 0000 0000
0700 0000 0100 0000 0000 0000 0000 0000
6001 0000 3f00 0000 0000 0000 0000 0000
0100 0000 0000 0000 1000 0000 0300 0000
0000 0000 0000 0000 a001 0000 2a00 0000
0000 0000 0000 0000 0100 0000 0000 0000
1a00 0000 0200 0000 0000 0000 0000 0000
d001 0000 7000 0000 0500 0000 0600 0000
0400 0000 1000 0000 2200 0000 0300 0000
0000 0000 0000 0000 4002 0000 1c00 0000
0000 0000 0000 0000 0100 0000 0000 0000
6631 db66 b801 0066 01d8 eb03 9090 9066
89c3 6800 0000 00b8 0100 0000 81ec 0400
0000 cd80 0000 0000 0000 0000 0000 0000
0054 6865 204e 6574 7769 6465 2041 7373
656d 626c 6572 2030 2e39 382e 3430 2028
4170 706c 6520 436f 6d70 7574 6572 2c20
496e 632e 2062 7569 6c64 2031 3129 0000
002e 7465 7874 002e 636f 6d6d 656e 7400
2e73 6873 7472 7461 6200 2e73 796d 7461
6200 2e73 7472 7461 6200 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0100 0000 0000 0000 0000 0000 0400 f1ff
0000 0000 0000 0000 0000 0000 0300 f1ff
0000 0000 0000 0000 0000 0000 0300 0100
1100 0000 0300 0000 0000 0000 0000 0100
1700 0000 0f00 0000 0000 0000 0000 0100
0900 0000 0000 0000 0000 0000 1000 0100
0036 2d31 2e61 736d 006d 7973 7461 7274
0073 7461 7274 006e 6578 7400 0000 0000

  

里面有一堆机器码,比原来的程序长很多
.lst文件是.asm文件翻译成机器码的结果就是一对一的翻译

反汇编
ndisasm 6-2.o
对.o文件反汇编之后发现出来的代码很奇怪,jmp的机器码直接被连接成了其他语句,不知道怎么回事,到时候想去问问老师来的,反汇编是个啥啊~

00000000 7F45 jg 0x47
00000002 4C dec esp
00000003 46 inc esi
00000004 0101 add [ecx],eax
00000006 0100 add [eax],eax
00000008 0000 add [eax],al
0000000A 0000 add [eax],al
0000000C 0000 add [eax],al
0000000E 0000 add [eax],al
00000010 0100 add [eax],eax
00000012 0300 add eax,[eax]
00000014 0100 add [eax],eax
00000016 0000 add [eax],al
00000018 0000 add [eax],al
0000001A 0000 add [eax],al
0000001C 0000 add [eax],al
0000001E 0000 add [eax],al
00000020 40 inc eax
00000021 0000 add [eax],al
00000023 0000 add [eax],al
00000025 0000 add [eax],al
00000027 003400 add [eax+eax],dh
0000002A 0000 add [eax],al
0000002C 0000 add [eax],al
0000002E 2800 sub [eax],al
00000030 06 push es
00000031 0003 add [ebx],al
00000033 0000 add [eax],al
00000035 0000 add [eax],al
00000037 0000 add [eax],al
00000039 0000 add [eax],al
0000003B 0000 add [eax],al
0000003D 0000 add [eax],al
0000003F 0000 add [eax],al
00000041 0000 add [eax],al
00000043 0000 add [eax],al
00000045 0000 add [eax],al
00000047 0000 add [eax],al
00000049 0000 add [eax],al
0000004B 0000 add [eax],al
0000004D 0000 add [eax],al
0000004F 0000 add [eax],al
00000051 0000 add [eax],al
00000053 0000 add [eax],al
00000055 0000 add [eax],al
00000057 0000 add [eax],al
00000059 0000 add [eax],al
0000005B 0000 add [eax],al
0000005D 0000 add [eax],al
0000005F 0000 add [eax],al
00000061 0000 add [eax],al
00000063 0000 add [eax],al
00000065 0000 add [eax],al
00000067 0001 add [ecx],al
00000069 0000 add [eax],al
0000006B 0001 add [ecx],al
0000006D 0000 add [eax],al
0000006F 0006 add [esi],al
00000071 0000 add [eax],al
00000073 0000 add [eax],al
00000075 0000 add [eax],al
00000077 0030 add [eax],dh
00000079 0100 add [eax],eax
0000007B 002400 add [eax+eax],ah
0000007E 0000 add [eax],al
00000080 0000 add [eax],al
00000082 0000 add [eax],al
00000084 0000 add [eax],al
00000086 0000 add [eax],al
00000088 1000 adc [eax],al
0000008A 0000 add [eax],al
0000008C 0000 add [eax],al
0000008E 0000 add [eax],al
00000090 07 pop es
00000091 0000 add [eax],al
00000093 0001 add [ecx],al
00000095 0000 add [eax],al
00000097 0000 add [eax],al
00000099 0000 add [eax],al
0000009B 0000 add [eax],al
0000009D 0000 add [eax],al
0000009F 006001 add [eax+0x1],ah
000000A2 0000 add [eax],al
000000A4 3F aas
000000A5 0000 add [eax],al
000000A7 0000 add [eax],al
000000A9 0000 add [eax],al
000000AB 0000 add [eax],al
000000AD 0000 add [eax],al
000000AF 0001 add [ecx],al
000000B1 0000 add [eax],al
000000B3 0000 add [eax],al
000000B5 0000 add [eax],al
000000B7 0010 add [eax],dl
000000B9 0000 add [eax],al
000000BB 0003 add [ebx],al
000000BD 0000 add [eax],al
000000BF 0000 add [eax],al
000000C1 0000 add [eax],al
000000C3 0000 add [eax],al
000000C5 0000 add [eax],al
000000C7 00A00100002A add [eax+0x2a000001],ah
000000CD 0000 add [eax],al
000000CF 0000 add [eax],al
000000D1 0000 add [eax],al
000000D3 0000 add [eax],al
000000D5 0000 add [eax],al
000000D7 0001 add [ecx],al
000000D9 0000 add [eax],al
000000DB 0000 add [eax],al
000000DD 0000 add [eax],al
000000DF 001A add [edx],bl
000000E1 0000 add [eax],al
000000E3 0002 add [edx],al
000000E5 0000 add [eax],al
000000E7 0000 add [eax],al
000000E9 0000 add [eax],al
000000EB 0000 add [eax],al
000000ED 0000 add [eax],al
000000EF 00D0 add al,dl
000000F1 0100 add [eax],eax
000000F3 007000 add [eax+0x0],dh
000000F6 0000 add [eax],al
000000F8 0500000006 add eax,0x6000000
000000FD 0000 add [eax],al
000000FF 000400 add [eax+eax],al
00000102 0000 add [eax],al
00000104 1000 adc [eax],al
00000106 0000 add [eax],al
00000108 2200 and al,[eax]
0000010A 0000 add [eax],al
0000010C 0300 add eax,[eax]
0000010E 0000 add [eax],al
00000110 0000 add [eax],al
00000112 0000 add [eax],al
00000114 0000 add [eax],al
00000116 0000 add [eax],al
00000118 40 inc eax
00000119 0200 add al,[eax]
0000011B 001C00 add [eax+eax],bl
0000011E 0000 add [eax],al
00000120 0000 add [eax],al
00000122 0000 add [eax],al
00000124 0000 add [eax],al
00000126 0000 add [eax],al
00000128 0100 add [eax],eax
0000012A 0000 add [eax],al
0000012C 0000 add [eax],al
0000012E 0000 add [eax],al
00000130 6631DB xor bx,bx
00000133 66B80100 mov ax,0x1
00000137 6601D8 add ax,bx
0000013A EB03 jmp short 0x13f
0000013C 90 nop
0000013D 90 nop
0000013E 90 nop
0000013F 6689C3 mov bx,ax
00000142 6800000000 push dword 0x0
00000147 B801000000 mov eax,0x1
0000014C 81EC04000000 sub esp,0x4
00000152 CD80 int 0x80
00000154 0000 add [eax],al
00000156 0000 add [eax],al
00000158 0000 add [eax],al
0000015A 0000 add [eax],al
0000015C 0000 add [eax],al
0000015E 0000 add [eax],al
00000160 00546865 add [eax+ebp*2+0x65],dl
00000164 204E65 and [esi+0x65],cl
00000167 7477 jz 0x1e0
00000169 6964652041737365 imul esp,[ebp+0x20],dword 0x65737341
00000171 6D insd
00000172 626C6572 bound ebp,[ebp+0x72]
00000176 2030 and [eax],dh
00000178 2E3938 cmp [cs:eax],edi
0000017B 2E3430 cs xor al,0x30
0000017E 2028 and [eax],ch
00000180 41 inc ecx
00000181 7070 jo 0x1f3
00000183 6C insb
00000184 6520436F and [gs:ebx+0x6f],al
00000188 6D insd
00000189 7075 jo 0x200
0000018B 7465 jz 0x1f2
0000018D 722C jc 0x1bb
0000018F 20496E and [ecx+0x6e],cl
00000192 632E arpl [esi],bp
00000194 206275 and [edx+0x75],ah
00000197 696C642031312900 imul ebp,[esp+0x20],dword 0x293131
0000019F 0000 add [eax],al
000001A1 2E7465 cs jz 0x209
000001A4 7874 js 0x21a
000001A6 002E add [esi],ch
000001A8 636F6D arpl [edi+0x6d],bp
000001AB 6D insd
000001AC 656E gs outsb
000001AE 7400 jz 0x1b0
000001B0 2E7368 cs jnc 0x21b
000001B3 7374 jnc 0x229
000001B5 7274 jc 0x22b
000001B7 61 popa
000001B8 6200 bound eax,[eax]
000001BA 2E7379 cs jnc 0x236
000001BD 6D insd
000001BE 7461 jz 0x221
000001C0 6200 bound eax,[eax]
000001C2 2E7374 cs jnc 0x239
000001C5 7274 jc 0x23b
000001C7 61 popa
000001C8 6200 bound eax,[eax]
000001CA 0000 add [eax],al
000001CC 0000 add [eax],al
000001CE 0000 add [eax],al
000001D0 0000 add [eax],al
000001D2 0000 add [eax],al
000001D4 0000 add [eax],al
000001D6 0000 add [eax],al
000001D8 0000 add [eax],al
000001DA 0000 add [eax],al
000001DC 0000 add [eax],al
000001DE 0000 add [eax],al
000001E0 0100 add [eax],eax
000001E2 0000 add [eax],al
000001E4 0000 add [eax],al
000001E6 0000 add [eax],al
000001E8 0000 add [eax],al
000001EA 0000 add [eax],al
000001EC 0400 add al,0x0
000001EE F1 int1
000001EF FF00 inc dword [eax]
000001F1 0000 add [eax],al
000001F3 0000 add [eax],al
000001F5 0000 add [eax],al
000001F7 0000 add [eax],al
000001F9 0000 add [eax],al
000001FB 0003 add [ebx],al
000001FD 00F1 add cl,dh
000001FF FF00 inc dword [eax]
00000201 0000 add [eax],al
00000203 0000 add [eax],al
00000205 0000 add [eax],al
00000207 0000 add [eax],al
00000209 0000 add [eax],al
0000020B 0003 add [ebx],al
0000020D 0001 add [ecx],al
0000020F 0011 add [ecx],dl
00000211 0000 add [eax],al
00000213 0003 add [ebx],al
00000215 0000 add [eax],al
00000217 0000 add [eax],al
00000219 0000 add [eax],al
0000021B 0000 add [eax],al
0000021D 0001 add [ecx],al
0000021F 0017 add [edi],dl
00000221 0000 add [eax],al
00000223 000F add [edi],cl
00000225 0000 add [eax],al
00000227 0000 add [eax],al
00000229 0000 add [eax],al
0000022B 0000 add [eax],al
0000022D 0001 add [ecx],al
0000022F 0009 add [ecx],cl
00000231 0000 add [eax],al
00000233 0000 add [eax],al
00000235 0000 add [eax],al
00000237 0000 add [eax],al
00000239 0000 add [eax],al
0000023B 0010 add [eax],dl
0000023D 0001 add [ecx],al
0000023F 0000 add [eax],al
00000241 362D312E6173 ss sub eax,0x73612e31
00000247 6D insd
00000248 006D79 add [ebp+0x79],ch
0000024B 7374 jnc 0x2c1
0000024D 61 popa
0000024E 7274 jc 0x2c4
00000250 007374 add [ebx+0x74],dh
00000253 61 popa
00000254 7274 jc 0x2ca
00000256 006E65 add [esi+0x65],ch
00000259 7874 js 0x2cf
0000025B 0000 add [eax],al
0000025D 0000 add [eax],al
0000025F 00 db 0x00

  

后来明白了,因为写的时候没有把代码段数据段堆栈分开来,所以在反汇编的时候机器没有按相应的规则去反编译出来。

原文地址:https://www.cnblogs.com/sparkmorry/p/3505563.html