IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

convertir de l'asm gnu en windows 16 ou 32 bits


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 95
    Points : 41
    Points
    41
    Par défaut convertir de l'asm gnu en windows 16 ou 32 bits
    Bonjour, j'ai remarquer que une jolie commande: "gcc -S prog.c"
    permettait de transformer un code en c en temps que assembleur

    par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    #include <stdio.h>		
    #include <stdlib.h>
     
    int main(void)
     { 
     int a, b, c, calcul ;
      a = 5 ;
      b = 3 ;
      c = a + b ;
      printf ("Dafuck : (%d + %d) = %d\n", a, b, c) ;
      printf ("a=%d b=%d c=%d \n",a,b,c);
     a = 2 ;
     c = b - a ;
     printf ("Trololo : (%d - %d) = %d\n", b, a, c) ;
     printf ("a=%d b=%d c=%d \n",a,b,c);
     
      return EXIT_SUCCESS;
     }
    est devenue:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    	.file	"Exercice1.c"
    	.section	".rodata"
    	.align 8
    .LLC0:
    	.asciz	"Dafuck : (%d + %d) = %d\n"
    	.align 8
    .LLC1:
    	.asciz	"a=%d b=%d c=%d \n"
    	.align 8
    .LLC2:
    	.asciz	"Trololo : (%d - %d) = %d\n"
    	.section	".text"
    	.align 4
    	.global main
    	.type	main, #function
    	.proc	04
    main:
    	!#PROLOGUE# 0
    	save	%sp, -128, %sp
    	!#PROLOGUE# 1
    	mov	5, %g1
    	st	%g1, [%fp-20]
    	mov	3, %g1
    	st	%g1, [%fp-24]
    	ld	[%fp-20], %o5
    	ld	[%fp-24], %g1
    	add	%o5, %g1, %g1
    	st	%g1, [%fp-28]
    	sethi	%hi(.LLC0), %g1
    	or	%g1, %lo(.LLC0), %o0
    	ld	[%fp-20], %o1
    	ld	[%fp-24], %o2
    	ld	[%fp-28], %o3
    	call	printf, 0
    	 nop
    	sethi	%hi(.LLC1), %g1
    	or	%g1, %lo(.LLC1), %o0
    	ld	[%fp-20], %o1
    	ld	[%fp-24], %o2
    	ld	[%fp-28], %o3
    	call	printf, 0
    	 nop
    	mov	2, %g1
    	st	%g1, [%fp-20]
    	ld	[%fp-24], %o5
    	ld	[%fp-20], %g1
    	sub	%o5, %g1, %g1
    	st	%g1, [%fp-28]
    	sethi	%hi(.LLC2), %g1
    	or	%g1, %lo(.LLC2), %o0
    	ld	[%fp-24], %o1
    	ld	[%fp-20], %o2
    	ld	[%fp-28], %o3
    	call	printf, 0
    	 nop
    	sethi	%hi(.LLC1), %g1
    	or	%g1, %lo(.LLC1), %o0
    	ld	[%fp-20], %o1
    	ld	[%fp-24], %o2
    	ld	[%fp-28], %o3
    	call	printf, 0
    	 nop
    	mov	0, %g1
    	mov	%g1, %i0
    	ret
    	restore
    	.size	main, .-main
    	.ident	"GCC: (GNU) 3.3.2"

    Qui est de l'assembleur linux. J'aimerais savoir si il existait un convertisseur (ou une commande) pour avoir ce code en asm windows. Ou un outil quelconque qui me permettrait de transformer manuellement et facilement

    Merci d'avance

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Bonjour,

    Il n'y a pas « d'assembleur Linux » et « d'assembleur Windows ». Il n'y a que des assembleurs pour le type de micro-processeur pour lequel tu compiles, indépendamment du système d'exploitation que tu utilises et même de la machine sur laquelle tu travailles pourvu qu'elles soient toutes équipées du même CPU.

    En revanche, il y a deux choses à souligner :
    • Le programme généré va être évidemment adapté à l'OS pour lequel tu compiles, mais les différentes versions d'un même programme travailleront quand même avec les mêmes instructions micro-processeur ;
    • Il y a différentes syntaxes pour écrire un même programme en assembleur : généralement, la syntaxe est celle définie par le fondeur de ton CPU mais AT&T a notamment défini une façon propre de les rédiger et c'est elle qui est en vigueur sous Unix par défaut.


    Les deux grandes syntaxes d'assembleur sur PC sont donc « Intel » et « AT&T ». Si tu veux que GCC te produise de l'assembleur Intel, il faut lui passer l'option « -masm=intel ».

    Tu obtiendras donc le même programme rédigé sous une forme plus habituelle. Ça ne veut pas dire pour autant qu'un programme compilé pour Linux fonctionnera sous Windows (et vice versa) à cause de cela.

  3. #3
    Invité
    Invité(e)
    Par défaut
    gcc (GNU C Compiler) est un élément de la collection de compilateurs GCC (GNU Compilers Collection), dédié au compilation des codes source C. C'est le compilateur C principal des systèmes GNU/Linux. En général, La phase de compilation commence par le prétraitement (preprocess) du code source et se termine par la transformation du code intermédiaire en un code cible, c'est le code assembleur que vous avez obtenu. Pour le gcc le prétraitement est une phase indépendante de la phase du compilation!

    Le gcc utilise par défaut l'assembleur GNU as pour assembler. C'est pour ce-là vous avez obtenu avec "gcc -S prog.c" un code cible écrit en assembleur GNU (style AT&T). Donc vous devez utiliser l'option "-masm=intel" pour obtenir un code cible écrit avec la syntaxe Intel. Ce code ne peut être assembler qu'en utilisant le compilateur gcc !

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/08/2014, 00h14
  2. ASM 11gR2 sous Windows 2008
    Par Pomalaix dans le forum Installation
    Réponses: 4
    Dernier message: 29/01/2013, 13h13
  3. Extrenal Proc 10g rel 1, windows server 2003 64 bits
    Par bpprive dans le forum Oracle
    Réponses: 1
    Dernier message: 02/03/2006, 21h21
  4. Convertir du code ASM 68020 en C++
    Par )3lade dans le forum Linux
    Réponses: 5
    Dernier message: 13/01/2006, 10h03
  5. [dbase3]Convertir une base de données sous windows
    Par nux dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 04/10/2003, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo