PureBasic

Forums PureBasic
Nous sommes le Ven 22/Nov/2019 17:02

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 17 messages ]  Aller à la page 1, 2  Suivante
Auteur Message
 Sujet du message: Moebius - Bug de chaîne
MessagePosté: Ven 01/Juil/2011 11:17 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2659
Localisation: France > Rennes
Bonjour, j'ai un petit bug en ASM avec Droopy.

Lorsque je génère avec Moebius une userlib, le résultat escompté n'est pas le résultat fourni.
Ainsi j'attends
Code:
PureBasic_Compilation0

Et j'obtiens
Code:
C:\Documents and Settings\flefevre\Local Settings\Temp\PureBasic_Compilation0.exePureBasic_Compilation0


Code de la librairie
Code:
ProcedureDLL.s GetFilePartWE(file.s) ; Return only file part without extension
  file.s=ReverseString(GetFilePart(file))
  file=Right(file,Len(file)-FindString(file,".",1))
  file=ReverseString(file)
  ProcedureReturn file
EndProcedure


Code de test
Code:
Debug GetFilePartWE(ProgramFilename())


Code ASM
Code:
format MS COFF

public PB_GetFilePartWE

extrn _PB_FindString2@12
extrn _PB_GetFilePart@8
extrn _PB_Len@4
extrn _PB_ReverseString@8
extrn _PB_Right@12
extrn _PB_StringBasePosition
extrn _S1
extrn _SYS_AllocateString4@8
extrn _SYS_CopyString@0
extrn _SYS_FreeString@4
extrn PB_StringBase
extrn SYS_FastAllocateString

_Procedure0:
PB_GetFilePartWE:
PUSH   ebx
PS0=12
XOR    eax,eax
PUSH   eax
MOV    edx,dword [esp+PS0+0]
LEA    ecx,[esp+0]
CALL   SYS_FastAllocateString
MOV    eax,[_PB_StringBasePosition]
PUSH   eax
PUSH   eax
MOV    eax,[_PB_StringBasePosition]
PUSH   eax
PUSH   eax
PUSH   dword [esp+16]
CALL  _PB_GetFilePart@8
MOV    edx,[PB_StringBase]
ADD    [esp+0],edx
CALL  _PB_ReverseString@8
LEA    eax,[esp+4]
PUSH   eax
CALL  _SYS_AllocateString4@8
MOV    eax,[_PB_StringBasePosition]
PUSH   eax
PUSH   eax
PUSH   dword [esp+8]
CALL  _PB_Len@4
MOV    ebx,eax
PUSH   dword 1
PUSH   dword _S1
PUSH   dword [esp+16]
CALL  _PB_FindString2@12
SUB    ebx,eax
PUSH   ebx
PUSH   dword [esp+12]
CALL  _PB_Right@12
LEA    eax,[esp+4]
PUSH   eax
CALL  _SYS_AllocateString4@8
MOV    eax,[_PB_StringBasePosition]
PUSH   eax
PUSH   eax
PUSH   dword [esp+8]
CALL  _PB_ReverseString@8
LEA    eax,[esp+4]
PUSH   eax
CALL  _SYS_AllocateString4@8
MOV    edx,dword [esp]
PUSH   dword [_PB_StringBasePosition]
CALL  _SYS_CopyString@0
POP    eax
ADD    eax,[PB_StringBase]
JMP   _EndProcedure1
MOV    eax,[_PB_StringBasePosition]
ADD    eax,[PB_StringBase]
MOV    byte [eax],0
_EndProcedure1:
PUSH   dword [esp]
CALL  _SYS_FreeString@4
ADD    esp,4
POP    ebx
RET    4 + 4



Package de test : http://dl.free.fr/e43Aimr7D
Testé avec PB 4.6 B3

Merci d'avance de votre aide pour faire avancer Moebius.

_________________
Librairies & Applications : https://www.purebasic.fr/french/viewtopic.php?f=8&t=6220
Site Web : https://rootslabs.net


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Moebius - Bug de chaîne
MessagePosté: Ven 01/Juil/2011 11:52 
Hors ligne

Inscription: Lun 26/Avr/2004 0:40
Messages: 14535
sous XP ça fonctionne !
a partir de l'editeur .. (sans utiliser Moebius)
Code:
ProcedureDLL.s GetFilePartWE(file.s) ; Return only file part without extension
      file.s=ReverseString(GetFilePart(file))
      file=Right(file,Len(file)-FindString(file,".",1))
      file=ReverseString(file)
      ProcedureReturn file
EndProcedure

Debug GetFilePartWE(ProgramFilename())


retourne :

Citation:
Purebasic10


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Moebius - Bug de chaîne
MessagePosté: Ven 01/Juil/2011 14:00 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2659
Localisation: France > Rennes
Ouaip, j'avais vu (mais pas dit :?). Par contre, dés que l'on passe sous Moebius, cela ne marche pas.

_________________
Librairies & Applications : https://www.purebasic.fr/french/viewtopic.php?f=8&t=6220
Site Web : https://rootslabs.net


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Moebius - Bug de chaîne
MessagePosté: Ven 01/Juil/2011 16:14 
Hors ligne

Inscription: Lun 26/Avr/2004 0:40
Messages: 14535
Progi1984 a écrit:
Ouaip, j'avais vu (mais pas dit :?). Par contre, dés que l'on passe sous Moebius, cela ne marche pas.


t'a testé avec Tailbite ??

si ça marche avec Tailbite faudrai regarder l'assembleur generé par Tailbite
et voir ou ça peche ... ;)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Moebius - Bug de chaîne
MessagePosté: Ven 01/Juil/2011 20:50 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 19/Juil/2004 22:31
Messages: 1151
tailbite a le même soucis, la question a déjà été posée sur le forum us, sans réponse :x :(

_________________
DroopyLib/PBFastLib/HMod


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Moebius - Bug de chaîne
MessagePosté: Ven 01/Juil/2011 21:18 
Hors ligne

Inscription: Lun 26/Avr/2004 0:40
Messages: 14535
cette procedure

Code:
ProcedureDLL.s GetFilePartWE(file.s) ; Return only file part without extension
      file.s=ReverseString(GetFilePart(file))
      file=Right(file,Len(file)-FindString(file,".",1))
      file=ReverseString(file)
      ProcedureReturn file
EndProcedure


donne

Code:

;
; PureBasic 4.51 (Windows - x86) generated code
;
; (c) 2010 Fantaisie Software
;
; The header must remain intact for Re-Assembly
;
; String
; FileSystem
; Date
; Object
; SimpleList
; :System
; KERNEL32
; :Import
;
format MS COFF
;
extrn _ExitProcess@4
extrn _GetModuleHandleA@4
extrn _HeapCreate@12
extrn _HeapDestroy@4
;
extrn _PB_FindString@12
extrn _PB_GetFilePart@8
extrn _PB_Len@4
extrn _PB_ReverseString@8
extrn _PB_Right@12
extrn _memset
extrn _SYS_CopyString@0
extrn _SYS_AllocateString4@8
extrn SYS_FastAllocateString
extrn _SYS_FreeString@4
extrn _PB_StringBase
extrn PB_StringBase
extrn _SYS_InitString@0
;
extrn _PB_StringBasePosition
public _PB_Instance
public _PB_ExecutableType
public _PB_MemoryBase
public PB_Instance
public PB_MemoryBase
public _PB_EndFunctions

macro pb_public symbol
{
  public  _#symbol
  public symbol
_#symbol:
symbol:
}

macro    pb_align value { rb (value-1) - ($-_PB_DataSection + value-1) mod value }
macro pb_bssalign value { rb (value-1) - ($-_PB_BSSSection  + value-1) mod value }
public PureBasicStart
;
section '.code' code readable executable align 8
;
;
PureBasicStart:
;
  PUSH   dword I_BSSEnd-I_BSSStart
  PUSH   dword 0
  PUSH   dword I_BSSStart
  CALL  _memset
  ADD    esp,12
  PUSH   dword 0
  CALL  _GetModuleHandleA@4
  MOV    [_PB_Instance],eax
  PUSH   dword 0
  PUSH   dword 4096
  PUSH   dword 0
  CALL  _HeapCreate@12
  MOV    [PB_MemoryBase],eax
  CALL  _SYS_InitString@0
;
; ProcedureDLL.s GetFilePartWE(file.s) ; Return only file part without extension
macro MP0{
_Procedure0:
  PUSH   ebx
  PS0=12
  XOR    eax,eax
  PUSH   eax                                                                                                                                                                                                                 
  MOV    edx,dword [esp+PS0+0]
  LEA    ecx,[esp+0]
  CALL   SYS_FastAllocateString
; file.s=ReverseString(GetFilePart(file))
  MOV    eax,[_PB_StringBasePosition]
  PUSH   eax
  PUSH   eax
  MOV    eax,[_PB_StringBasePosition]
  PUSH   eax
  PUSH   eax
  PUSH   dword [esp+16]
  CALL  _PB_GetFilePart@8
  MOV    edx,[PB_StringBase]
  ADD    [esp+0],edx
  CALL  _PB_ReverseString@8
  LEA    eax,[esp+4]
  PUSH   eax
  CALL  _SYS_AllocateString4@8
; file=Right(file,Len(file)-FindString(file,".",1))
  MOV    eax,[_PB_StringBasePosition]
  PUSH   eax
  PUSH   eax
  PUSH   dword [esp+8]
  CALL  _PB_Len@4
  MOV    ebx,eax
  PUSH   dword 1
  PUSH   dword _S1
  PUSH   dword [esp+16]
  CALL  _PB_FindString@12
  SUB    ebx,eax
  PUSH   ebx
  PUSH   dword [esp+12]
  CALL  _PB_Right@12
  LEA    eax,[esp+4]
  PUSH   eax
  CALL  _SYS_AllocateString4@8
; file=ReverseString(file)
  MOV    eax,[_PB_StringBasePosition]
  PUSH   eax
  PUSH   eax
  PUSH   dword [esp+8]
  CALL  _PB_ReverseString@8
  LEA    eax,[esp+4]
  PUSH   eax
  CALL  _SYS_AllocateString4@8
; ProcedureReturn file
  MOV    edx,dword [esp]
  PUSH   dword [_PB_StringBasePosition]
  CALL  _SYS_CopyString@0
  POP    eax
  ADD    eax,[PB_StringBase]
  JMP   _EndProcedure1
; EndProcedure
  MOV    eax,[_PB_StringBasePosition]
  ADD    eax,[PB_StringBase]
  MOV    byte [eax],0
_EndProcedure1:
  PUSH   dword [esp]
  CALL  _SYS_FreeString@4
  ADD    esp,4
  POP    ebx
  RET    4
}
;
;
_PB_EOP_NoValue:
  PUSH   dword 0
_PB_EOP:
  CALL  _PB_EndFunctions
  PUSH   dword [PB_MemoryBase]
  CALL  _HeapDestroy@4
  CALL  _ExitProcess@4
_PB_EndFunctions:
  RET
;
MP0
;
section '.data' data readable writeable
;
_PB_DataSection:
pb_public PB_DEBUGGER_LineNumber
  dd     -1
pb_public PB_DEBUGGER_IncludedFiles
  dd     0
pb_public PB_DEBUGGER_FileName
  db     0
_PB_ExecutableType: dd 0
public _SYS_StaticStringStart
_SYS_StaticStringStart:
_S1: db ".",0
pb_public PB_NullString
  db     0
public _SYS_StaticStringEnd
_SYS_StaticStringEnd:
align 4
align 4
s_s:
  dd     0
  dd     -1
align 4
;
section '.bss' readable writeable
_PB_BSSSection:
align 4
;
I_BSSStart:
_PB_MemoryBase:
PB_MemoryBase: rd 1
_PB_Instance:
PB_Instance: rd 1
;
align 4
PB_DataPointer rd 1
align 4
align 4
align 4
align 4
I_BSSEnd:
section '.data' data readable writeable
SYS_EndDataSection:




par Purebasic

y a t'il des differences par rapport a ton code Ass de Moebius ?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Moebius - Bug de chaîne
MessagePosté: Ven 01/Juil/2011 22:40 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4312
Localisation: Clermont ferrand OU Olsztyn
Salut, essai en séparant bien toutes tes commandes sur les strings, c'est souvent la cause, TailBite compris, comme cela :
Code:
ProcedureDLL.s GetFilePartWE(file.s) ; Return only file part without extension
   file.s = GetFilePart(file)
   file = ReverseString(file)
   file = Right(file, Len(file) - FindString(file, ".", 1))
   file = ReverseString(file)
   ProcedureReturn file
EndProcedure

_________________
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Moebius - Bug de chaîne
MessagePosté: Sam 02/Juil/2011 9:03 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 19/Juil/2004 22:31
Messages: 1151
Ce problème se produit sur ce type de fonctions :
- Fonctions (compilées avec tailbite ou Moebius) qui acceptent une chaine en entrée et renvoient une chaine en sortie.
--> Ces fonctions ne peuvent en appeler d'autres (bug chaine entrée concaténée avec celle de sortie)

Comme le soldat l'indique, le contournement est d'utiliser une variable tampon qui stocke le retour de la première fonction, qui est ensuite utilisée comme entrée de la seconde fonction.

Ce bug est apparu avec PureBasic 4 (aucun bug avec la 3.94)

Si quelqu'un pouvait se pencher sur le code asm ce serait cool :wink:

_________________
DroopyLib/PBFastLib/HMod


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Moebius - Bug de chaîne
MessagePosté: Lun 04/Juil/2011 12:50 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2659
Localisation: France > Rennes
@Dobro :
Je confirme la réponse de Droopy. Même problème avec TailBite.

@Le Soldat Inconnu :
Après tests, cela provoque toujours le même bogue.

@All :
Je plussoie Droopy pour la demande concernant la demande pour le bogue de concaténation de chaînes en ASM.

_________________
Librairies & Applications : https://www.purebasic.fr/french/viewtopic.php?f=8&t=6220
Site Web : https://rootslabs.net


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Moebius - Bug de chaîne
MessagePosté: Lun 04/Juil/2011 21:30 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 19/Juil/2004 22:31
Messages: 1151
je plussoie aussi (ça veut dire quoi au fait ?) :lol:

_________________
DroopyLib/PBFastLib/HMod


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Moebius - Bug de chaîne
MessagePosté: Mer 06/Juil/2011 16:02 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2659
Localisation: France > Rennes
plussoyer : (Néologisme) Donner, signaler son accord. Abonder dans le sens de quelqu'un, souscrire à ses propos.

Lien : http://fr.wiktionary.org/wiki/plussoyer
Lien : http://fr.wiktionary.org/wiki/plussoir

_________________
Librairies & Applications : https://www.purebasic.fr/french/viewtopic.php?f=8&t=6220
Site Web : https://rootslabs.net


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Moebius - Bug de chaîne
MessagePosté: Lun 25/Juil/2011 14:14 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2659
Localisation: France > Rennes
Quelqu'un a une idée ?

_________________
Librairies & Applications : https://www.purebasic.fr/french/viewtopic.php?f=8&t=6220
Site Web : https://rootslabs.net


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Moebius - Bug de chaîne
MessagePosté: Lun 22/Aoû/2011 8:35 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2659
Localisation: France > Rennes
Je reviens vers vous, en essayant de motiver les foules.

Celui qui réussira à trouver une solution avec explication et aide pour intégration dans Moebius, qui aura été validé par Droopy & Moi, se verra récompensé de 10 € (des vrais...) de ma poche.

_________________
Librairies & Applications : https://www.purebasic.fr/french/viewtopic.php?f=8&t=6220
Site Web : https://rootslabs.net


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Moebius - Bug de chaîne
MessagePosté: Lun 22/Aoû/2011 9:40 
Hors ligne

Inscription: Lun 26/Avr/2004 0:40
Messages: 14535
Tu vas devoir les donner a Fred , car a part lui
je vois pas comment on va pouvoir trouver une solution ... :wink:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Moebius - Bug de chaîne
MessagePosté: Lun 22/Aoû/2011 11:11 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 14/Déc/2004 13:56
Messages: 2659
Localisation: France > Rennes
On ne sait jamais si l'un des utilisateurs trouve une solution... , car Fred avait parlé d'une solution mais pas de nouvelles depuis le 28/05/2008.

_________________
Librairies & Applications : https://www.purebasic.fr/french/viewtopic.php?f=8&t=6220
Site Web : https://rootslabs.net


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 17 messages ]  Aller à la page 1, 2  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


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 à:  
cron

 


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