Accueil > Forum > > > > Stack
Stack
dimanche 26 septembre 2004 à 21:14:52 |
Stack

AlexMAN
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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++
|
|
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
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|