begin process at 2012 05 25 02:19:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

c, c++ et asm

 > 

Aidez moi à traduire une petite fonction assembleur en C (API Windows)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Aidez moi à traduire une petite fonction assembleur en C (API Windows)

dimanche 17 avril 2005 à 22:43:28 | Aidez moi à traduire une petite fonction assembleur en C (API Windows)

skirby

Bonjour à tous,

J'essaye désespérément de traduire une fonction ASM en C. Le but de cette fonction est de pouvoir utiliser une ressource compilé dans mon exécutable.
Ce n'est pas moi qui ai écrit cette fonction en assembleur mais elle fonctionne très bien.

Voici la fonction en question :

    INVOKE GetModuleHandle, NULL
    mov hInstance, eax

    ; Charge et utilise une resource
    push esi
    INVOKE FindResource, hInstance, RESOURCE_FILE, RT_RCDATA
    push eax
    INVOKE SizeofResource, hInstance, eax
    mov nResourceSize, eax
    pop eax
    INVOKE LoadResource, hInstance, eax
    INVOKE LockResource, eax
    mov esi, eax
    mov eax, nResourceSize
    add eax, SIZEOF nResourceSize
    INVOKE GlobalAlloc, GPTR, eax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    mov pResource, eax
    mov ecx, nResourceSize
    mov dword ptr [eax], ecx
    add eax, SIZEOF nResourceSize
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    mov edi, eax
    rep movsb   ; peut être remplacé par ;INVOKE RtlMoveMemory,edi,esi,nResourceSize
    pop esi
    INVOKE UseResource, pResource

Voici ce que j'ai pu écrire en C mais cela ne semble pas fonctionner :

HINSTANCE g_hInst;
LPVOID pMusic, pMusicTmp;

g_hInst = hThisInstance;  // Provient de mon WinMain
HRSRC res = FindResource(g_hInst, MAKEINTRESOURCE(XM_FILE), RT_RCDATA);
DWORD nResourceSize = SizeofResource(g_hInst, res);
HGLOBAL loadRes = LoadResource(g_hInst, res);
LPVOID lockRes = LockResource(loadRes);
pResourceTmp = pResource = GlobalAlloc(GPTR, nResourceSize + sizeof(nResourceSize));
pResourceTmp = (void*)(nResourceSize);
MoveMemory(&pResource + sizeof(nResourceSize), lockRes, nResourceSize);
UseResource(pResource);

C'est la partie assembleur délimité par des ; qui me pose des problèmes. Je ne sais pas comment l'écrire en C.

Merci d'avance pour votre aide car la je galère vraiment
lundi 18 avril 2005 à 14:42:07 | Re : Aidez moi à traduire une petite fonction assembleur en C (API Windows)

ToutEnMasm

Salut,
les ; il n'y a pas de quoi fouetter un chat si on ne peut pas les traduire.
Ce sont des commentaires,les suprimer ou les passer sur une ligne ne comportant que des commentaires.
// commentaires
Je doute un peu des = emboités =.
Le ; en C marque la fin d'une instruction
Pas de {} marquant des proc ?
                winmain { avec le
                                  code dedans}.
Je ne suis pas une référence en C,peut être que sur le forum du C ?
                 ToutEnMasm
lundi 18 avril 2005 à 17:24:06 | Re : Aidez moi à traduire une petite fonction assembleur en C (API Windows)

skirby

Salut ToutEnMasm,

je sais bien que les ; sont des commentaires. J'ai mis dans mon message:
C'est la partie assembleur délimité par des ; qui me pose des problèmes. Je ne sais pas comment l'écrire en C.

Les = emboités, je ne doute pas dessus.

En fait, j'aimerais simplement avoir l'équivalent du code entre les ;;;; en C
C'est surtout la commande: mov dword ptr [eax], ecx qui me pose problème car en C, la fonction LockResource retourne un LPVOID donc un pointeur.
Comment accéder à la valeur pointée d'un pointeur pour la modifier ???
lundi 25 avril 2005 à 12:42:36 | Re : Aidez moi à traduire une petite fonction assembleur en C (API Windows)

patatalo

Membre Club Administrateur CodeS-SourceS
salut,

tu n'as pas besoin de la traduire, c fait automatiquement
par (&pResource + sizeof(nResourceSize)).

@++
lundi 25 avril 2005 à 12:44:21 | Re : Aidez moi à traduire une petite fonction assembleur en C (API Windows)

patatalo

Membre Club Administrateur CodeS-SourceS
re,

en c, tu fait ( *monpointeur = ma valeur );
en asm, tu fait ( mov [monpointeur],valeur );

@++


Cette discussion est classée dans : fonction, mov, invoke, eax, nresourcesize


Répondre à ce message

Sujets en rapport avec ce message

Une mémoire "read" [ par msteve ] Bonsoir, Je suis débutant et j'ai recopié un programme test. Je parviens à l'assembler, puis à créer un .exe ; quend je lance l'exe j'obtiens la boîte afficher une image jpeg avec la fonction StretchDIBits ? [ par mitch19 ] bonjour, j'essaye depuis quelques temps d'afficher une image jpeg avecla commande  StretchDIBits, en vain ! mon programme plante lamentablement !Si qu Recherche de fichier recursif [ par maximus4 ] Bonjour, j'ai la procédure suivante pour la recherche récursive, le résultat est stocké dans un fichier texte. [code=autre]invoke CreateFile,offset fi out bmp [ par vincent2795 ] Bonjour, dans ma source, j' essaye de faire un screenshot, et de le nommer pas la date et l' heure ou il es pris. mon problème: si le nom du fichier e comment utiliser une chaine de caractères stockée dans un fichier ressource ? [ par parki ] Bonjour,je n'arrive pas à utiliser une chaine de caractère stockée dans un fichier ressources. (je sais qu'on peut s'en passer mais j'aime bien compre [linux] read and open [ par sheorogath ] Bonjour,je débute un peu en assembleur et j'essaie de faire un programme qui lit le début d'un fichier dont le nom est entré par l'utilisateur.Voici l conversion en syntaxe intel [ par marooh ] bonjour, j'ai un code écrit en syntaxe at&t et je veux le rendre en syntaxe intel.si vous pouvez bien m'aider... voici le code Project title : m Proj Aligner des données pour le SSE [ par epineurien ] Bonjour à tous !J'ai un petit problème avec du code dont je mesure la vitesse: suivant la compilation, la vitesse varie du simple au double .J'expliqu inverser une chaine [ par MrdJack ] salut, je suis sur un projet de calculatrice me permettant de faire des calculs avec des nombres tres grands. chaque nombre est stocké dans la memoire j'ai un prob avec mon buffer ; ya pas d'amuses gueules (masm32) [ par papiboff ] bj si je mets le buffer "somme " en dd avec charge eax et que j'ajoute deux 'dec ebx ' , ben , marche pas correctement ; (pêrqué ???? = en french) sv


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 7,753 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales