PB5.44 - PB 5.51B1 - Compiled program flagged as Shared lib
- StarBootics
- Addict
- Posts: 984
- Joined: Sun Jul 07, 2013 11:35 am
- Location: Canada
PB5.44 - PB 5.51B1 - Compiled program flagged as Shared lib
Hello everyone,
Compiled program are flagged to be Shared libraries by the operating system.
https://www.dropbox.com/s/b5ocg471ydlb8 ... b.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
Compiled program are flagged to be Shared libraries by the operating system.
https://www.dropbox.com/s/b5ocg471ydlb8 ... b.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
Last edited by StarBootics on Tue Dec 06, 2016 6:31 pm, edited 1 time in total.
The Stone Age did not end due to a shortage of stones !
Re: PB5.44 - Compiled program flagged as Shared lib
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
in which case it'd be easy enough to patch at least in the meantime!? ...
(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 )
https://en.wikipedia.org/wiki/Executabl ... ble_Format
offset 0x10 (2 bytes) "e_type" 1=relocatable, 2=executable, 3=shared, 4=core
Code: Select all
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")
Code: Select all
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
-
- Addict
- Posts: 2228
- Joined: Mon Jun 02, 2003 9:16 am
- Location: Germany
- Contact:
Re: PB5.44 - Compiled program flagged as Shared lib
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?[...] flagged to be Shared libraries by the operating system
bye,
Daniel
Daniel
- StarBootics
- Addict
- Posts: 984
- Joined: Sun Jul 07, 2013 11:35 am
- Location: Canada
Re: PB5.44 - Compiled program flagged as Shared lib
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 ?DarkDragon wrote: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?[...] flagged to be Shared libraries by the operating system
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 !
- StarBootics
- Addict
- Posts: 984
- Joined: Sun Jul 07, 2013 11:35 am
- Location: Canada
Re: PB5.44 - Compiled program flagged as Shared lib
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 :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?
Unfortunately, patching the Executable make the patched program no longer launchable. There is something else somewhere to patch as well.Library
Best regards
StarBootics
The Stone Age did not end due to a shortage of stones !
Re: PB5.44 - Compiled program flagged as Shared lib
It's probably a detect error from your filemanager as PB executable are real executables.
- StarBootics
- Addict
- Posts: 984
- Joined: Sun Jul 07, 2013 11:35 am
- Location: Canada
Re: PB5.44 - Compiled program flagged as Shared lib
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.Fred wrote:It's probably a detect error from your filemanager as PB executable are real executables.
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 !
- StarBootics
- Addict
- Posts: 984
- Joined: Sun Jul 07, 2013 11:35 am
- Location: Canada
Re: PB5.44 - Compiled program flagged as Shared lib
Hello everyone,
Sorry for the long following code but I'm investigating ...
When I run the code above on an executable created with PB 5.50 x64 on Ubuntu Gnome 16.04 this what I got :
Best regards
StarBootics
Sorry for the long following code but I'm investigating ...
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; 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 <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
And the same program compiled with PB 5.44 x64 on Ubuntu Gnome 16.10Magic 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
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.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
Best regards
StarBootics
The Stone Age did not end due to a shortage of stones !
Re: PB5.44 - Compiled program flagged as Shared lib
Could you give it a try to 5.43 to see if it's a regression ?
- StarBootics
- Addict
- Posts: 984
- Joined: Sun Jul 07, 2013 11:35 am
- Location: Canada
Re: PB5.44 - Compiled program flagged as Shared lib
Hello Fred,
With PB 5.42 and 5.43 I get a linker error : https://www.dropbox.com/s/56ogd435czs1t ... r.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
With PB 5.42 and 5.43 I get a linker error : https://www.dropbox.com/s/56ogd435czs1t ... r.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 !
- StarBootics
- Addict
- Posts: 984
- Joined: Sun Jul 07, 2013 11:35 am
- Location: Canada
Re: PB5.44 - Compiled program flagged as Shared lib
Hello,
Not much new to say beside the problem is also present with PB 5.51 Beta 1.
Best regards
StarBootics
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 !
Re: PB5.44 - PB 5.51B1 - Compiled program flagged as Shared
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...
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...
Re: PB5.44 - PB 5.51B1 - Compiled program flagged as Shared
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:
compiled as
result of 'file'
result of file for the purebasic exe compiled in Ubuntu 14.10 with the same PB compiler
So there is a regression in Ubuntu and we need to wait for a patch
https://ubuntuforums.org/showthread.php?t=2341593
I tested myself with this small C program:
Code: Select all
#include <stdio.h>
int main()
{
printf("Hello\n");
return 0;
}
Code: Select all
gcc prog.c -o a.out
Code: Select all
$ 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: Select all
$ 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
- StarBootics
- Addict
- Posts: 984
- Joined: Sun Jul 07, 2013 11:35 am
- Location: Canada
Re: PB5.44 - PB 5.51B1 - Compiled program flagged as Shared
Thanks for the info.
Best regards
StarBootics
Best regards
StarBootics
The Stone Age did not end due to a shortage of stones !
Re: PB5.44 - PB 5.51B1 - Compiled program flagged as Shared
Any solution?
Or just wait for Ubuntu update?
Or just wait for Ubuntu update?