traduction asm -> c++

Tout sur les langages de programmation.

traduction asm -> c++

Messagepar KNETUS » 20 Avril 2007, 09:22

bonjour
je viens de me mettre au c++
je programmais en asm avant

je voudrais savoir comment peut on faire ceci en c++
(surtout la fonction assume qui m'interesse

Code: Tout sélectionner
test  STRUCT
    next           DWORD ?
test  ENDS
 
invoke  GlobalLock, current
assume eax:ptr test
mov     [eax].next, edx



merci pour vos reponses
ICU Team
KNETUS
 
Messages: 3
Inscription: 18 Avril 2006, 16:53
Localisation: Teamicu.org

Messagepar skirby » 20 Avril 2007, 10:19

Tu déclares simplement ta structure :
Code: Tout sélectionner
struct MyTest {
  long next;
} test;

Puis tu y accède de cette façon :
Code: Tout sélectionner
test.next = 1;


J'espère avoir répondu à ta question.
skirby
Dieu du cracking
Dieu du cracking
 
Messages: 2160
Inscription: 29 Novembre 2004, 09:53

Messagepar KNETUS » 20 Avril 2007, 11:11

j'ai du mal m'exprimer !
je cherche a avoir la structure sur une zone spécifié:


par exemple mapper un fichier et lui infliger la structure :

Code: Tout sélectionner
mov esi, Fichier_Mapper
assume esi:ptr IMAGE_DOS_HEADER
mov MZAdress, esi
add esi, [esi].e_lfanew
assume esi:ptr IMAGE_NT_HEADERS
movzx ecx, [esi].FileHeader.SizeOfOptionalHeader


j'espere avoir été plus clair !!!
merci pour ton aide quand même !!!
ICU Team
KNETUS
 
Messages: 3
Inscription: 18 Avril 2006, 16:53
Localisation: Teamicu.org

Messagepar Squallsurf » 20 Avril 2007, 12:40

Tu peut utiliser les structures de windows :)

Tu map ton fichier et tu mets le résultat de MapViewOfFile (par exemple) dans une variable debut_fichier déclaré comme ceci

Code: Tout sélectionner
IMAGE_DOS_HEADER debut_fichier;


Ensuite, tu peut acceder par n'importe quel membre de cette structure graçe à '->' et '.'

Voici un tout piti code qui te permet d'afficher le e_magic du fichier précédemment mappé (pas de superflux :p)
Code: Tout sélectionner
int main (int argc, char *argv[]) {
  PIMAGE_DOS_HEADER debut_fichier;
  char *MZ_signature;
  HANDLE pMaped;
 

  load_and_map_file; //je map mon fichier. Cette fonction retourne le résultat de MapViewOfFile soit le handle vers le début du fichier
  debut_fichier=(PIMAGE_DOS_HEADER)pMaped;
  MZ_signature=debut_fichier->e_magic;
  printf("MZ Signature (e_magic) : %s\n", &MZ_signature);
  fin;//fonction pour demapper le fichier et quitter
}


En espérant t'avoir aider :)


Amicalement, Squallsurf
Dernière édition par Squallsurf le 20 Avril 2007, 13:02, édité 1 fois.
w00tz
Avatar de l’utilisateur
Squallsurf
King of Cracking
King of Cracking
 
Messages: 848
Inscription: 27 Février 2006, 16:14

Messagepar skirby » 20 Avril 2007, 12:57

Ok, je n'avais pas bien compris la question.

Le code de Squallsurf devrait faire le boulot en effet (sauf qu'il faut supprimer le & devant MZ_signature je pense)
skirby
Dieu du cracking
Dieu du cracking
 
Messages: 2160
Inscription: 29 Novembre 2004, 09:53

Messagepar Squallsurf » 20 Avril 2007, 13:01

non skirby, sinon ça affiche la mort :D
Mon code n'est pas propre, il y a des cast non 'régulier' :P

Ah oui, PIMAGE_DOS_HEADER est un pointeur vers la structure IMAGE_DOS_HEADER ;)


Amicalement, Squallsurf
w00tz
Avatar de l’utilisateur
Squallsurf
King of Cracking
King of Cracking
 
Messages: 848
Inscription: 27 Février 2006, 16:14

Messagepar skirby » 20 Avril 2007, 13:29

C'est bizarre ton truc.
D'ailleurs, je ne sais même pas comment il fait pour fonctionner ton printf.

MZ_signature est un char* dans normalement il suffirait de mettre printf("... %s ...", MZ_signature).
Dans ton cas, tu demandes à afficher l'adresse du char*, ce qui ne me semble pas très normal.

Ensuite, dans le cas des chaines de caractères, printf s'arrête sur le zéro terminal '\0'
Or, on ne sait même pas où se trouve le zéro terminal.
En effet, e_magic est un DWORD.
Il me semblerait plus logique d'avoir un truc du genre :
Code: Tout sélectionner
DWORD dw_signature;
dw_signature=debut_fichier->e_magic;
printf("MZ Signature (e_magic) : %s\n", itoa(dw_signature));


Qu'en penses-tu ?
skirby
Dieu du cracking
Dieu du cracking
 
Messages: 2160
Inscription: 29 Novembre 2004, 09:53

Messagepar baboon » 20 Avril 2007, 13:31

cherche pas skirby ....
Squallsurf programme comme je patche ...
:p
Newbie mais ayant soif d'apprendre et étant motivé
Avatar de l’utilisateur
baboon
Modérateur
Modérateur
 
Messages: 3347
Inscription: 08 Juillet 2005, 17:49

Messagepar Squallsurf » 20 Avril 2007, 15:49

ouai baboon :p

Skriby, je te promet que ça fonctionne :)

output a écrit:[*]File cible.exe maped sucessfully
Dos Stub Signature : MZ
NT header Signature : PE


Bien sur, j'ai tiré le bout de code d'avant de ce programme (l'outpt n'est pas complet bien sur :)
Mon fichier est mappé et celon "ma" méthode, voici l'affichage du e_magic

Enfaite, après le e_magic j'ai, par chance, quelques octets vides (dans tout les programmes que j'ai testé jusqu'à maintenant) donc ma méthode fonctionne mais n'est très pas belle.

Je vais modifier ça par ce que tu proposes :)



Amicalement, Squallsurf
w00tz
Avatar de l’utilisateur
Squallsurf
King of Cracking
King of Cracking
 
Messages: 848
Inscription: 27 Février 2006, 16:14

Messagepar skirby » 20 Avril 2007, 16:21

C'est bien ce que disait baboon, tu programmes comme il patch :lol:
Je déconne bien sûr :wink:
skirby
Dieu du cracking
Dieu du cracking
 
Messages: 2160
Inscription: 29 Novembre 2004, 09:53

Messagepar KNETUS » 25 Avril 2007, 22:09

merci a tous pour les solutions !! :D
ICU Team
KNETUS
 
Messages: 3
Inscription: 18 Avril 2006, 16:53
Localisation: Teamicu.org

Messagepar virtualabs » 26 Avril 2007, 08:53

@Squallsurf: gcc powered. C'est pour ca que ca fonctionne "quand même". GCC est *trop* souple au niveau des pointeurs. Par exemple si tu lances ce petit code :

Code: Tout sélectionner
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv)
{
   char szBuffer[256];
   
   printf("Entrez un texte :");
   scanf("%s",&szBuffer); // osef du bof ;)

   printf("Vous avez tapé : %s\n",szBuffer); // tadaaaa !
   return 0;
}


bah ca fonctionne, alors que passer &szBuffer en argument de scanf devrait poser pb (char ** au lieu de char *), normalement ca mène à une erreur d'access violation lorsqu'on affiche ce qui a été tapé.
Image
Avatar de l’utilisateur
virtualabs
Serials Killer
Serials Killer
 
Messages: 451
Inscription: 15 Février 2005, 16:40
Localisation: Caen - 14


Retourner vers Programmation

Qui est en ligne

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