Apprenez «l'architecture x86 apprise avec votre propre émulateur» avec Manjaro (Linux)

introduction

J'ai acheté un livre intitulé "l'architecture x86 apprise avec mon propre émulateur". Le Makefile de cet exemple de code fait référence à la chaîne d'outils incluse (gcc, etc.) et l'outil était pour Windows. Je n'aime pas développer sous Windows pour des raisons religieuses, j'ai donc décidé de développer un émulateur x86 sur mon Manjaro habituel (environnement Linux basé sur Archlinux).

Dans cet article, j'expliquerai comment utiliser l'exemple de code modifié pour Manjaro et la partie modifiée.

Préparer l'environnement d'apprentissage

Installation des outils nécessaires (gcc, nasm, objdump, qemu)

$ sudo pacman -S git gcc nasm binutils qemu

Téléchargez un exemple de code

$ git clone https://github.com/Kenta11/x86-emulator-book-Manjaro

Modification de l'exemple de code

Les différences par rapport à l'exemple de code officiellement distribué sont les suivantes.

Remplacez l'outil référencé par Makefile par celui que vous venez d'installer

Dans l'exemple de code distribué, gcc, etc. ont été inclus et référencés.

--Avant (à partir de tolset_p86 / emu4.2 / Makefile)

TARGET = px86.exe                                                                                                                               
OBJS = main.o emulator_function.o instruction.o modrm.o io.o bios.o
Z_TOOLS = ../z_tools

CC = $(Z_TOOLS)/mingw32-gcc/bin/gcc
CFLAGS += -Wall

.PHONY: all 
all :
    make $(TARGET)

%.o : %.c Makefile
    $(CC) $(CFLAGS) -c $<

$(TARGET) : $(OBJS) Makefile
    $(CC) -o $@ $(OBJS)

J'ai remplacé l'outil référencé par celui installé avec pacman et ajouté une règle que je pensais être plus utile.

--Après (depuis chapitre4 / section2 / Makefile)

TARGET = px86                                                                                                                                   
PROGRAM = subroutine32.bin
OBJS = main.o emulator_function.o instruction.o modrm.o io.o bios.o

CC = gcc 
ASM = nasm
CFLAGS += -O2 -Wall -Wextra

.PHONY: all run clean
all : $(TARGET) $(PROGRAM)

run : $(TARGET) $(PROGRAM)
        ./$(TARGET) -q $(PROGRAM)

$(TARGET) : $(OBJS)
        $(CC) -o $@ $(OBJS)

%.o : %.c 
        $(CC) $(CFLAGS) -c $<

%.bin : %.asm
        $(ASM) -f bin -o $@ $<

clean :
        rm -f $(TARGET) $(PROGRAM) $(OBJS)

Dans le cas de ce Makefile, j'ai ajouté run and clean. run exécute le programme de test sur l'émulateur. Clean supprime également les produits (fichiers objets, binaires d'émulateur, programmes de test).

Développer des bottes pour une utilisation dans "4.5 Voyons PBR" avec scratch complet

Comme boots était un binaire pour Windows sans exception, j'ai créé un programme qui effectue un traitement similaire à l'original (chapitre4 / section5. tree / master / chapitre4 / section5)). Le livre montre le contenu de FAT16, mais toutes les mémoires USB autour de moi étaient formatées avec FAT32. Par conséquent, FAT32 peut également être affiché. (Je me demande si les bottes d'origine peuvent également voir FAT32 ... je vérifierai plus tard)

Ajout de Makefile pour que "4.6 Exécution sur une machine réelle" puisse être fait avec QEMU

Dans le livre, la sortie du programme d'assemblage par boot est modifiée pour exécuter le programme qui affiche la chaîne de caractères sur la machine réelle. Cependant, j'avais peur qu'il y ait eu un accident que l'ordinateur se soit cassé en raison d'une erreur dans le programme d'assemblage, alors je l'ai essayé à la place avec QEMU (émulateur). Mettez le programme d'assemblage pbr.asm dans chapitre4 / section6 et exécutez make, et QEMU va Il lit pbr.bin et affiche le même résultat que la machine réelle.

-Depuis chapitre4 / section6 / Makefile

TARGET = pbr.bin
ASM = nasm
QEMU = qemu-system-x86_64

.PHONY: all clean
all : $(TARGET)
	$(QEMU) $<

%.bin : %.asm
	nasm $< -o $@

clean :
	rm -f $(TARGET)

Suppression de la chaîne d'outils pour Windows

Le gcc et les bottes inclus sont pour Windows et ne sont pas nécessaires pour Manjaro, je les ai donc supprimés. Je suis content car la taille du fichier est plus petite.

Résumé

J'ai travaillé sur "l'architecture x86 apprise avec mon propre émulateur" avec Manjaro. Je ne pense pas que vous puissiez profiter du plaisir de la création progressive de l'émulateur 80386 lorsque vous lisez les pages d'autres livres (en particulier les livres japonais!). L'architecture x86 semble compliquée à première vue, mais après avoir lu ce livre, cela semble compliqué: P Bien sûr, cela s'est produit pour des raisons historiques, mais comme vous le lisez, pourquoi? J'ai pu en faire l'expérience. Je le recommanderais sans hésiter à tous ceux qui s'intéressent au fonctionnement des ordinateurs.

En remplaçant les outils référencés par l'exemple de code Makefile par ceux qui peuvent être installés avec le gestionnaire de packages de Manjaro, il est plus facile de les réutiliser dans un environnement Linux tout en étant plus petit que l'exemple de fichier ZIP de code d'origine. Si vous souhaitez travailler sur le contenu de ce livre sous Linux, veuillez utiliser l'exemple de code téléchargé sur GitHub.

Lien

Recommended Posts

Apprenez «l'architecture x86 apprise avec votre propre émulateur» avec Manjaro (Linux)
Utilisez WDC-433SU2M2 avec Manjaro Linux
Créez votre propre manuel. [Linux] [homme]
Résolvez votre propre labyrinthe avec Q Learning
Entraînez UGATIT avec votre propre jeu de données
Résolvez votre propre labyrinthe avec DQN
Votre propre client Twitter réalisé avec Django
Créez vos propres commandes Linux en Python
[Renforcer l'apprentissage] DQN avec votre propre bibliothèque
Apprenez les données distribuées avec TensorFlow Y = 2X
Créez votre propre serveur DNS avec Twisted
Créez votre propre valeur composite avec SQLAlchemy
Assembleur X86 sous Linux (lien avec C)
Pour importer votre propre module avec jupyter
Publiez votre propre bibliothèque Python sur Homebrew
Exécutez Linux avec l'architecture ARM à l'aide de QEMU