It is currently Fri Jun 22, 2018 6:41 am

All times are UTC + 1 hour




Post new topic Reply to topic  [ 28 posts ]  Go to page 1, 2  Next
Author Message
 Post subject: PB5.44 - PB 5.51B1 - Compiled program flagged as Shared lib
PostPosted: Sun Nov 20, 2016 8:48 pm 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Sun Jul 07, 2013 11:35 am
Posts: 330
Location: Canada
Hello everyone,

Compiled program are flagged to be Shared libraries by the operating system.

https://www.dropbox.com/s/b5ocg471ydlb8sj/Program_as_Shared_Lib.png?dl=0

They can be launch like a normal program via a *.desktop file. Unfortunately I don't create a *.desktop file for every program I create.

PB5.44 Beta 1 x64
Ubuntu Gnome 16.10 x64

Best regards
StarBootics

_________________
The Stone Age did not end due to a shortage of stones !


Last edited by StarBootics on Tue Dec 06, 2016 6:31 pm, edited 1 time in total.

Top
 Profile  
Reply with quote  
 Post subject: Re: PB5.44 - Compiled program flagged as Shared lib
PostPosted: Mon Nov 21, 2016 6:28 am 
Offline
Addict
Addict
User avatar

Joined: Thu Jun 04, 2015 7:10 am
Posts: 1673
i havent had a chance to try 5.44 yet, but i wonder if it's just that flag in the ELF header then?
https://en.wikipedia.org/wiki/Executabl ... ble_Format
offset 0x10 (2 bytes) "e_type" 1=relocatable, 2=executable, 3=shared, 4=core

Code:
Enumeration Elf_Type
  #ET_NONE
  #ET_REL
  #ET_EXEC
  #ET_DYN
  #ET_CORE
EndEnumeration

Procedure.s ELFType(sELFFile.s)
  Protected hFile, e_type.u, sType.s
  hFile = ReadFile(#PB_Any, sELFfile)
  If hFile
    FileSeek(hFile, $10)
    e_type = ReadWord(hFile)
    Select e_type
        Case #ET_REL:  sType = "Relocatable"
        Case #ET_EXEC: sType = "Executable"
        Case #ET_DYN:  sType = "Library"
        Case #ET_CORE: sType = "Core"
        Default: sType = "Other"
    EndSelect
    CloseFile(hFile)
    ProcedureReturn sType
  Else
    ProcedureReturn "Error"
  EndIf
EndProcedure

Debug ELFType("/tmp/myapp")
in which case it'd be easy enough to patch at least in the meantime!? :) ...
Code:
Procedure.i SetELFType(sELFFile.s, e_type.u)
  Protected hFile, sType.s
  hFile = OpenFile(#PB_Any, sELFfile)
  If hFile
    FileSeek(hFile, $10)
    WriteWord(hFile, e_type)
    CloseFile(hFile)
    ProcedureReturn 1
  EndIf
EndProcedure

Debug ELFType("/tmp/myapp", #ET_EXEC) ;2

(and i take it you've already checked to ensure Compiler -> Compiler Options -> Executable Format to ensure that hasn't changed! sorry for silly Q but someone has to ask lol :))

_________________
Thankyou to all the coders who generously helped & encouraged me in the nearly 2yrs when i was welcome here,
it was a tremendous privilege. I learned a lot. I wish you and your families all the best and success for the future.


Top
 Profile  
Reply with quote  
 Post subject: Re: PB5.44 - Compiled program flagged as Shared lib
PostPosted: Mon Nov 21, 2016 7:24 am 
Offline
Addict
Addict
User avatar

Joined: Mon Jun 02, 2003 9:16 am
Posts: 2062
Location: Germany
Quote:
[...] flagged to be Shared libraries by the operating system
What exactly do you mean? Is your file browser showing them as non-executables? Thats not the operating system then, but your file browser. Could it be that it is just not flagged as executable? I mean does chmod +x yourapp help?

_________________
bye,
Daniel


Top
 Profile  
Reply with quote  
 Post subject: Re: PB5.44 - Compiled program flagged as Shared lib
PostPosted: Mon Nov 21, 2016 8:29 am 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Sun Jul 07, 2013 11:35 am
Posts: 330
Location: Canada
DarkDragon wrote:
Quote:
[...] flagged to be Shared libraries by the operating system
What exactly do you mean? Is your file browser showing them as non-executables? Thats not the operating system then, but your file browser. Could it be that it is just not flagged as executable? I mean does chmod +x yourapp help?


What I mean : When you compile a program, it is considered as "application/x-sharedlib" and not as "application/x-executable". Did you take time to check the image I provide to show the problem ?

And this behavior appeared with the 5.44 version of the compiler. Program created with PB 5.50 on Ubuntu 16.04 are created as "application/x-executable".

Edit : By the way : chmod +x yourapp change absolutely nothing

Best regards
StarBootics

_________________
The Stone Age did not end due to a shortage of stones !


Top
 Profile  
Reply with quote  
 Post subject: Re: PB5.44 - Compiled program flagged as Shared lib
PostPosted: Sat Nov 26, 2016 11:53 am 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Sun Jul 07, 2013 11:35 am
Posts: 330
Location: Canada
Keya wrote:
i havent had a chance to try 5.44 yet, but i wonder if it's just that flag in the ELF header then?


Sorry to be so late, and yes you hit the nail just right. When I run your code this is what I get in the debugger output :
Quote:
Library


Unfortunately, patching the Executable make the patched program no longer launchable. There is something else somewhere to patch as well.

Best regards
StarBootics

_________________
The Stone Age did not end due to a shortage of stones !


Top
 Profile  
Reply with quote  
 Post subject: Re: PB5.44 - Compiled program flagged as Shared lib
PostPosted: Sat Nov 26, 2016 1:29 pm 
Offline
Administrator
Administrator

Joined: Fri May 17, 2002 4:39 pm
Posts: 13304
Location: France
It's probably a detect error from your filemanager as PB executable are real executables.


Top
 Profile  
Reply with quote  
 Post subject: Re: PB5.44 - Compiled program flagged as Shared lib
PostPosted: Sat Nov 26, 2016 2:08 pm 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Sun Jul 07, 2013 11:35 am
Posts: 330
Location: Canada
Fred wrote:
It's probably a detect error from your filemanager as PB executable are real executables.


Unfortunately, newly compiled program with PB 5.44 on Ubuntu Gnome 16.10 has Keya code's tell us, the eType Flag is equal to "Library" and not "Executable" and the program don't launch by double click on the filename in Nautilus. But programs created with PB V5.50 on Ubuntu Gnome 16.04 work as is on Ubuntu Gnome 16.10 and can be launched by a double click in Nautilus.

So why old program work as expected and new one don't that the question ?

Best regards
StarBootics

_________________
The Stone Age did not end due to a shortage of stones !


Top
 Profile  
Reply with quote  
 Post subject: Re: PB5.44 - Compiled program flagged as Shared lib
PostPosted: Tue Nov 29, 2016 2:07 am 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Sun Jul 07, 2013 11:35 am
Posts: 330
Location: Canada
Hello everyone,

Sorry for the long following code but I'm investigating ...

Code:
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : Executable investigation
; File Name : Executable investigation.pb
; File version: 1.0.0
; Programming : Unknown - Experimental
; Programmed by : StarBootics
; Date : 26-11-2016
; Last Update : 28-11-2016
; PureBasic code : V5.44 Beta 2 LTS
; Platform : Ubuntu 16.10 (yakkety) x86-64
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

DeclareModule ELFHeader

  Declare ReadELFHeader(FileID.i)

  CompilerIf #PB_Compiler_Debugger
    Declare Debugging()
  CompilerEndIf

EndDeclareModule

Module ELFHeader

  Structure Instance

    Magic00.a
    Magic01.a
    Magic02.a
    Magic03.a
    Class.a
    Endian.a
    Version.a
    OSABI.a
    ABIVersion.a
    Padding.a[7]
    eType.u
    eMachine.u
    eVersion.l
    eEntry.i
    ePhOff.i
    eShOff.i
    eFlag.l
    eEhSize.u
    ePhEntSize.u
    ePhNum.u
    eShEntSize.u
    eShNum.u
    eShStrNdx.u

  EndStructure

  Global Instance.Instance

  Procedure ReadELFHeader(FileID.i)
   
    Instance\Magic00 = ReadAsciiCharacter(FileID)
    Instance\Magic01 = ReadAsciiCharacter(FileID)
    Instance\Magic02 = ReadAsciiCharacter(FileID)
    Instance\Magic03 = ReadAsciiCharacter(FileID)
    Instance\Class = ReadAsciiCharacter(FileID)
    Instance\Endian = ReadAsciiCharacter(FileID)
    Instance\Version = ReadAsciiCharacter(FileID)
    Instance\OSABI = ReadAsciiCharacter(FileID)
    Instance\ABIVersion = ReadAsciiCharacter(FileID)
   
    For PaddingID = 0 To 6
      Instance\Padding[PaddingID] = ReadAsciiCharacter(FileID)
    Next
   
    Instance\eType = ReadUnicodeCharacter(FileID)
    Instance\eMachine = ReadUnicodeCharacter(FileID)
    Instance\eVersion = ReadLong(FileID)
    Instance\eEntry = ReadInteger(FileID)
    Instance\ePhOff = ReadInteger(FileID)
    Instance\eShOff = ReadInteger(FileID)
    Instance\eFlag = ReadLong(FileID)
    Instance\eEhSize = ReadUnicodeCharacter(FileID)
    Instance\ePhEntSize = ReadUnicodeCharacter(FileID)
    Instance\ePhNum = ReadUnicodeCharacter(FileID)
    Instance\eShEntSize = ReadUnicodeCharacter(FileID)
    Instance\eShNum = ReadUnicodeCharacter(FileID)
    Instance\eShStrNdx = ReadUnicodeCharacter(FileID)
   
  EndProcedure

  CompilerIf #PB_Compiler_Debugger

    Procedure Debugging()
   
      Debug "Magic Number : " + Hex(Instance\Magic00) + " " + Chr(Instance\Magic01) + Chr(Instance\Magic02) + Chr(Instance\Magic03)
     
      Select Instance\Class
         
        Case 1
          Debug "Class : 32-bit format"
         
        Case 2
          Debug "Class : 64-bit format"
         
      EndSelect
     
         
      Select Instance\Endian
         
        Case 1
          Debug "Endian : Little"
         
        Case 2
          Debug "Endian : Big"
         
      EndSelect
               
      Debug "Version : " + Str(Instance\Version)
     
      Select Instance\OSABI
         
        Case $00
          Debug "OSABI : System V"
         
        Case $01    
          Debug "OSABI : HP-UX"
         
        Case $02
          Debug "OSABI : NetBSD"
         
        Case $03
          Debug "OSABI : Linux"
         
        Case $06    
          Debug "OSABI : Solaris"
         
        Case $07    
          Debug "OSABI : AIX"
         
        Case $08    
          Debug "OSABI : IRIX"
         
        Case $09    
          Debug "OSABI : FreeBSD"
         
        Case $0C    
          Debug "OSABI : OpenBSD"
         
        Case $0D    
          Debug "OSABI : OpenVMS"
         
        Case $0E    
          Debug "OSABI : NonStop Kernel"
         
        Case $0F    
          Debug "OSABI : AROS"
         
        Case $10    
          Debug "OSABI : Fenix OS"
         
        Case $11    
          Debug "OSABI : CloudABI"
       
        Case $53    
          Debug "OSABI : Sortix"
         
      EndSelect

      Debug "ABIVersion : " + Str(Instance\ABIVersion)
   
;       For PaddingID = 0 To 6
;         Debug Instance\Padding[PaddingID]
;       Next
   
      Select Instance\eType
         
        Case 1   
          Debug "Type : relocatable"
         
        Case 2
          Debug "Type : executable"
         
        Case 3
          Debug "Type : Library"
         
        Case 4
          Debug "Type : Core"
         
      EndSelect
     
     
     
      Select Instance\eMachine
         
        Case $00    
          Debug "Machine : No specific instruction set"
         
        Case $02    
          Debug "Machine : SPARC"
         
        Case $03    
          Debug "Machine : x86"
         
        Case $08    
          Debug "Machine : MIPS"
         
        Case $14    
          Debug "Machine : PowerPC"
         
        Case $28    
          Debug "Machine : ARM"
         
        Case $2A    
          Debug "Machine : SuperH"
         
        Case $32    
          Debug "Machine : IA-64"
         
        Case $3E    
          Debug "Machine : x86-64"
         
        Case $B7    
          Debug "Machine : AArch64"
         
         
      EndSelect
     
     
         
      Debug "eVersion : " + Str(Instance\eVersion)
      Debug "eEntry : " + Str(Instance\eEntry)
      Debug "ePhOff : " + Str(Instance\ePhOff)
      Debug "eShOff : " + Str(Instance\eShOff)
      Debug "eFlag : " + Str(Instance\eFlag)
      Debug "eEhSize : " + Str(Instance\eEhSize)
      Debug "ePhEntSize : " + Str(Instance\ePhEntSize)
      Debug "ePhNum : " + Str(Instance\ePhNum)
      Debug "eShEntSize : " + Str(Instance\eShEntSize)
      Debug "eShNum : " + Str(Instance\eShNum)
      Debug "eShStrNdx : " + Str(Instance\eShStrNdx)
   
    EndProcedure

  CompilerEndIf

EndModule

DeclareModule ProgramHeader

  Declare ReadProgramHeader(FileID.i)

  CompilerIf #PB_Compiler_Debugger
    Declare Debugging()
  CompilerEndIf

EndDeclareModule

Module ProgramHeader

  Structure Instance

    Type.l
    Offset.l
    VAddr.l
    PAddr.l
    FileSize.l
    MemSize.l
    Flags.l
    Align.l

  EndStructure

  Global Instance.Instance

  Procedure ReadProgramHeader(FileID.i)
   
    Instance\Type = ReadLong(FileID)
    Instance\Offset = ReadLong(FileID)
    Instance\VAddr = ReadLong(FileID)
    Instance\PAddr = ReadLong(FileID)
    Instance\FileSize = ReadLong(FileID)
    Instance\MemSize = ReadLong(FileID)
    Instance\Flags = ReadLong(FileID)
    Instance\Align = ReadLong(FileID)
   
  EndProcedure

  CompilerIf #PB_Compiler_Debugger

    Procedure Debugging()
   
      Select Instance\Type
        Case $00000000    
          Debug "Type : PT_NULL"
        Case $00000001    
          Debug "Type : PT_LOAD"
        Case $00000002    
          Debug "Type : PT_DYNAMIC"
        Case $00000003    
          Debug "Type : PT_INTERP"
        Case $00000004    
          Debug "Type : PT_NOTE"
        Case $00000005    
          Debug "Type : PT_SHLIB"
        Case $00000006    
          Debug "Type : PT_PHDR"
         
        Case $60000000    
          Debug "Type : PT_LOOS"
        Case $6FFFFFFF    
          Debug "Type : PT_HIOS"
        Case $70000000    
          Debug "Type : PT_LOPROC"
        Case $7FFFFFFF    
          Debug "Type : PT_HIPROC"
         
      EndSelect
     
         
      Debug "Offset : " + Str(Instance\Offset)
      Debug "VAddr : " + Str(Instance\VAddr)
      Debug "PAddr : " + Str(Instance\PAddr)
      Debug "FileSize : " + Str(Instance\FileSize)
      Debug "MemSize : " + Str(Instance\MemSize)
      Debug "Flags : " + Str(Instance\Flags)
      Debug "Align : " + Str(Instance\Align)
   
    EndProcedure

  CompilerEndIf

EndModule

ExeFileName.s = OpenFileRequester("Select Exe to analyze", GetHomeDirectory(), "", 1)

If ExeFileName <> ""
 
  FileHandle = ReadFile(#PB_Any, ExeFileName)
 
  If FileHandle
    ELFHeader::ReadELFHeader(FileHandle)
    ProgramHeader::ReadProgramHeader(FileHandle)
    CloseFile(FileHandle)
    ELFHeader::Debugging()
    Debug ""
    ProgramHeader::Debugging()
  EndIf
 
EndIf

; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<


When I run the code above on an executable created with PB 5.50 x64 on Ubuntu Gnome 16.04 this what I got :

Quote:
Magic Number : 7F ELF
Class : 64-bit format
Endian : Little
Version : 1
OSABI : System V
ABIVersion : 0
Type : executable
Machine : x86-64
eVersion : 1
eEntry : 4211216
ePhOff : 64
eShOff : 137248
eFlag : 0
eEhSize : 64
ePhEntSize : 56
ePhNum : 9
eShEntSize : 64
eShNum : 28
eShStrNdx : 27

Type : PT_PHDR
Offset : 5
VAddr : 64
PAddr : 0
FileSize : 4194368
MemSize : 0
Flags : 4194368
Align : 0


And the same program compiled with PB 5.44 x64 on Ubuntu Gnome 16.10
Quote:
Magic Number : 7F ELF
Class : 64-bit format
Endian : Little
Version : 1
OSABI : System V
ABIVersion : 0
Type : Library
Machine : x86-64
eVersion : 1
eEntry : 20480
ePhOff : 64
eShOff : 214608
eFlag : 0
eEhSize : 64
ePhEntSize : 56
ePhNum : 9
eShEntSize : 64
eShNum : 29
eShStrNdx : 28

Type : PT_PHDR
Offset : 5
VAddr : 64
PAddr : 0
FileSize : 64
MemSize : 0
Flags : 64
Align : 0


So we have differences in both ELFHeader and ProgramHeader. But as far I can tell the ProgramHeader are for 32 bit program so I'm not 100% sure about that.

Best regards
StarBootics

_________________
The Stone Age did not end due to a shortage of stones !


Top
 Profile  
Reply with quote  
 Post subject: Re: PB5.44 - Compiled program flagged as Shared lib
PostPosted: Tue Nov 29, 2016 7:54 am 
Offline
Administrator
Administrator

Joined: Fri May 17, 2002 4:39 pm
Posts: 13304
Location: France
Could you give it a try to 5.43 to see if it's a regression ?


Top
 Profile  
Reply with quote  
 Post subject: Re: PB5.44 - Compiled program flagged as Shared lib
PostPosted: Tue Nov 29, 2016 9:55 am 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Sun Jul 07, 2013 11:35 am
Posts: 330
Location: Canada
Hello Fred,

With PB 5.42 and 5.43 I get a linker error : https://www.dropbox.com/s/56ogd435czs1toz/Linker_error.png?dl=0

Sorry to not help more than that. But apparently something change between Ubuntu 16.04 and 16.10 that screwed up PureBasic Big Time !

Best regards
StarBootics

_________________
The Stone Age did not end due to a shortage of stones !


Top
 Profile  
Reply with quote  
 Post subject: Re: PB5.44 - Compiled program flagged as Shared lib
PostPosted: Tue Dec 06, 2016 6:31 pm 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Sun Jul 07, 2013 11:35 am
Posts: 330
Location: Canada
Hello,

Not much new to say beside the problem is also present with PB 5.51 Beta 1.

Best regards
StarBootics

_________________
The Stone Age did not end due to a shortage of stones !


Top
 Profile  
Reply with quote  
 Post subject: Re: PB5.44 - PB 5.51B1 - Compiled program flagged as Shared
PostPosted: Thu Dec 08, 2016 3:37 pm 
Offline
User
User

Joined: Sun Jul 24, 2016 11:54 pm
Posts: 33
I have the same problem!
I was thinking, that was not a problem at first because of beta! I was thinking it will change after finish beta versions!
But nothing changed!
PureBasic v5.44 doesnt produce real executable on Ubuntu 16.10!
I am sure now this is a problem...


Top
 Profile  
Reply with quote  
 Post subject: Re: PB5.44 - PB 5.51B1 - Compiled program flagged as Shared
PostPosted: Mon Dec 12, 2016 7:52 am 
Offline
Administrator
Administrator

Joined: Fri May 17, 2002 4:39 pm
Posts: 13304
Location: France
After some investigation, this is a bug in Ubuntu 16.10

https://ubuntuforums.org/showthread.php?t=2341593

I tested myself with this small C program:

Code:
#include <stdio.h>

int main()
{
  printf("Hello\n");
  return 0;
}


compiled as

Code:
gcc prog.c -o a.out


result of 'file'

Code:
$ file a.out
a.out: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=675e42f7d8e14cd7192dbbf04cf452a7410f1696, not stripped


result of file for the purebasic exe compiled in Ubuntu 14.10 with the same PB compiler

Code:
$ file Desktop/purebasic/compilers/purebasic
Desktop/purebasic/compilers/purebasic: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=318cc52976319169b18da985abb3555c22d9b7c1, stripped


So there is a regression in Ubuntu and we need to wait for a patch


Top
 Profile  
Reply with quote  
 Post subject: Re: PB5.44 - PB 5.51B1 - Compiled program flagged as Shared
PostPosted: Mon Dec 12, 2016 1:10 pm 
Offline
Enthusiast
Enthusiast
User avatar

Joined: Sun Jul 07, 2013 11:35 am
Posts: 330
Location: Canada
Thanks for the info.

Best regards
StarBootics

_________________
The Stone Age did not end due to a shortage of stones !


Top
 Profile  
Reply with quote  
 Post subject: Re: PB5.44 - PB 5.51B1 - Compiled program flagged as Shared
PostPosted: Sun Dec 25, 2016 12:50 pm 
Offline
User
User

Joined: Sun Jul 24, 2016 11:54 pm
Posts: 33
Any solution?
Or just wait for Ubuntu update?


Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 28 posts ]  Go to page 1, 2  Next

All times are UTC + 1 hour


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  

 


Powered by phpBB © 2008 phpBB Group
subSilver+ theme by Canver Software, sponsor Sanal Modifiye