Page 2 sur 3

Publié : mar. 09/août/2005 20:23
par nico
Sinon si vous avez des suggestions ou des remarques je suis preneur... Il manque les raccourcis (Ctrl+O et compagnie) donc c'est pas la peine de me le signaler ^^

Dri
Ben la particularité d'un DLL viewer pour Pure, ce serait la possibilité d'exporter les fonctions vers PB et à ce sujet, y' en a un qui a pris de l'avance.

Voir le Topic:
http://forums.purebasic.com/english/vie ... hp?t=16179

Publié : mar. 09/août/2005 21:12
par Dr. Dri
Exporter les fonctions, pour le coup j'ai pas trop compris... J'ai testé le prog mais je n'ai pas tout compris... C'est genre pour en faire une lib et n'avoir qu'à utiliser le nom de la fonction directement sans callfunction ?
Dans ce cas je vois pas l'intérêt, y'a dllimporter dans les tool du pure pour faire ca. (y'a juste à ajouter un _ comme les api)

Par contre dans l'optique "viewer" ce programme est très intéressant car il montre qu'on peut connaitre le nombre de paramètres d'une fonction e le type d'appel. Donc quand je rentre de vacances la semaine prochaine je cherche de la doc là dessus !

Dri ^^

Publié : lun. 15/août/2005 14:35
par Dr. Dri
Lionel_om m'a fait remarquer que quand on clique sur une icône pour la copier ds le presse papier, il ne se passe rien... Je vais donc ajouter un "ding" pour confirmer la copie...

Dri ^^

PS. Si quelqu'un a une piste pour connaître le nombre d'arguments d'une dll je suis preneur...

Publié : mer. 26/oct./2005 16:14
par Chris
Dr. Dri a écrit :Si quelqu'un a une piste pour connaître le nombre d'arguments d'une dll je suis preneur...
Au cas ou, j'ai trouvé un bout de code sur CodeArchiv.
J'ai récupéré l'essentiel, j'ai viré l'interface en "klingon", (c'est de l'autre côté du Rhin, la Klingonie :roll: ) et je sors les noms et le nombre de paramètres en "Debug".

Le problème avec ce bout de code, c'est que par moment, le nombre de paramètres qu'il annonce ne correspond pas au descriptions du SDK.

J'ai beau chercher, je ne vois pas ce qui cloche.

Si c'est toujours d'actualité, et que tu veux y jeter un oeil, tu auras peut-être plus de chance que moi.

Voilà le code:

Code : Tout sélectionner

Procedure BadName(Name.s) 
  Result=0 
  If FindString(UCase(Name.s),"DLLENTRYPOINT",1):Result=-1:EndIf 
  If FindString(UCase(Name.s),"DLLCANUNLOADNOW",1):Result=-1:EndIf 
  If FindString(UCase(Name.s),"DLLGETCLASSOBJECT",1):Result=-1:EndIf 
  If FindString(UCase(Name.s),"DLLREGISTERSERVER",1):Result=-1:EndIf 
  If FindString(UCase(Name.s),"DLLUNREGISTERSERVER",1):Result=-1:EndIf 
  If UCase(Name.s)="ATTACHPROCESS":Result=-1:EndIf 
  If UCase(Name.s)="DETACHPROCESS":Result=-1:EndIf 
  If UCase(Name.s)="ATTACHTHREAD":Result=-1:EndIf 
  If UCase(Name.s)="DETACHTHREAD":Result=-1:EndIf 
  If UCase(Name.s)="DLLINITIALIZE":Result=-1:EndIf 
  If Len(Name.s)>100:Result=-1:EndIf 
  If Left(Name.s,1)="?":Result=-1:EndIf 
  If UCase(Name.s)="DUMMY":Result=-1:EndIf 
  ProcedureReturn Result 
EndProcedure 

Procedure.l hex2dec(h$)
  h$ = UCase(h$)
  For r = 1 To Len(h$)
    d << 4 : a$ = Mid(h$, r, 1)
    If Asc(a$) > 60
      d + Asc(a$) - 55
    Else
      d + Asc(a$) - 48
    EndIf
  Next
  ProcedureReturn d
EndProcedure

Procedure GetNumberOfParam(Pointer)
  Repeat
    Pointer = DisASMCommand(Pointer)
    ASM_Code.s = UCase(GetDisASMString())
  Until FindString(ASM_Code.s,"RET",1)

  Bytes = hex2dec(Right(ASM_Code.s,Len(ASM_Code.s) -4))
  If Bytes %4 Or Bytes >200 : Bytes = -1 : EndIf
  If Bytes >= 0 : Bytes = Bytes >> 2 : EndIf

  ProcedureReturn Bytes
EndProcedure

Inst = OpenLibrary(1,"user32.dll")

If ExamineLibraryFunctions(1)
  While NextLibraryFunction()<>0

    Name.s = LibraryFunctionName()
    Addr = LibraryFunctionAddress()

    Param = GetNumberOfParam(Addr)
    If BadName(Name) <> -1
      Debug Name+" "+Str(Param)
    EndIf
    
  Wend
EndIf
Pour le code original, c'est dans "CodeArchiv\Other\Programming_Tools" et ça s'appelle "PBL-Creator.pb"

(Si tu veux le code, je le poste aussi, m'en fous moi :lol: )

Publié : mer. 26/oct./2005 16:18
par Dr. Dri
ah bah ca c'est sympa, je jetterai un coup d'oeil

Dri :D

Publié : dim. 15/janv./2006 15:25
par wolfjeremy
Sa avait l'air bien ton programme mais bon j'ai esseyer avec plein de dll et j'ai toujour des erreur différentes... dommage :cry:

Publié : lun. 23/janv./2006 20:01
par Twix
C'est super !! ça se revele très pratique pour quand on veut utiliser une DLL ou quand on veut en faire une

Publié : lun. 23/janv./2006 20:08
par Dr. Dri
@wolfjeremy
T'as quoi comme erreurs ?

Ca me fait penser que je pourrais le finir en attendant la V4 ^^

Dri :)

Publié : mer. 25/janv./2006 13:11
par wolfjeremy
Dr. Dri a écrit :@wolfjeremy
T'as quoi comme erreurs ?

Ca me fait penser que je pourrais le finir en attendant la V4 ^^

Dri :)
Plein de sorte d'erreur sa varie suivant la dll... :cry:

Publié : mer. 25/janv./2006 14:23
par Dr. Dri
bah "plein de sorte" ca ne m'aide pas... Donne moi des exemple (dll + message d'erreur) stp et je regarderais

Dri ;)

Publié : sam. 22/juil./2006 14:19
par Flype
Dr Dri, STP, le lien est mort :puppydogeyes:

Publié : jeu. 27/juil./2006 18:53
par Dr. Dri
clic droit -> enregistrer sous
(ca fait longtemps que ca fonctionne comme ca)

[edit]
comme y'a des gens qui l'utilisent je me suis dit que je pourrais peut etre faire une ptite mise à jour (genre le recoder en V4 pour commencer) et la premiere chose que je vois dans les sources, c'est un message pour moi-même :lol:

Voila les questions que je me pose:
Dans certains fichiers je trouve des noms de fonctions un peu exotiques. Comment je dois l'interpréter ? Coment appeller ces fonctions ? Quelles sont les syntaxes autorisées pour les noms des fonctions ?

dans le fichier AegisE5.dll, les noms des fonctions sont sous la forme @fonction@8
je comprend bien le @8 (deux arguments) mais pourquoi le nom de la fonction commence par un @ ?

pire encore, dans le fichier narrhook.dll on peut voir des choses comme ?fonction@@YG ou ?fonction@@YGHZ@@GHIIT

peut être un bug de PB ? Il me semble que PB utilise des fonctions de kernel32.dll (LoadLibrary_, GetProcAddress_ etc importées statiquement) pour gérer les bibliothèques externes donc je doute un peu...

Dri :mad:

Publié : jeu. 27/juil./2006 20:05
par Flype
C'est pas un bug de PB,

qu'on m'arrête si je me trompe :D
mais ce sont bel et bien le nom de ces fonctions
et elles doivent être appelées comme telles.

Idées à rajouter dans ta TODO list :

. Pouvoir ouvrir une dll par drag'n'drop.
. Générer le code PB4.0 nécessaire à l'ouverture de la DLL.

Code généré par ex. :

Code : Tout sélectionner

Prototype BringWindowToTop(a.l)
Prototype GetSystemMetrics(a.l)

Procedure.l USER32()
  
  Protected __USER32__ = OpenLibrary(#PB_Any, "user32.dll")
  
  If __USER32__
    Global BringWindowToTop.BringWindowToTop = GetFunction(__USER32__, "BringWindowToTop")
    Global GetSystemMetrics.GetSystemMetrics = GetFunction(__USER32__, "GetSystemMetrics")
  EndIf
  
  ProcedureReturn __USER32__
  
EndProcedure

Publié : jeu. 27/juil./2006 20:40
par Anonyme2
Il existe dans certaines dll MS de nombreuses fonctions non documentées, certainement utilisées en interne par des API.

Il doit y avoir des fonctions très intéressantes mais ...

Publié : ven. 28/juil./2006 19:47
par Dr. Dri
Bon bah je vais partir sur cette base et passer le code en V4 (et pis ajouter le Drag n Drop =)

D'ici demain une maj que j'hébergerait sur purestorage pour plus de simplicité.

[edit]
pas besoin d'attendre demain pour la mise à jour, ca a été plus vite que je ne pensais. même pas un quart d'heure pour passer le code en V4, ajouter le support du drag n drop (comme je l'avais déjà fait pour Destroyer) et ajouter le nombre de params des fonctions (j'avais la fonction remaniée à ma sauce de côté)

Le lien est dans le premier message

Dri :D