Juste de finir l'apprentissage x86 langage d'assemblage. Que puis-je faire avec?
Je viens de finir l'apprentissage de l'assemblée de la langue. Mais je ne pouvais pas comprendre ce que je pourrais mettre en œuvre (pour la pratique/comme petit projet). Ce serait génial si son quelque chose d'utile pour n'importe qui.
- Il n'est pas toujours à propos de la mise en œuvre. Modéré la connaissance de l'assembleur peut aider beaucoup quand débogage (surtout si vous lancez jamais dans une génération de code bug du compilateur que vous utilisez).
- Vous avez appris assemblée avec pas de raison particulière?
- Est ce wiki de la communauté? Pas sûr qu'il y est une bonne réponse ici.
- J'ai appris à comprendre le fonctionnement interne. Eh bien maintenant, je sais comment les choses exactement de travail.Je peux les voir. - Je compiler mon C dans les codes de l'asm et de l'afficher. Les choses font sens pour moi. Doit-on apprendre l'asm, pour un but précis, tout seul?
Vous devez vous connecter pour publier un commentaire.
Un de mes passe-temps favori est la rétro-Ingénierie.
Il exige une solide connaissance de l'assemblée et de l'utilisation des désassembleurs/débogueurs de marcher à travers le code compilé. Cela vous permet de modifier, de comprendre et d'inverser les programmes compilés. Chaque nouveau programme, c'est comme un puzzle qui attendent d'être résolu!
Par exemple, beaucoup de gens inverse des jeux comme dragueur de mines quand ils sont les premiers à partir.
Voici une capture d'écran d'un article clé de code dans le Démineur j'ai inversé un certain temps de retour (commentaires, sur la droite):
Ce qui a été situé en plaçant un point d'arrêt sur les appels à la
rand()
de la fonction et de la progression vers l'arrière dans la pile des appels. Après quelques recherches, il devient évident qu':Avec cette connaissance, il devient facile de déterminer l'emplacement d'une mine dans le champ de mines par:
Puis, avec une simple boucle et quelques appels à
ReadProcessMemory()
vous avez l'ultime Démineur hack!De lecture écrites à la main, l'assemblage est de loin plus facile que la lecture de la machine assembleur généré. Les compilateurs modernes n'magiques et des choses folles du code de l'optimisation qui peut parfois être difficile à suivre. Donc, ce sera certainement pousser votre assemblée connaissances!
Il y a des tonnes d'activités qui peuvent se ramifient à partir de ce:
Et plus!
Si vous êtes intéressé, je vous suggère fortement de le livre: Inverser: les Secrets de l'Ingénierie Inverse
Vous pouvez apprendre comment OS travailler à faible niveau (interruptions, la mémoire virtuelle et ainsi de suite).
Premier à écrire un chargeur de démarrage qui vous permettra d'accéder au matériel, alors vous pouvez commencer à jouer avec le mode protégé, VGA programmation et ainsi de suite.
Deux bonnes ressources:
http://wiki.osdev.org/Main_Page
http://www.osdever.net/FreeVGA/home.htm
[Modifier]
Si vous voulez vous renseigner sur les optimisations, découvrez Agner Brouillard du site web: http://agner.org/optimize/.
[Modifier]
Copié à partir de Simucal commentaire:
Cela peut paraître très cliché, mais tu pourrais essayer de répondre à certaines des questions plus à projectueler à l'aide de l'assemblée.
Aujourd'hui, l'assembleur est utilisé dans ces domaines:
D'optimisation. Apprendre à utiliser Intel VTune si vous programmez sur Windows. Ici vous pouvez voir où votre goulets d'étranglement. Puis réécrire ces routines en assembleur.
Comme la plupart des logiciels modernes change tout le temps, c'est plus un exercice intellectuel et l'auto satisfaction à obtenir quelque chose de courir plus vite de la prestation en nature dans le monde réel.
Il y a une ou deux personnes qui ont ré-écrit de nombreux de la base C primatives, memcpy, memset etc. en assembleur adaptés à l'exécution de l'UC. Donc le code est plus grand, car il a des habitudes à prendre avantage des extensions de CPU, de l'ESS, etc, mais plus rapide. Ces C primatives finissent souvent dans de nombreux paquets .dll comme la plupart des programmes ne la mémoire des trucs tout le temps.
Fonction de la façon dont vous avez appris de l'assemblée, vous pouvez essayer de l'écriture du firmware pour les petits microprocesseurs ou même pour de petits appareils connectés à votre ordinateur. Vous pouvez aussi essayer d'écrire des logiciels d'applications d'assemblage et de leur donner une belle apparence graphique.
Généralement parlant, de mon expérience, le montage n'est pas aussi utile dans les émissions massives de projets de logiciel parce que pour beaucoup d'applications, la vitesse n'a pas vraiment d'importance (du moins, pas dans les jours de processeurs multi-core), de sorte que vous pouvez faire est quelque peu limitée.
Vous pouvez prendre un coup d'oeil à la liboil projet:
http://liboil.freedesktop.org/wiki/
Sa bibliothèque pour hautement optimisé innerloops.
La plupart des boucles déjà un assembleur x86 mise en œuvre, mais il y a encore quelques boucles de gauche à être réécrit.
Vous pouvez rechercher un robot ou un contrôleur qui peut brancher à votre port Parallèle et d'écrire quelques frais de la clé des gestionnaires afin de les contrôler. Vous pouvez également intercepter les appels BIOS comme Int13 pour le Disque et écrire quelques outils de mise en miroir de disques, RAID drivers etc. Vous pouvez le raccordement à certains transducteurs comme Temp/vibration/pression etc, et faire de l'acquisition de données.
Je suppose que vous pourriez essayer code-golf
Il y a aussi au moins un O. S. écrit pour le PC d'assemblage: MenuetOS. (Je n'ai aucune idée pourquoi.) Ils veulent peut-être des contributions.
Je comprends que, avant l'invention de C dans le début des années 1970, la plupart des systèmes d'exploitation ont été effectivement écrit dans la droite de l'assemblée. Je ne recommanderais pas le faire, mais vous pouvez écrire un programme autonome, juste pour le plaisir. Notez que le CPU va démarrer en mode 16 bits et il est assez difficile de l'obtenir pour passer en 32 bits. Il est probablement préférable de simplement écrire le programme autonome en 16 bits x86. Vous pouvez utiliser un simulateur pour le développement.
À tout le moins, vous pouvez maintenant la sortie assembleur de gcc, comme ceci:
gcc -c -S test.c -o test.asm
Ensuite, vous pouvez inspecter la sortie de généré du code C pour des fins éducatives.
Si vous êtes déjà un développeur à un niveau supérieur langage de programmation, langage d'assemblage permet de créer des routines optimisées/fonctions. Je ne sais pas pour les autres, mais Delphi, par exemple, permet de s'intégrer parfaitement l'assemblée de code dans n'importe quelle unité, et prend en charge les paramètres de fonction, etc.
Vous vous êtes familiarisé avec un faible niveau de fonctionnement des ordinateurs. Être en mesure de lire assemblée peut vous aider à comprendre comment votre compilateur se comporte.
Le reste peut faire appel de certaines critiques, parce qu'elle reflète d'une fiche polarisée à vue. Un jour, après un lamentable projet intégré, mon mentor m'a dit: "Si quelqu'un travaille pour vous, écrit dans une assemblée, et le feu lui de garder votre propre emploi." Je suis d'accord avec lui. À partir d'un point de vue programmatique, écrit dans l'assemblage est trop gênant.