PureBasic

Forums PureBasic
Nous sommes le Ven 24/Mai/2013 12:23

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 65 messages ]  Aller à la page 1, 2, 3, 4, 5  Suivante
Auteur Message
 Sujet du message: FASMer un ASM
MessagePosté: Mar 11/Nov/2008 14:46 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2656
Localisation: France > Basse-Normandie > Prés de Caen
Slt à tous,

travaillant sur mon projet de créateur d'userlibs multiplateforme, j'aurais besoin d'un coup de main coté FASM.

Quand j'essaie de compiler le fichier ASM suivant :
Code:
;
; PureBasic x86 4.20 (Linux - x86) - generated code
;
; (c) 2008 Fantaisie Software
;
; The header must remain intact for Re-Assembly
;
; :System
; :Import
;
format ELF
;
extrn exit
;
extrn memset
extrn SYS_FastAllocateString
extrn SYS_FreeString
extrn _PB_StringBase
extrn PB_StringBase
extrn SYS_InitString
;
extrn PB_StringBasePosition

macro pb_public symbol
{
_#symbol:
symbol:
}

;
;
section '.text' executable
;
public PB_FunctionTest
public PB_FunctionTest_bis
public PB_FunctionTest_tris

macro MP0{
_Procedure0:
FunctionTest:
  PS0=4                                                                                                                                                                                                                                                     
; ProcedureReturn PrimParam
  MOV    eax,dword [esp+PS0+0]
  JMP   _EndProcedure1
; EndProcedure
  XOR    eax,eax
_EndProcedure1:
  RET    4
}
; ProcedureDLL FunctionTest_bis(PrimParam.l, TestSecundo.s)
macro MP2{
_Procedure2:
FunctionTest_bis:
  PS2=8
  XOR    eax,eax
  PUSH   eax                                                                                                                                                                                                                             
  MOV    edx,dword [esp+PS2+4]
  LEA    ecx,[esp+0]
  CALL   SYS_FastAllocateString
; ProcedureReturn PrimParam
  MOV    eax,dword [esp+PS2+0]
  JMP   _EndProcedure3
; EndProcedure
  XOR    eax,eax
_EndProcedure3:
  PUSH   dword [esp]
  CALL   SYS_FreeString
  ADD    esp,4
  RET    8
}
; Procedure PrivFunctionTest(PrimParam.l)
macro MP4{
_Procedure4:
  PS4=4                                                                                                                                                                                                                                                     
; ProcedureReturn PrimParam
  MOV    eax,dword [esp+PS4+0]
  JMP   _EndProcedure5
; EndProcedure
  XOR    eax,eax
_EndProcedure5:
  RET    4
}
; ProcedureDLL FunctionTest_tris(PrimParam.l, TestSecundo.s, ThirdParam.b)
macro MP6{
_Procedure6:
FunctionTest_tris:
  PS6=8
  XOR    eax,eax
  PUSH   eax                                                                                                                                                                                                                             
  MOV    edx,dword [esp+PS6+4]
  LEA    ecx,[esp+0]
  CALL   SYS_FastAllocateString
; ProcedureReturn PrimParam
  MOV    eax,dword [esp+PS6+0]
  JMP   _EndProcedure7
; EndProcedure
  XOR    eax,eax
_EndProcedure7:
  PUSH   dword [esp]
  CALL   SYS_FreeString
  ADD    esp,4
  RET    12
}
_PB_EOP:
_PB_EOP_NoValue:
  CALL   PB_EndFunctions
  PUSH   dword [PB_ExitCode]
  CALL   exit
PB_EndFunctions:
  RET
;
MP0
MP2
MP6
section '.data' writeable
PB_DEBUGGER_LineNumber: dd -1
PB_DEBUGGER_IncludedFiles: dd 0
_SYS_StaticStringStart:
pb_public PB_NullString
  db     0
_SYS_StaticStringEnd:
align 4
align 4
s_s:
  dd     0
  dd     -1
align 4
;
_PB_BSSSection:
align 4
;
I_BSSStart:
PB_MemoryBase:  rd 1
PB_ArgC:  rd 1
PB_ArgV:  rd 1
PB_ExitCode:  rd 1
align 4
PB_DataPointer rd 1
align 4
align 4
align 4
align 4
I_BSSEnd:
section '.data' writeable
SYS_EndDataSection:


Avec la ligne de commande :
Code:
fasm  "/home/franklin/Bureau/DD_PureBasic/Proj_Moebius/Lib_Source/Sample_00 Project/Moebius_Sample_00.asm" "/home/franklin/Bureau/DD_PureBasic/Proj_Moebius/Lib_Source/Sample_00 Project/Sample_00.o"


Cela me retourne un code d'erreur que je n'arrive pas à régler et cela me bloque car malheureusement cela ne génère aucun fichier .O :
Code:
flat assembler  version 1.67.18  (16384 kilobytes memory)
/home/franklin/Bureau/DD_PureBasic/Proj_Moebius/Lib_Source/Sample_00 Project/Moebius_Sample_00.asm [34]:
public PB_FunctionTest
error: undefined symbol.


Pourriez vous m'aider ?
Merci d'avance

_________________
Moebius : Doc FR / EN - Moebius 1.0


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 11/Nov/2008 15:28 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3311
Je n'ai pas vraiment travailler Fasm pour linux mais les conventions PB doivent être les mêmes entre windows et linux.

Je pense que ton problème vient de la :

Tu as 3 déclarations public ce qui veut dire que les 3 fonctions seront accessibles de l'extérieur, c'est le principe des librairies.

Elles sont déclarées comme ceci dans ton code :
Citation:
public PB_FunctionTest
public PB_FunctionTest_bis
public PB_FunctionTest_tris


Tu doit donc retrouver 3 étiquettes ou labels avec le même nom dans ton code. PB ajoute le sigle 'PB_' devant les noms de fonctions pour éviter les problèmes avec des libs utilisateur, c'est la convention PB en asm mais la fonction en PB ne comportera pas le 'PB_'

Corrige déjà ceci, après la ligne

Citation:
_Procedure0:


change
Citation:
FunctionTest:
par
Citation:
PB_FunctionTest:


Fait de même pour les 2 autres fonctions public respectivent après les lignes

Citation:
_Procedure2:
et
Citation:
_Procedure6:

_________________
Documentation GDI + 1.0 PB 4.30 beta 4 et supérieur
PureIconManager


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 11/Nov/2008 16:13 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2656
Localisation: France > Basse-Normandie > Prés de Caen
Nickel, parfait !

Ca tombe nickel et j'arrive quasiment à la fin !

_________________
Moebius : Doc FR / EN - Moebius 1.0


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 11/Nov/2008 17:32 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2656
Localisation: France > Basse-Normandie > Prés de Caen
Petite interrogation :
Peux tu m'en expliquer un peu plus sur ce point :
Citation:
Tu doit donc retrouver 3 étiquettes ou labels avec le même nom dans ton code. PB ajoute le sigle 'PB_' devant les noms de fonctions pour éviter les problèmes avec des libs utilisateur, c'est la convention PB en asm mais la fonction en PB ne comportera pas le 'PB_'


Dois je ou non mettre 'PB_' devant les noms des fonctions ou pas ?

_________________
Moebius : Doc FR / EN - Moebius 1.0


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 11/Nov/2008 17:42 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3311
Si ta fonction que tu vas appeler en PB s'appelle par exemple

Code:
Fonction1
en assembleur, elle sera déclarée comme ceci en Public

Code:
PB_Fonction1


et ensuite dans le fichier asm, il faudra écrire le code de cette fonction.

le compilateur retrouvera le début de la fonction avec l'étiquette
Code:
PB_Fonction1 :


C'est la convention PB telle que décrite dans le fichier Readme.txt du dossier Purebasic Library SDK

Citation:
General notes:

- A PureFunction name declaration begin always by 'PB_' (ex: PB_Right, PB_Left...)

_________________
Documentation GDI + 1.0 PB 4.30 beta 4 et supérieur
PureIconManager


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 11/Nov/2008 17:52 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2656
Localisation: France > Basse-Normandie > Prés de Caen
Nickel, cela a réglé un de mes problèmes. Merci beaucoup :)

Par contre, j'ai un autre problème à régler :
Le fichier ASM :
Code:
;
;
;
; PureBasic x86 4.20 (Linux - x86) - generated code
;
; (c) 2008 Fantaisie Software
;
; The header must remain intact for Re-Assembly
;
; :System
; :Import
;
format ELF
;
extrn exit
;
extrn memset
extrn SYS_FastAllocateString
extrn SYS_FreeString
extrn _PB_StringBase
extrn PB_StringBase
extrn SYS_InitString
;
extrn PB_StringBasePosition

macro pb_public symbol
{
_#symbol:
symbol:
}

;
;
section '.text' executable
;
public PB_FunctionTest
public PB_FunctionBis
public PB_FunctionTrisTest

macro MP0{
_Procedure0:
PB_FunctionTest:
PS0=4
; ProcedureReturn PrimParam
MOV    eax,dword [esp+PS0+0]
JMP   _EndProcedure1
; EndProcedure
XOR    eax,eax
_EndProcedure1:
RET    4
}
; ProcedureDLL FunctionBis(PrimParam.l, TestSecundo.s)
macro MP2{
_Procedure2:
PB_FunctionBis:
PS2=8
XOR    eax,eax
PUSH   eax
MOV    edx,dword [esp+PS2+4]
LEA    ecx,[esp+0]
CALL   SYS_FastAllocateString
; ProcedureReturn PrimParam
MOV    eax,dword [esp+PS2+0]
JMP   _EndProcedure3
; EndProcedure
XOR    eax,eax
_EndProcedure3:
PUSH   dword [esp]
CALL   SYS_FreeString
ADD    esp,4
RET    8
}
; Procedure FunctionTestPriv(PrimParam.l)
macro MP4{
_Procedure4:
PS4=4
; ProcedureReturn PrimParam
MOV    eax,dword [esp+PS4+0]
JMP   _EndProcedure5
; EndProcedure
XOR    eax,eax
_EndProcedure5:
RET    4
}
; ProcedureDLL FunctionTrisTest(PrimParam.l, TestSecundo.s, ThirdParam.b)
macro MP6{
_Procedure6:
PB_FunctionTrisTest:
PS6=8
XOR    eax,eax
PUSH   eax
MOV    edx,dword [esp+PS6+4]
LEA    ecx,[esp+0]
CALL   SYS_FastAllocateString
; ProcedureReturn PrimParam
MOV    eax,dword [esp+PS6+0]
JMP   _EndProcedure7
; EndProcedure
XOR    eax,eax
_EndProcedure7:
PUSH   dword [esp]
CALL   SYS_FreeString
ADD    esp,4
RET    12
}
; IDE Options = PureBasic 4.20 (Linux - x86)
; CursorPosition = 6
; Folding = -
; EnableXP
;
_PB_EOP:
_PB_EOP_NoValue:
CALL   PB_EndFunctions
PUSH   dword [PB_ExitCode]
CALL   exit
PB_EndFunctions:
RET
;
MP2
MP0
MP6
section '.data' writeable
PB_DEBUGGER_LineNumber: dd -1
PB_DEBUGGER_IncludedFiles: dd 0
_SYS_StaticStringStart:
pb_public PB_NullString
db     0
_SYS_StaticStringEnd:
align 4
align 4
s_s:
dd     0
dd     -1
align 4
;
_PB_BSSSection:
align 4
;
I_BSSStart:
PB_MemoryBase:  rd 1
PB_ArgC:  rd 1
PB_ArgV:  rd 1
PB_ExitCode:  rd 1
align 4
PB_DataPointer rd 1
align 4
align 4
align 4
align 4
I_BSSEnd:
section '.data' writeable
SYS_EndDataSection:


L'erreur :
Titre : Linker error
Code:
Sample_00.o: In function 'PB_FunctionTest':
(.text+0x36): multiple definition of 'PB_FunctionTest'

_________________
Moebius : Doc FR / EN - Moebius 1.0


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 11/Nov/2008 18:12 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3311
Cette erreur, c'est lorsque tu compiles avec PB ?

Si c'est le cas, as-tu utilisé Tailbite pour linux ? Si oui, il es possible qu'une librairie existe déjà (peut-être sous un nom différent) avec cette fonction déclarée.

Ou tu as peut-être créé un lib avec un nom de fonction identique.

Si ce n'est pas le cas, je sèche pour l'instant.

_________________
Documentation GDI + 1.0 PB 4.30 beta 4 et supérieur
PureIconManager


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 11/Nov/2008 18:36 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2656
Localisation: France > Basse-Normandie > Prés de Caen
Cette erreur, c'est lorsque j'essaie de compiler ce code suivant sous PureBasic :
Code:
Debug FunctionTest(2345)


En fait, je travaille sur un Tailbite pour Linux & Windows.

_________________
Moebius : Doc FR / EN - Moebius 1.0


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 11/Nov/2008 18:53 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3311
Je ne vois pas pour l'instant mis à part un librairie existante avec les mêmes noms de commande.

Juste une idée comme ça

essaie de recompiler en supprimant les 3 lignes de déclaration (avec le mot public) et de mettre le mot Public devant chaque étiquette.
et fait de nouveaux essais.

As-tu regardé dans le dossier des libs utilisateurs si tu avais une lib que tu aurais créée pendant tes essais et qui pourrait contenir le même nom de commande ?

Sous linux, il existe un fichier descripteur .desc comme sous WIndows ?

_________________
Documentation GDI + 1.0 PB 4.30 beta 4 et supérieur
PureIconManager


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 11/Nov/2008 19:25 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2656
Localisation: France > Basse-Normandie > Prés de Caen
Denis a écrit:
Je ne vois pas pour l'instant mis à part un librairie existante avec les mêmes noms de commande.

As-tu regardé dans le dossier des libs utilisateurs si tu avais une lib que tu aurais créée pendant tes essais et qui pourrait contenir le même nom de commande ?

Je n'ai pas d'autres libs a part celle là : Sample_00.

Denis a écrit:
Juste une idée comme ça

essaie de recompiler en supprimant les 3 lignes de déclaration (avec le mot public) et de mettre le mot Public devant chaque étiquette.
et fait de nouveaux essais.?

Quand j'essaie ca, un message d'erreur apparait :
Code:
Can't open the main .o : /home/franklin/Bureau/DD_PureBasic/Proj_Moebius/Lib_Source/Sample_00 Project/Sample_00.o


J'ai meme essayé sans aucune déclaration 'public', mais en laissant l'étiquette :
Message d'erreur
Code:
purebasic.o: In function 'main':
(.text+0x40): undefined reference to PB_FunctionTest'


Denis a écrit:
Sous linux, il existe un fichier descripteur .desc comme sous WIndows ?
Oui
Code:
ASM
0
OBJ
0
Sample_00
FunctionTest, Long (PrimParam.l) -
Long | StdCall
FunctionBis, Long, String (PrimParam.l,TestSecundo.s) -
Long | StdCall
FunctionTrisTest, Long, String, Byte (PrimParam.l,TestSecundo.s,ThirdParam.b) -
Long | StdCall

_________________
Moebius : Doc FR / EN - Moebius 1.0


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 11/Nov/2008 20:24 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3311
Je viens de parcourir le code et de réfléchir à l'erreur.

Places les 3 déclarations Public avant la ligne définissant la section de code executable, je pense que l'erreur se situe là (c'est des déclaration et pas du code) , ce qui donne ça

Citation:
public PB_FunctionTest
public PB_FunctionBis
public PB_FunctionTrisTest


section '.text' executable

_________________
Documentation GDI + 1.0 PB 4.30 beta 4 et supérieur
PureIconManager


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 11/Nov/2008 21:41 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2656
Localisation: France > Basse-Normandie > Prés de Caen
Malheureusement cela ne change rien :( au niveau du message d'erreur.

Voici l'ASM :
Code:
;
;
;
; PureBasic x86 4.20 (Linux - x86) - generated code
;
; (c) 2008 Fantaisie Software
;
; The header must remain intact for Re-Assembly
;
; :System
; :Import
;
format ELF
;
extrn exit
;
extrn memset
extrn SYS_FastAllocateString
extrn SYS_FreeString
extrn _PB_StringBase
extrn PB_StringBase
extrn SYS_InitString
;
extrn PB_StringBasePosition

macro pb_public symbol
{
_#symbol:
symbol:
}

;
;
public PB_FunctionTest
public PB_FunctionBis
public PB_FunctionTrisTest

section '.text' executable
;
macro MP0{
_Procedure0:
PB_FunctionTest:
PS0=4
; ProcedureReturn PrimParam
MOV    eax,dword [esp+PS0+0]
JMP   _EndProcedure1
; EndProcedure
XOR    eax,eax
_EndProcedure1:
RET    4
}
; ProcedureDLL FunctionBis(PrimParam.l, TestSecundo.s)
macro MP2{
_Procedure2:
PB_FunctionBis:
PS2=8
XOR    eax,eax
PUSH   eax
MOV    edx,dword [esp+PS2+4]
LEA    ecx,[esp+0]
CALL   SYS_FastAllocateString
; ProcedureReturn PrimParam
MOV    eax,dword [esp+PS2+0]
JMP   _EndProcedure3
; EndProcedure
XOR    eax,eax
_EndProcedure3:
PUSH   dword [esp]
CALL   SYS_FreeString
ADD    esp,4
RET    8
}
; Procedure FunctionTestPriv(PrimParam.l)
macro MP4{
_Procedure4:
PS4=4
; ProcedureReturn PrimParam
MOV    eax,dword [esp+PS4+0]
JMP   _EndProcedure5
; EndProcedure
XOR    eax,eax
_EndProcedure5:
RET    4
}
; ProcedureDLL FunctionTrisTest(PrimParam.l, TestSecundo.s, ThirdParam.b)
macro MP6{
_Procedure6:
PB_FunctionTrisTest:
PS6=8
XOR    eax,eax
PUSH   eax
MOV    edx,dword [esp+PS6+4]
LEA    ecx,[esp+0]
CALL   SYS_FastAllocateString
; ProcedureReturn PrimParam
MOV    eax,dword [esp+PS6+0]
JMP   _EndProcedure7
; EndProcedure
XOR    eax,eax
_EndProcedure7:
PUSH   dword [esp]
CALL   SYS_FreeString
ADD    esp,4
RET    12
}
; IDE Options = PureBasic 4.20 (Linux - x86)
; CursorPosition = 6
; Folding = -
; EnableXP
;
_PB_EOP:
_PB_EOP_NoValue:
CALL   PB_EndFunctions
PUSH   dword [PB_ExitCode]
CALL   exit
PB_EndFunctions:
RET
;
MP2
MP0
MP6
PB_DEBUGGER_LineNumber: dd -1
PB_DEBUGGER_IncludedFiles: dd 0
_SYS_StaticStringStart:
pb_public PB_NullString
db     0
_SYS_StaticStringEnd:
align 4
align 4
s_s:
dd     0
dd     -1
align 4
;
_PB_BSSSection:
align 4
;
I_BSSStart:
PB_MemoryBase:  rd 1
PB_ArgC:  rd 1
PB_ArgV:  rd 1
PB_ExitCode:  rd 1
align 4
PB_DataPointer rd 1
align 4
align 4
align 4
align 4
I_BSSEnd:
SYS_EndDataSection:

_________________
Moebius : Doc FR / EN - Moebius 1.0


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 11/Nov/2008 21:45 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3311
Ha :cry:

Je regarderais encore demain

_________________
Documentation GDI + 1.0 PB 4.30 beta 4 et supérieur
PureIconManager


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 11/Nov/2008 21:48 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3311
TU as une idée de ce que fait la macro symbol ?

Elle doit changer un symbol par un autre

supprimes la pour voir et recompile

_________________
Documentation GDI + 1.0 PB 4.30 beta 4 et supérieur
PureIconManager


Haut
 Profil  
 
 Sujet du message:
MessagePosté: Mar 11/Nov/2008 21:54 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2656
Localisation: France > Basse-Normandie > Prés de Caen
Si je la supprime, lors de la compilation de FASM->O
Code:
franklin@novatux-laptop:~$ fasm  "/home/franklin/Bureau/DD_PureBasic/Proj_Moebius/Lib_Source/Sample_00 Project/Moebius_Sample_00.asm" "/home/franklin/Bureau/DD_PureBasic/Proj_Moebius/Lib_Source/Sample_00 Project/Sample_00.o"
flat assembler  version 1.67.18  (16384 kilobytes memory)
/home/franklin/Bureau/DD_PureBasic/Proj_Moebius/Lib_Source/Sample_00 Project/Moebius_Sample_00.asm [121]:
pb_public PB_NullString
error: illegal instruction.


Encore merci de ton aide :)

_________________
Moebius : Doc FR / EN - Moebius 1.0


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 65 messages ]  Aller à la page 1, 2, 3, 4, 5  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye