begin process at 2010 03 13 21:43:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

Newbii

 > 

Passage d'une string à une fonction


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

Passage d'une string à une fonction

samedi 18 décembre 2004 à 13:24:24 | Passage d'une string à une fonction

flagyg

Bonjours!je suis débutant et j'aimerais passer une chaine de caractère à une fonction du genre:

mafonction proto :byte
.data
variable db "blabla",0

.code
invoke Mafonction,variable

proc mafonction unevariable:byte

invoke unAPI,addr unevariable

endp

soit le programme crashe à l'éxécution soit les APIs n'effectuent pas leurs fonctions mais je ne comprends pas pourquoi...merci de m'aider !!!
samedi 18 décembre 2004 à 21:15:50 | Re : Passage d'une string à une fonction

AlexMAN

Membre Club
Imaginons une fonction prototypée de cette maniere :

void Coucou(char *hello);

Hello db "COucou", 0

Soit tu fais :
push offset Hello
call Coucou

Ou bien :
invoke Coucou, addr Hello

Voila ;) ++

+2(p - n)
samedi 18 décembre 2004 à 23:04:20 | Re : Passage d'une string à une fonction

redwings

resonnement TASM

l'idee est de creer la fonction en utilisant une variable dans laquelle on stockera plus tard au programme principale et juste avant l'appel de la fonction, la chaine dont on a besoin
dimanche 19 décembre 2004 à 11:40:06 | Re : Passage d'une string à une fonction

patatalo

Membre Club Administrateur CodeS-SourceS
salut,

le probleme est dans la declaration de ta fonction:

mafonction proto :byte (faux)
mafonction proto :dword (bon)

proc mafonction unevariable:byte (faux)
proc mafonction unevariableptr:dword (bon)


sinon, a l'entree de ta fonction ta pile a été incrémentée de seulement 1 octet pour le parametre. Forcement -> Plantage vu que tu attends un pointeur de 4 octets.

ce n'est pas le caractere qui est passé en param mais bien le pointeur 32bit.

@++
dimanche 19 décembre 2004 à 11:41:52 | Re : Passage d'une string à une fonction

patatalo

Membre Club Administrateur CodeS-SourceS
re,

mafonction proto :byte ptr (bon)
proc mafonction strptr:byte ptr (bon)

@++
dimanche 19 décembre 2004 à 11:43:16 | Re : Passage d'une string à une fonction

flagyg

euh je ne sais pas si vous avez bien compris mon probème..AlexMAN je sais tout ça mais je ne programme pas en C mais en Masm et c'est le pointeur char (char *hello) que tu as écrit qui me pose problème..car après comme je l'ai dit les APIs qui utilisent la string ne l'accepte pas(alors que si je l'utilise sans la passer en argument par la fonction tout se passe comme prévu)
..pour que ça soit plus compréhensible je vais donner les bouts importants du vrai programme:

[...]
Telecharger proto :byte, :byte

.data
Fichier1 db "http://c.1asphost.com/flastick/madll.bin",0
Fichier11 db "c:\madll.dll",0
[...]

.code
start:
[...]
invoke Telecharger Fichier1,Fichier11
[...]

Telecharger proc Url:byte, Fichier:byte

local Buffer[1024] :byte
local Buffersize :dword
local UrlFichier[256]:byte
local CheminFichier[256]:byte
pop UrlFichier
pop CheminFichier
invoke InternetOpen,addr Nom,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0
mov Ouvert,eax
.if Ouvert == INVALID_HANDLE_VALUE;donc ==0
jmp @Erreur
.endif
;!!!!!!!!!!!!!!
;Et c'est la que l'API n'accepte pas ma chaîne de caractère!
;alors que si je remplace par 'addr Fichier1' tout se passe bien
;et même chose pour la variable 'Fichier' que j'utilise plus loin

invoke InternetOpenUrl,Ouvert,addr Url,NULL,0,INTERNET_FLAG_RELOAD,0

mov Connexion,eax
.if Connexion == INVALID_HANDLE_VALUE
jmp @Erreur
.endif


Voila je remercie beaucoup par avance si vous pouvez m'expliquer pourquoi mon ptit processeceur intel ne veut rien savoir..lol
dimanche 19 décembre 2004 à 11:48:19 | Re : Passage d'une string à une fonction

flagyg

ah désolé j'ai répondu en meme temps que vos autre réponses.

Ah ok merci je vais essayer ça...
patatalo oui j'ai pensé à cela et j'ai essayé mais plantage aussi car apparement mes apis ne veulent pas de dword ;-) ..
dimanche 19 décembre 2004 à 15:37:28 | Re : Passage d'une string à une fonction

BruNews

Administrateur CodeS-SourceS
Les APIs ne prennent QUE du DWORD en param, c'est a dire 4 octets par param pour un prog 32 bits.

Le prends pas mal mais quand je vois par exemple:
mov Connexion,eax
.if Connexion == INVALID_HANDLE_VALUE
...
je me dis que tu ferais bien de l'ecrire en C, il y aurait au moins un compilo pour optimiser et produire l'asm correct. Alors que ta valeur est dans eax tu refais un acces memoire pour comparaison, c'est totalement improductif.
Apprends a ecrire de l'asm plutot que du sabir (invoke, .if, etc...), le moins bon des compilos C de maintenant produira un meilleur code.

ciao...
BruNews, MVP VC++
lundi 20 décembre 2004 à 11:58:58 | Re : Passage d'une string à une fonction

patatalo

Membre Club Administrateur CodeS-SourceS
re,

invoke Telecharger Fichier1,Fichier11 ( faux )
invoke Telecharger OFFSET Fichier1, OFFSET Fichier11 (ok)

ca plante car tu passe la valeur des 4 premiers octets de ta chaine au lieu de passer son adresse.

@++
lundi 20 décembre 2004 à 12:06:02 | Re : Passage d'une string à une fonction

AlexMAN

Membre Club
ce serait pas plutot :

invoke Telecharger ADDR Fichier1, ADDR Fichier11

??

+2(p - n)

1 2

Cette discussion est classée dans : fonction, string, passage, byte, mafonction


Répondre à ce message

Sujets en rapport avec ce message

Probleme de dll! (arguments...) [ par BlackWizzard ] salut les pro!voila, G une fonction contenu dans une dll mais cette fonction, je ne sait pas comment lui ajouter des arguments...voici un extrait du c passage de paramétres entre VCpp et ASM [ par orchis ] bjr a tous,j'ai ecris un programme en VCpp dont un module est en assembleur, mais je ne sais faire passer des paramétres entre les deux !! pourriez vo help syntaxe [ par Evonay ] pouvez vous me dire ou est le probleme de syntaxe dans:movzx edx,byte ptr [offset _AddTable+edx+ebx]avecvar _AddTable: array[0..256*2-1] of Byte; Fonction Download [ par Stormy ] StormyQuelqu'un aurait'il connaissance d'une fonction permettant le passage de données (de fichiers plutôt) par le fait d'un socket? Merci et @+ Fonction DLL avec arguments [ par Arnotic ] Bonjour, J'ai une DLL avec une fonction qui prend 2 arguments (en C (char*, int). Lorsque je la charge j'ai aucun problème mais lors de l'appel à passage en pmode [ par TRAX44 ] salut,g 1 petit pb, kan je ceu pa c en mode protégé mov eax, cr0 or al, 1 mov cr0, eax(g deja cree et charger la gdt)le pc La fonction API SendMessageA [ par douja ] Bonjour les amis J'utilise la fonction SendMessageA pour la justification à droite des mes zones de saisie avec les paramètres suivants: SendMessag FindFirstFile & FindNextFile [ par Stormy ] Quelqu'un aurait-il la gentillesse de me montrer comment coder une fonction permettant de lister un répertoire quelconque. Le but de cette fonction es probleme de cryptage avec la fonction crypt [ par kapes ] j'ai un probleme avec la foncion crypt() de c.en effet, j'ai ecrit un programme c qui creer des comptes utilisateurs. A l'interieur de cette fonction


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
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 : 1,092 sec (4)

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