stub: fix i386 syntax for current gas versions, and add some explicit

alignments at the end of the file so that we do not depend on gas defaults.
This commit is contained in:
Markus F.X.J. Oberhumer
2013-09-20 06:15:46 +02:00
parent d9bf8a76d9
commit ce5f9f95ea
14 changed files with 23 additions and 15 deletions
+2 -2
View File
@@ -472,7 +472,7 @@ decompr0:
section LXJCC010 section LXJCC010
lxunf2: // have seen 0x80..0x8f of possible recoded 6-byte Jcc <d32> lxunf2: // have seen 0x80..0x8f of possible recoded 6-byte Jcc <d32>
movzwl ebp, [edi] // 2 bytes, zero-extended movzx ebp, word ptr [edi] // 2 bytes, zero-extended
section LXMRU045 // 0!=n_mru section LXMRU045 // 0!=n_mru
sub ebp, __cto8_0f sub ebp, __cto8_0f
@@ -644,7 +644,7 @@ section LXMRU040 // 0!=n_mru
section LXUNF030 section LXUNF030
lxctloop: lxctloop:
movzxw eax, [edi] // 2 bytes, zero extended movzx eax, word ptr [edi] // 2 bytes, zero extended
add edi, 1 add edi, 1
section LXJCC000 section LXJCC000
cmp al, 0x80 // lo of Jcc <d32> cmp al, 0x80 // lo of Jcc <d32>
+4 -4
View File
@@ -112,7 +112,7 @@ addaxds:
movsw movsw
cld cld
section LONGSUB section LONGSUB
subb [cs:si + addaxds + 4], 0x10 subb cs:[si + addaxds + 4], 0x10
section SHORTSUB section SHORTSUB
.byte 0x2e, 0x80, 0x6c, addaxds + 4, 0x10 .byte 0x2e, 0x80, 0x6c, addaxds + 4, 0x10
section JNCDOCOPY section JNCDOCOPY
@@ -177,7 +177,7 @@ reloc_0:
xor ax, ax xor ax, ax
reloc_1: reloc_1:
add di, ax add di, ax
add [es:di], bp add es:[di], bp
reloc_2: reloc_2:
lodsb lodsb
dec ax dec ax
@@ -188,9 +188,9 @@ section EXEREL9A
inc di inc di
reloc_4: reloc_4:
inc di inc di
cmpb [es:di], 0x9a cmpb es:[di], 0x9a
jne reloc_4 jne reloc_4
cmp [es:di+3], dx cmp es:[di+3], dx
ja reloc_4 ja reloc_4
mov al, 3 mov al, 3
jmps reloc_1 jmps reloc_1
+1
View File
@@ -202,5 +202,6 @@ L32:
pop edi // &auxtab pop edi // &auxtab
ret ret
.balign 4,0
// vi:ts=8:et:nowrap // vi:ts=8:et:nowrap
+2
View File
@@ -55,4 +55,6 @@ fold_begin: // enter: %ebx= &Elf32_Ehdr of this program
.extern upx_main .extern upx_main
call upx_main // Call the UPX main function call upx_main // Call the UPX main function
hlt // Crash if somehow upx_main does return hlt // Crash if somehow upx_main does return
.balign 4,0
// vi:ts=8:et:nowrap // vi:ts=8:et:nowrap
+2 -2
View File
@@ -209,8 +209,8 @@ dy_uncpr:
add esp, (5+1)*4 // (5+1) args to decompress add esp, (5+1)*4 // (5+1) args to decompress
pop edx; pop eax # edx= old dst; eax= old &b_info pop edx; pop eax # edx= old dst; eax= old &b_info
movzbl ecx,[1+ b_method + eax]; jecxz dy_uncpr; push ecx # ftid movzx ecx, byte ptr [1+ b_method + eax]; jecxz dy_uncpr; push ecx # ftid
movzbl ecx,[2+ b_method + eax]; push ecx # cto8 movzx ecx, byte ptr [2+ b_method + eax]; push ecx # cto8
push [sz_unc + eax] push [sz_unc + eax]
push edx # dst push edx # dst
lea eax,[2+ ebp]; call eax # f_unfilter(dst, dstlen, cto8, ftid) lea eax,[2+ ebp]; call eax # f_unfilter(dst, dstlen, cto8, ftid)
+1
View File
@@ -135,6 +135,7 @@ read: .globl read
0: 0:
ret ret
.balign 2,144
/* /*
vi:ts=8:et:nowrap vi:ts=8:et:nowrap
*/ */
+1
View File
@@ -257,5 +257,6 @@ mmap: .globl mmap
pop ebx pop ebx
ret ret
.balign 4,0
// vi:ts=8:et:nowrap // vi:ts=8:et:nowrap
@@ -68,4 +68,5 @@ mmap: .globl mmap
pop ebx pop ebx
ret ret
.balign 4,0
// vi:ts=8:et:nowrap // vi:ts=8:et:nowrap
@@ -125,5 +125,6 @@ mmap: .globl mmap
pop ebx pop ebx
ret ret
.balign 4,0
// vi:ts=8:et:nowrap // vi:ts=8:et:nowrap
+1
View File
@@ -172,5 +172,6 @@ mmap: .globl mmap
ret ret
.balign 4,0
// vi:ts=8:et:nowrap // vi:ts=8:et:nowrap
+1 -1
View File
@@ -259,7 +259,7 @@ cmd_exp = 80 // allow kernel to expand command line "in place" by this much
cl_nbp202: // use < 2.02 method. in: ebp= real_mode_ptr cl_nbp202: // use < 2.02 method. in: ebp= real_mode_ptr
mov esi,ebp // absolute worst case default mov esi,ebp // absolute worst case default
cmpw [ebp+ BP_cmd_line_magic],0xA33F; jne cl_move // nothing at all cmpw [ebp+ BP_cmd_line_magic],0xA33F; jne cl_move // nothing at all
movzwl esi,[ebp+ BP_cmd_line_offset] movzx esi, word ptr [ebp+ BP_cmd_line_offset]
add esi,ebp add esi,ebp
jmp cl_move jmp cl_move
cl_bp202: // try >= 2.02 method cl_bp202: // try >= 2.02 method
+4 -4
View File
@@ -201,8 +201,8 @@ p_mprot= -5*4
sub eax,ebx // restore sub eax,ebx // restore
add edi,ebx add edi,ebx
movzbl ecx,[esi+b_method-4+1]; push ecx // ftid movzx ecx, byte ptr [esi+b_method-4+1]; push ecx // ftid
movzbl ecx,[esi+b_method-4+2]; push ecx // cto8 movzx ecx, byte ptr [esi+b_method-4+2]; push ecx // cto8
push eax; mov ecx,esp // dstlen also for unfilter step 7 push eax; mov ecx,esp // dstlen also for unfilter step 7
push edi // dst param for unfilter step 7 push edi // dst param for unfilter step 7
p_unflt= -9*4 p_unflt= -9*4
@@ -248,12 +248,12 @@ supervise:
pop ecx // &dstlen pop ecx // &dstlen
pop edx // discard method,filter,cto,junk pop edx // discard method,filter,cto,junk
add eax,[ecx] // dst += dstlen add eax,[ecx] // dst += dstlen
mov [dword ptr eax],0xc36180cd // "int 0x80; popa; ret" mov dword ptr [eax],0xc36180cd // "int 0x80; popa; ret"
mov [esp + p_hatch - o_uncpr],eax // hatch at end of .text mov [esp + p_hatch - o_uncpr],eax // hatch at end of .text
//o_uncpr //o_uncpr
pop eax // &decompress pop eax // &decompress
//p_unflt //p_unflt
cmp [word ptr esp+3*4],0; je 0f // 0==ftid ==> no filter cmp word ptr [esp+3*4],0; je 0f // 0==ftid ==> no filter
add eax,2; call eax // unfilter {i386 f_unf==(2+f_unc)} add eax,2; call eax // unfilter {i386 f_unf==(2+f_unc)}
0: 0:
add esp,4*4 add esp,4*4
+1
View File
@@ -202,5 +202,6 @@ L32:
pop edi // &auxtab pop edi // &auxtab
ret ret
.balign 4,0
// vi:ts=8:et:nowrap // vi:ts=8:et:nowrap
+1 -2
View File
@@ -11,8 +11,7 @@ TARGET(elf32-i386)
.text 0x0000000000c01080 0x68c .text 0x0000000000c01080 0x68c
*(.text) *(.text)
.text 0x0000000000c01080 0xc2 tmp/i386-bsd.elf-fold.o .text 0x0000000000c01080 0xc4 tmp/i386-bsd.elf-fold.o
*fill* 0x0000000000c01142 0x2 00
.text 0x0000000000c01144 0x558 tmp/i386-bsd.elf-main.o .text 0x0000000000c01144 0x558 tmp/i386-bsd.elf-main.o
0x0000000000c01564 upx_main 0x0000000000c01564 upx_main
.text 0x0000000000c0169c 0x6d tmp/i386-bsd.syscall.o .text 0x0000000000c0169c 0x6d tmp/i386-bsd.syscall.o