Pages : 1
#1 Le 07/03/2008, à 15:46
- Nasman
Sites de programmation sous Linux
Bonjour,
Je suis à la recherche de site de programmation sous Linux, et plus spécialement de site de programmation en assembleur (si possible en français). D'autre part je souhaiterais savoir où on peut trouver des modèles de codes, voir des petites applications pour mieux comprendre le fonctionnement. En bref, que faites vous des codes que vous avez créé.
J'ai peut-être mal cherché mais je n'ai pas vue de section sur ubuntu-fr pour celà.
Merci
PC fixe sous Bionic 64 bits et portable avec Focal 64 bits
Hors ligne
#2 Le 07/03/2008, à 16:59
- Link31
Re : Sites de programmation sous Linux
Premier site sur Google :
http://asm.sourceforge.net/
Par contre, ça risque d'être dur d'en trouver en français...
Pour ce qui est des exemples : un Hello World sans aucune dépendance (même pas besoin de la libc) :
#include <asm/unistd.h>
inline void exit(int status)
{
int __res;
__asm__ volatile ("movl %%ecx,%%ebx\n"\
"int $0x80" \
: "=a" (__res) : "0" (__NR_exit),"c" ((long)(status)));
}
inline int write(int fd, const char * buf, int len)
{
int status;
__asm__ volatile ("pushl %%ebx\n"\
"movl %%esi,%%ebx\n"\
"int $0x80\n" \
"popl %%ebx\n"\
: "=a" (status) \
: "0" (__NR_write),"S" ((long)(fd)),"c" ((long)(buf)),"d" ((long)(len)));
}
void _start(void)
{
write(1, "Hello World\n", 12);
exit(0);
}
Comme tu le vois, les syscalls sous Linux se font grâce à l'interruption 0x80 (80h si tu préfères), après avoir rempli les registres comme il faut.
Le code assembleur est du x86.
J'avais un exemple de hello world en quelques lignes de nasm, mais je ne l'ai pas sous la main actuellement.
Dernière modification par Link31 (Le 07/03/2008, à 17:01)
Hors ligne
#3 Le 08/03/2008, à 01:15
- Le Farfadet Spatial
Re : Sites de programmation sous Linux
Salut à tous !
Je suis à la recherche de site de programmation sous Linux
Il y a des sections consacrées à Linux sur le site du zéro (http://www.siteduzero.com/) et développez.com (http://www.developpez.com/). En fait, tant qu'on ne touche pas à la programmation système, la programmation sous Linux n'est pas différente de la programmation sur un autre système. Si c'est la programmation système qui t'intéresse, alors renseigne toi sur la bibliothèque POSIX. Ce n'est pas parfait, mais c'est une norme, donc une première base relativement portable.
et plus spécialement de site de programmation en assembleur
Que veux-tu faire en assembleur ? Car la situation a bien changée depuis les années 80 : les processeurs sont généralement superscalaires (donc utilisent massivement le pipeline) et multicœurs (donc fondamentalement parallèles), de sorte que réellement tirer parti de leurs capacités est vraiment délicat et prend beaucoup de temps. De plus, la théorie de la compilation a fait énormément de progrès, de sorte que les codes en assembleurs ne désormais pas nécessairement plus rapides ni plus compacts que les programmes compilés. Enfin, le développement sous Linux est généralement libre et une des particularités du libre est la portabilité, or l'assembleur n'est pas, par définition, portable.
En conclusion, si ce qui t'intéresse c'est l'optimisation, approfondi tes connaissances en algorithmique et renseigne toi sur les options de ton compilateur. L'utilisation de l'assembleur devrait être limitée aux cas où tu ne peux pas faire autrement, par exemple lorsqu'il faut accéder de manière fine au matériel. Dans ces cas, le mieux est généralement d'aller sur les sites des constructeurs.
D'autre part je souhaiterais savoir où on peut trouver des modèles de codes, voir des petites applications pour mieux comprendre le fonctionnement.
Le mieux : sélectionne des applications libres qui te semblent intéressantes ou élégantes et télécharge leur code source. En plus, cela pourrait t'amener à contribuer à leurs développements.
En bref, que faites vous des codes que vous avez créé.
Ça dépend. Pour ma part, si c'est une participation à un projet libre, je le dépose sur le CVS (ou SVN). Si c'est un programme qui peut intéresser la communauté, je crée une page sur Sourceforge et je crée un SVN. Sinon, je le stocke sur mon disque dur...
À bientôt.
Le Farfadet Spatial
Dernière modification par Le Farfadet Spatial (Le 11/03/2008, à 02:01)
Hors ligne
#4 Le 08/03/2008, à 10:27
- Nasman
Re : Sites de programmation sous Linux
Bonjour,
J'ai déjà fait de la programmation en assembleur sous Windows et je pense que j'ai pu obtenir des programmes compacts et très rapides. Je souhaite continuer sous Linux (j'ai testé le "hello world" en mode console avec les appels système) en provilégiant l'interface graphique. Je souhaite également porter mes quelques programmes sous Linux, même s'ils fonctionnent avec wine.
Actuellement je ne sais pas s'il existe un équivalent des dll et API pour Linux mais je pense que celà doit être le cas. Les programmes avec interfaces graphiques que j'ai pu voir sont en C (langage que je ne maitrise pas) et je pense que les bibliothèques appellées par le programme se trouvent liées lors de la compilation - rendant l'exécutable bien plus gros et plus difficile à analyser.
Si je veux utiliser l'assembleur, c'est que c'est ce qui permet d'avoir les meilleures performances ; par exemple j'ai fait un programme pour calculer une transformée de Fourier rapide et je pense qu'aucun autre programme en langage plus évolué pourra tenir la route.
>Link31
Voici le "hello world" en assembleur Nasm
BITS 32
SECTION .data
chaine db "Hello world !", 10
SECTION .text
GLOBAL _start
_start:
mov eax,4
mov ebx,1
mov ecx,dword chaine
mov edx,14
int 0x80
mov eax, 1
int 0x80
PC fixe sous Bionic 64 bits et portable avec Focal 64 bits
Hors ligne
#5 Le 08/03/2008, à 16:21
- Link31
Re : Sites de programmation sous Linux
Actuellement je ne sais pas s'il existe un équivalent des dll et API pour Linux mais je pense que celà doit être le cas.
L'équivalent de l'API windows est Wine, mais bien évidemment il existe de très nombreuses bibliothèques natives en C (dont utilisables en assembleur), souvent d'excellente qualité.
Les programmes avec interfaces graphiques que j'ai pu voir sont en C (langage que je ne maitrise pas)
Ça m'a toujours surpris, les gens qui maîtrisent un assembleur mais qui ne connaissent pas le C... Franchement je te conseille de t'y mettre : le C c'est de l'assembleur, mais portable, et avec une syntaxe lisible
je pense que les bibliothèques appellées par le programme se trouvent liées lors de la compilation - rendant l'exécutable bien plus gros et plus difficile à analyser.
Absolument pas, sauf si tu le précises explicitement. Le code assembleur généré par un compilateur est souvent difficile à lire (de plus, GCC génère de l'assembleur AT&T, pas du nasm). Mais avec l'option -S, GCC formate le fichier assembleur de façon à ce qu'il puisse être à peu près lisible. Et n'oublie pas d'enlever les options de débogage
Si je veux utiliser l'assembleur, c'est que c'est ce qui permet d'avoir les meilleures performances ; par exemple j'ai fait un programme pour calculer une transformée de Fourier rapide et je pense qu'aucun autre programme en langage plus évolué pourra tenir la route.
Ça m'étonnerait beaucoup. Si tu pouvais réécrire ton programme en C, avec une optimisation de -O3 et quelques flags bien placés, tu serais surpris du résultat. De plus, si tu utilisais une bibliothèque C comme GMP, tu pourrais t'affranchir des limites du processeur et obtenir la précision que tu veux, tout en gardant une vitesse d'exécution très correcte.
Voici le "hello world" en assembleur Nasm
...
C'était en effet quelque chose comme ça, merci
Hors ligne
#6 Le 09/03/2008, à 04:05
- Le Farfadet Spatial
Re : Sites de programmation sous Linux
Salut à tous !
Globalement, je vais aller dans le sens de Link31, mais j'amène tout de même ma fraise !
Actuellement je ne sais pas s'il existe un équivalent des dll et API
Bien sûr qu'il en existe. Des API, il y en a plein. L'équivalent des DLLs, ce sont les bibliothèques partagées.
je pense que les bibliothèques appellées par le programme se trouvent liées lors de la compilation
Tu te trompes : il est très rare qu'un programme diffusé utilise des bibliothèques liées.
rendant l'exécutable [...] plus difficile à analyser.
Si tu veux vraiment analyser les programmes libres, leurs codes sources sont disponibles, ce qui est beaucoup plus pratique et efficace que de désassembler leurs codes : bienvenu dans le monde des logiciels libres !
Si je veux utiliser l'assembleur, c'est que c'est ce qui permet d'avoir les meilleures performances
Cela fait quelques années que ce n'est plus vrai.
par exemple j'ai fait un programme pour calculer une transformée de Fourier rapide et je pense qu'aucun autre programme en langage plus évolué pourra tenir la route.
Hé bien, tu te trompes. Par exemple, la plupart des bibliothèques de calcul à hautes performances sont codées en Fortran et le C++ est en train de devenir de plus en plus utilisé et ce n'est pas pour rien. Sachant qu'un gain de 1 % en performances peut faire gagner jusqu'à quelques jours de calcul et que les gros calculateurs sont mutualisés, tu penses bien que si l'assembleur pouvait apporter quelque chose, ça vaudrait le coup de l'utiliser. Or, le calcul sur ordinateur existe depuis la naissance de l'informatique et aucun code numérique n'utilise plus l'assembleur désormais...
En fait, à l'heure actuelle, les programmes en assembleur sont généralement moins efficaces que ceux fait avec des langages évolués. Véritablement tirer parti des pipelines et de la parallélisation est quelque chose de délicat, généralement plus du domaine de l'analyse automatique.
À bientôt.
Le Farfadet Spatial
Hors ligne