begin process at 2012 05 25 10:20:46
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

Aide a la programmation Windows

 > 

Stack


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

Stack

dimanche 26 septembre 2004 à 21:14:52 | Stack

AlexMAN

Membre Club
Bonsoir,

Je me pose une kestion :
Si au debut d'une fonction, je fais :

lea edx, [esp - 32]
mov esp, edx
call CreateRectRgn

On est d'accord, la pile est relevée de 16 apres l'appel a l'api. Ma kestion est la suivante : est ke je peux recuperer les parametres passés a la fonction si je fais un mov eax, [esp - 4]...Etc ?

Merci d'avance

++
dimanche 26 septembre 2004 à 22:13:43 | Re : Stack

BruNews

Administrateur CodeS-SourceS
bien entendu qu'on peut lire ou affecter [esp-4] etc...

Par contre je ne vois pas bien ou tu vas avec ta suite d'instructions, risque pas d'y avoir grand chose d'interessant sous ESP au retour d'1 API.

ciao...
BruNews, MVP VC++
dimanche 26 septembre 2004 à 22:36:48 | Re : Stack

AlexMAN

Membre Club
jdois passer des parametres a une fonction, je dois ensuite utiliser ces params pour une autre fonction, d'ou ma kestion.
Si tu vois un autre moyen, jsuis preneur.

Merci ++
dimanche 26 septembre 2004 à 22:46:38 | Re : Stack

BruNews

Administrateur CodeS-SourceS
alors PUSH les 2 fois, ils seront prets pour le second 'call'.

ciao...
BruNews, MVP VC++
dimanche 26 septembre 2004 à 22:51:57 | Re : Stack

AlexMAN

Membre Club
Enfin jmré ton avis, est ce ke je peux transcrire ca en ayant des params ke sur la pile, pas de variables globales...

if (message == WM_PAINT) {
RECT rectPB;
PAINTSTRUCT ps;
HRGN hrgn;
HDC hdc;
COLORREF hdef = GetSysColor(COLOR_WINDOW);
char buf[64], *c;

GetClientRect(hwnd, &rectPB);
hdc = BeginPaint(hwnd, &ps);
hrgn = CreateRectRgn(rectPB.left, rectPB.top, rectPB.right, rectPB.bottom);
SelectClipRgn(hdc, hrgn);
SetBkMode(hdc, TRANSPARENT);
rectPB.top = (int)SendMessage(hwnd, PBM_GETPOS, 0, 0);
c = bnstrcpy(buf, szstate);
c = bnultoa(rectPB.top, c);
*c++ = '%'; *c = 0;
rectPB.top = 100 - rectPB.top;
FillRect(hdc, &rectPB, GetSysColorBrush(COLOR_HIGHLIGHT));
DrawText(hdc, buf, strlen(buf), &rectPB, DT_VCENTER | DT_CENTER | DT_SINGLELINE);
EndPaint(hwnd, &ps);
DeleteObject(hrgn);
ReleaseDC(hwnd, hdc);
return 0;
}
return CallWindowProc(oldproc, hwnd, message, wparam, lparam);

J'ai essayé plusieurs code, en PUSHant directement la pile pour passer les params, mais nan, ca marche po, ca ménerve pask ca doit pas etre si compliké ke ca, en plus pas de VS.net donc jpeux pas tester en inline...putain de dimanche..

Merci Brunews

++
dimanche 26 septembre 2004 à 23:06:03 | Re : Stack

BruNews

Administrateur CodeS-SourceS
A part 'szstate' qui semble etre une chaine globale, pour sur que tout cela se fait sur pile dans l'event WM_PAINT, aucun besoin de variables globales.
Prepare la structure de ta pile sur papier avant pour bien voir combien de place tu auras besoin. Utiliser registres avant tout, ne jamais relire en memoire plus d'1 fois si la valeur ne change pas.
Tres bon exercice.

ciao...
BruNews, MVP VC++
dimanche 26 septembre 2004 à 23:12:31 | Re : Stack

BruNews

Administrateur CodeS-SourceS
OHE j'avais pas fait gaffe, y a une couille dans le potage.
A BeginPaint() doit correspondre EndPaint() et NON ReleaseDC().

ciao...
BruNews, MVP VC++
dimanche 26 septembre 2004 à 23:16:58 | Re : Stack

AlexMAN

Membre Club
ok chef, jV mi mettre ce soir, les cours passeront apres...
Merci pour le ReleaseDC() inutile.
dimanche 26 septembre 2004 à 23:55:06 | Re : Stack

AlexMAN

Membre Club
Ca marche !! A moitié, mais ca a le merite ne pas planter... :

PBProc PROC
mov edi, [esp + 4] ;hwnd
mov ecx, [esp + 8] ;message
cmp ecx, WM_PAINT
je onPaint
push [esp + 16]
push [esp + 12]
push ecx
push edi
push oldproc
call CallWindowProc
jmp fin
onPaint:
lea esi, [esp - 152]
mov esp, esi
push esi
push edi
call GetClientRect
lea ecx, [esi + 16]
push ecx
push edi
call BeginPaint
mov [esi + 144], eax
push [esi + 12]
push [esi + 8]
push [esi + 4]
push [esi]
call CreateRectRgn
mov [esi + 148], eax
push eax
push [esi + 144]
call SelectClipRgn
push TRANSPARENT
push [esi + 144]
call SetBkMode
xor ecx, ecx
push ecx
push ecx
push PBM_GETPOS
push edi
call SendMessage
mov ecx, 100
sub ecx, eax
mov [esi + 4], eax
invoke dwtoa, eax, addr buf
invoke MessageBox, 0, addr buf, 0, 0
push COLOR_HIGHLIGHT
call GetSysColorBrush
push eax
push esi
push [esi + 144]
call FillRect
mov ecx, DT_SINGLELINE
or ecx, DT_CENTER
or ecx, DT_VCENTER
push ecx
push esi
push 6
push offset sztest
push [esi + 144]
call DrawText
push [esi + 148]
call DeleteObject
lea ecx, [esi + 16]
push ecx
push edi
call EndPaint
add esp, 152
xor eax, eax
fin:
ret 16
PBProc endp

Voila, bonne nuit, merci

++
lundi 27 septembre 2004 à 00:08:00 | Re : Stack

BruNews

Administrateur CodeS-SourceS
PBProc PROC
mov edi, [esp + 4] ;hwnd

JAMAIS !!! Autres que EAX, ECX et EDX il faut TOUJOURS sauvegarder les registres avant de s'en servir afin de les restituer en sortie. Tu testes cela sur un win2K ou un winbebe et devrait planter.

PBProc PROC
mov ecx, [esp + 8] ;message
mov edx, [esp + 4] ;hwnd
cmp ecx, WM_PAINT
......
allait aussi bien sans toucher a EDI.

ciao...
BruNews, MVP VC++

1 2 3

Cette discussion est classée dans : fonction, stack, edx, esp, kestion


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 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 à [NASM] context stack [ par littlefl ] C'est un bug ou c'est moi ? Parce-que dans la doc de NASM, il est écrit que les defines spécifiques au context stack ont leur nom précédé de %$ et que # Export Table - Kernel32.dll - GetProcessAddress # [ par joanna ] Voici le code qui devrait récupérer l'adresse de la fonction "GetProcessAddress" connaissant l'ImageBase du module "kernel32.dll".Malheureusement à la # Export Table --- Kernell32.dll --- GetProcAddress # [ par joanna ] Voici le code qui devrait récupérer l'adresse de la fonction "GetProcessAddress" connaissant l'ImageBase du module "kernel32.dll".Malheureusement à la 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


Sondage...

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 : 0,484 sec (4)

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