Question de prototype ...

Question de prototype ... - ASM - Programmation

Marsh Posté le 22-01-2003 à 09:21:22    

bien voila un extrait d'un code assembleur :

Code :
  1. 6F701204    33C0                  XOR EAX,EAX
  2. 6F701206    BB FFFFFFFF           MOV EBX,-1
  3. 6F70120B    C70424 04707B6F       MOV [DWORD SS:ESP],6F7B7004      ; ASCII "StringData"
  4. 6F701212    C74424 04 01000000    MOV [DWORD SS:ESP+4],1
  5. 6F70121A    C74424 08 09000000    MOV [DWORD SS:ESP+8],9
  6. 6F701222    894424 0C             MOV [DWORD SS:ESP+C],EAX
  7. 6F701226    894424 10             MOV [DWORD SS:ESP+10],EAX
  8. 6F70122A    C74424 14 0F707B6F    MOV [DWORD SS:ESP+14],6F7B700F   ; ASCII "DwordData"
  9. 6F701232    C74424 18 02000000    MOV [DWORD SS:ESP+18],2
  10. 6F70123A    894424 1C             MOV [DWORD SS:ESP+1C],EAX
  11. 6F70123E    C74424 20 09000000    MOV [DWORD SS:ESP+20],9
  12. 6F701246    894424 24             MOV [DWORD SS:ESP+24],EAX
  13. 6F70124A    C74424 28 19707B6F    MOV [DWORD SS:ESP+28],6F7B7019   ; ASCII "WordData"
  14. 6F701252    C74424 2C 03000000    MOV [DWORD SS:ESP+2C],3
  15. 6F70125A    894424 30             MOV [DWORD SS:ESP+30],EAX
  16. 6F70125E    C74424 34 0D000000    MOV [DWORD SS:ESP+34],0D
  17. 6F701266    894424 38             MOV [DWORD SS:ESP+38],EAX
  18. 6F70126A    C74424 3C 22707B6F    MOV [DWORD SS:ESP+3C],6F7B7022   ; ASCII "ByteData"
  19. 6F701272    C74424 40 04000000    MOV [DWORD SS:ESP+40],4
  20. 6F70127A    894424 44             MOV [DWORD SS:ESP+44],EAX
  21. 6F70127E    C74424 48 0F000000    MOV [DWORD SS:ESP+48],0F
  22. 6F701286    894424 4C             MOV [DWORD SS:ESP+4C],EAX
  23. 6F70128A    C74424 50 2B707B6F    MOV [DWORD SS:ESP+50],6F7B702B   ; ASCII "TLCData"
  24. 6F701292    C74424 54 09000000    MOV [DWORD SS:ESP+54],9
  25. 6F70129A    894424 58             MOV [DWORD SS:ESP+58],EAX
  26. 6F70129E    C74424 5C 10000000    MOV [DWORD SS:ESP+5C],10
  27. 6F7012A6    894424 60             MOV [DWORD SS:ESP+60],EAX
  28. 6F7012AA    C74424 64 33707B6F    MOV [DWORD SS:ESP+64],6F7B7033   ; ASCII "FLCData"
  29. 6F7012B2    C74424 68 09000000    MOV [DWORD SS:ESP+68],9
  30. 6F7012BA    894424 6C             MOV [DWORD SS:ESP+6C],EAX
  31. 6F7012BE    C74424 70 14000000    MOV [DWORD SS:ESP+70],14
  32. 6F7012C6    894424 74             MOV [DWORD SS:ESP+74],EAX
  33. 6F7012CA    C74424 78 3B707B6F    MOV [DWORD SS:ESP+78],6F7B703B   ; ASCII "End"
  34. 6F7012D2    894424 7C             MOV [DWORD SS:ESP+7C],EAX
  35. 6F7012D6    898424 80000000       MOV [DWORD SS:ESP+80],EAX
  36. 6F7012DD    898424 84000000       MOV [DWORD SS:ESP+84],EAX
  37. 6F7012E4    898424 88000000       MOV [DWORD SS:ESP+88],EAX
  38. 6F7012EB    6A 18                 PUSH 18
  39. 6F7012ED    68 50707B6F           PUSH 6F7B7050
  40. 6F7012F2    8D5C24 08             LEA EBX,[DWORD SS:ESP+8]
  41. 6F7012F6    53                    PUSH EBX
  42. 6F7012F7    68 3F707B6F           PUSH 6F7B703F                    ; ASCII "TestTable"
  43. 6F7012FC    50                    PUSH EAX
  44. 6F7012FD    E8 0CDD0A00           CALL 6F7515DD
  45. 6F701302    A3 00707B6F           MOV [DWORD DS:6F7B7000],EAX


 
Mon probleme est de retrouver le prototype de la fonction C ou C++ ayant amenée à ce code assembleur.
 
La fonction est appellé par CALL 6F7515DD et sa valeur de retour (un pointeur) ets récupéré par MOV [DWORD DS:6F7B7000],EAX.
 
J'ai beau essayé tout et npkoi ( fastcall,stdcall, fonction a argument variables ...) je n'arrive pas a reproduire ce code ...
 
Si quelqu'un a une idée ... Merci

Reply

Marsh Posté le 22-01-2003 à 09:21:22   

Reply

Marsh Posté le 22-01-2003 à 10:47:47    

on dirait le code typique généré par un compilateur Borland... valeur de retour stockée en DS au lieu d'EAX (bonjour l'optimisation : depuis quand un accés mémoire est plus rapide que la lecture d'un registre ?), etc...
 
ce serait du Delphi que ça m'étonnerait pas...


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 22-01-2003 à 18:43:11    

eheh et bien non
c du C compilé par Visual C++ 6.0 ...
 
Le truc de ESp me faisait penser soit a du va_arg
int mFonction( int, int, ...)
 
oua du passage par reference
 
mFoonction( int, int, Data& )
 
mais non c pas ca ... et le je seche ....

Reply

Marsh Posté le 22-01-2003 à 18:44:53    

:ouch: Ca c de la question :D


---------------
Le Tyran
Reply

Marsh Posté le 22-01-2003 à 18:47:19    

n'est ce pas moi c ame  :pt1cable:  :pt1cable:  
bref ...
 
foutu truc de reverse engineering ...
+1 point "jojo" a celui ki m'explique ca ...
 
 [:joel f]

Reply

Marsh Posté le 23-01-2003 à 23:20:18    

hmmm voila le plus pres que j'ai reussi a avoir :
 

Code :
  1. void* fonctionBizarre( int val, char* str, struct Data* data);
  2. void maFonction()
  3. {
  4.    struct Data* d = (struct Data*)malloc( 20*sizeof(struct Data));
  5.    /* Ici on remplit les structures
  6.       d[i].champ = ...;
  7.     */
  8.     fonctionBizarre( 20, "test", d);
  9. }


 
d'autres idéees ???

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed