begin process at 2010 03 19 15:10:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Divers

 > 

Débutant(e)

 > 

ebx et interface C/C++


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

ebx et interface C/C++

vendredi 20 avril 2007 à 23:10:01 | ebx et interface C/C++

kaervas

Membre Club
Bonjour,
pourquoi ne pas modifier la valeur du registre %ebx dans une interface en C/C++?

En effet, j'ai code plusieurs fonctions dans des .o, que j'utilise dans mon code C, et si je modifie %ebx, j'ai des problemes (vu egalement ce probleme sur un tuto).
Donc pour le coup je dois le push/pull, mais j'aimerais savoir a quoi cela est du? (j'ai lu aussi qu'il n'y avait pas ce probleme en asm pur ou lib dynamique?).

Merci d'avance.
samedi 21 avril 2007 à 03:17:25 | Re : ebx et interface C/C++

kaervas

Membre Club
En me relisant c'est pas tres clair.

[...]
"push ebx : ici cela n'est pas réellement utile non plus puisque ebx, on n'y touche pas; mais c'est une question de bonnes habitudes car il est interdit pour une fonction de modifier ebx ( quand on l'interface avec du C/C++ tout du moins, en asm pur vous faites ce que vous voulez ) "
[...] sources : [ Lien ]

Pourquoi? merci.
samedi 21 avril 2007 à 09:28:26 | Re : ebx et interface C/C++

BruNews

Administrateur CodeS-SourceS
Réponse Windows, autres OS à voir:
"asm pur" qu'est-ce à dire ??? si tu écris un prog en complet asm sera idem, C/C++ produit un listing asm.
Tout OS à des specs pour developper dessus tout comme il y a des règles pour un jeu.
La 1ere règle étant pour Win32: Hors EAX, ECX et EDX, tous les registres sont à restituer dans leur état original en sortie de fonction.

ciao...
BruNews, MVP VC++
samedi 21 avril 2007 à 11:57:33 | Re : ebx et interface C/C++

kaervas

Membre Club
Pour l'asm pur je ne sais pas, mais j'ai vu quelqu'un ne pas restaurer la valeur de ebx pour une lib dynamique sous linus et "a priori" il n'y avait pas de soucis.
Apres pour ma question, en fait oui, j'imagine normal de ne pas toucher a ce qui est exterieur aux 4 registres de donnees, modifier les registres qui indique la position dans le code peut effectivement poser quelques soucis! Mais, pour ebx, je me posais la question. Pourquoi ce registre de donnee particulier ne devait pas etre touche? Que fait le system, ou le compilateur, avec ? (chez moi linux donc format elf, et gcc donc avec as et en at&t).
dimanche 22 avril 2007 à 19:26:41 | Re : ebx et interface C/C++

_dune2_

Membre Club
Salut,


Concernant la compilation sous GNU/Linux-elf avec GCC :

La convention d'appel de fonction sur un système linux-elf est décrite sur le site suivant :
[ Lien ]

Avec la phrase suivante :
"
The convention used here is that the callee is allowed to mess up the values of the EAX, ECX and EDX registers before returning. So, if the caller wants to preserve the values of EAX, ECX and EDX, the caller must explicitly save them on the stack before making the subroutine call. On the other hand, the callee must restore the values of the EBX, ESI and EDI registers. If the callee makes changes to these registers, the callee must save the affected registers on the stack and restore the original values before returning.
"
Ce qui explique clairement que dans le cadre d'un appel de fonction : "On the other hand, the callee must restore the values of the EBX, ESI and EDI registers" donc tu dois restorer par convention les registres EBX, ESI et EDI qui ont servi à passer les paramètres à la fonction. (il se peut effectivement que l'appelant fasse la sauvegarde, ce qui explique que dans certain cas cela ne plante pas, mais par convention elle n'y est pas obligé et peut donc planter ;) ).

dune2.

Gentoo... que du bonheur ...
lundi 23 avril 2007 à 21:52:43 | Re : ebx et interface C/C++

kaervas

Membre Club
Merci pour cette doc c'etait interessant.

Mais ce n'etait pas vraiment ma question en fait,
j'ai bien vu effectivement, qu'il fallait les sauvegarder ebx (sinon ca segfaultait!),
mais j'aimerais juste savoir pourquoi.

En fait j'ai un prog a rendre pour mon ecole en asm, mais j'ai decider de le faire avec du C, le truc c'est que je que je vais devoir expliquer pourquoi je ne touche pas a ebx! (et puis ca m'interesse aussi de savoir evidemment). Donc si quelqu'un sait...
lundi 23 avril 2007 à 22:04:13 | Re : ebx et interface C/C++

BruNews

Administrateur CodeS-SourceS
Mais c'est très clair le pourquoi, le system que soit Win ou Nux utilise au maximum les registres et donc y stocke des valeurs pour accélérer le travail. Tu peux donc utiliser tous les registres que tu veux mais les restaurer après usage.

ciao...
BruNews, MVP VC++
mardi 24 avril 2007 à 00:23:08 | Re : ebx et interface C/C++

kaervas

Membre Club
Ce n'est pas encore tres clair justement...
Il faudrait que j'etudie un peu plus ce que fait le system quand il execute le programme, par rapport au format elf et aux differentes sections, parceque en effet il doit bien en quelque sorte 'parser' l'executable (entre les types/taille/portee de chaque section) et donc oui doit sans doute utiliser (pour optimiser et/ou juste garder en memoire 'rapide' quelque chose) ebx a ce moment la.. ma question s'etait pose parceque je trouvais ca etrange que juste la modifier altere alors l'execution du programme, et surtout que ceci n'est specifie que dans peu de tuto.
Merci!
mardi 24 avril 2007 à 12:12:50 | Re : ebx et interface C/C++

_dune2_

Membre Club
Salut,


La convention de programation est tel-quel ... maintenant si tu ne veux pas suivre la convention de programation, faut pas se plaindre de certain plantage ...
Une voiture est conçue pour utiliser un volant ... tu peux y adapter un joystick à ta sauce ... maintenant si tu te plantes avec ta voiture tu ne pourras t'en prendre qu'à toi même ...
(c'est un peu plus clair comme ça ? ;) )

Gentoo... que du bonheur ...


Cette discussion est classée dans : code, probleme, interface, ebx


Répondre à ce message

Sujets en rapport avec ce message

prob mode protégé pour graphisme [ par prunkdump ] Bonjours afin de testé un de mes programmes qui passe en mode protégé j'ai éssayé de renplir en 32bits le buffer d'écran en mode graphique 13h. Au déb Probleme avec le serveur [ par TotalIllusion ] jai poster ma source (un prog sur les ISR et le serveur veut pas mettre le .zip (isr.zip).sa a cree 3 message comme dequoi jaurrais poster 3 source et projet assembleur [ par zipposou ] Salut a tousj'ai un enorme probleme, j'ai un projet à rendre en assembleur 68000, c en fait le jeu du serpent.Le probleme c que je ne connais pas gran projet assembleur [ par zipposou ] Salut a tousj'ai un enorme probleme, j'ai un projet à rendre en assembleur 68000, c en fait le jeu du serpent.Le probleme c que je ne connais pas gran HELP_HELP_HELP [ par zipposou ] Salut a tousj'ai un enorme probleme, j'ai un projet à rendre en assembleur 68000, c en fait le jeu du serpent.Le probleme c que je ne connais pas gran Question de débutant [ par Laurent1313 ] Voilà je débute avec l'assembleur sous Delphi et il y a un truc que je ne comprends pas. Je voudrais juste savoir quelle est la différence entre :ça : probleme de comprehension de jmp:( [ par SVKMrNice ] yop le monde alors voila je suis debutant en asm... de temps en temps je regarde des progs en asm pour essayer de comprendre les techniques... mais vo Différences ??? [ par Arecibo ] Voila je debute en assembleur et j'aimerais savoir quelles sont les différences entre :-> mov eax, ebx et mov eax, [ebx]-> mov esi, eax et mov [esi], Peut on comparer deux binaire avec cmp ? [ par MrNice ] Lo le forum me revoila ave cun new prob...donc en fait g une table de variable, je prends al=0 je fait un xlat et je compare ce resultat avec une entr 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...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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,374 sec (3)

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