当前位置:网站首页>Réponses aux devoirs du csapp 7 8 9
Réponses aux devoirs du csapp 7 8 9
2022-07-06 14:59:00 【Wuhu Han Jinlun】
Les réponses sont fournies à titre d'information seulement
7.12
L'idée de résoudre le problème est d'imiter le comportement du Linker:Utilisez l'enregistrement de repositionnement pour identifier l'emplacement et utilisez la figure7.9L'algorithme dans calcule l'adresse absolue du repositionnement,Ou simplement à partir du graphique7.10Extrait des instructions de repositionnement dans.Deux points méritent d'être notés:8D'accord.movlLa directive contient deux références à repositionner.No5Lignes et paragraphes8L'instruction pour la ligne contient une pairebuf[1]Références,La valeur initiale estOx4,L'adresse déplacée est calculée comme suit:ADDR(buf) +4.
- Le premier repositionnement estmov 0x0,%edx,Correspond à la figure7-10Dans15D'accord,Oui.swap.oLe décalage moyen est3-6Dans la position de0x0Réinitialiser l'adresse réelle au moment de l'exécution0x80483c8+3=0x80483cb,Sa valeur est0x804945c
- Le deuxième repositionnement estmov 0x4,%eax,Dans le graphique16D'accord,Oui.swap.oLe décalage moyen est8-bEn position0x4Repositionnement et adresse réelle au moment de l'exécution0x80483c8+8=0x80483d0,Sa valeur est0x8049458
- Troisième et quatrième repositionnements àmovl $0x4,0x0,Correspond à la figure7-10De18D'accord,Oui.swap.oLe décalage moyen est10-13De0x0Et offset est14-17De0x4Réinitialiser à l'exécution0x80483c8+10=0x80483d8Et0x80483c8+14=0x80483dc,Et vamovl $0x4,0x0Modifier comme suit:movl $0x8049458,0x8049548
- Le cinquième repositionnement est mov 0x0,%eax,Dans la figure7-10De23D'accord, Le décalage est 1f-22De0x0 Repositionnement à l'adresse 0x80483c8+1f=0x80483e7Valeur sur0x8049548
Les résultats sont présentés dans le tableau ci - dessous.:
Fig.7-10Numéro de ligne dans | Adresse | Valeur |
---|---|---|
15 | 0x80483cb | 0x004945c |
16 | 0x80483d0 | 0x0049458 |
18 | 0x80483d8 | 0x0049548 |
18 | 0x80483dc | 0x0049458 |
23 | 0x80483e7 | 0x0049548 |
7.13
A
In.text Décalage de la Section pour 12 Fonction appelée à , À la section offset est 19 Un transfert de valeur s'est produit à ,Et la valeur est0x0, Pour être repositionné .Unionc Le Code s'appelle ici p3() La valeur de retour de edxDans le registre,Et puis*xpAjouter, Et puis à l'offset 21 Fonction de génération de position pour p2()Appel de. Donc les décalages de noeuds pour les trois repositionnements sont respectivement 12,19,21, Pour la directive call 12<p1+0xa>、Directivesmov 0x0,%eaxEt les directivescall 21<p1+0x19>Effectuer un repositionnement. Ou directementobjdump Le démontage donne le même résultat .
Les résultats sont présentés dans le tableau ci - dessous.:
Décalage de section | Type de repositionnement | Nom du symbole |
---|---|---|
0x12 | R_386_PC32(Références relatives) | p3 |
0x19 | R_386_32(Références absolues) | xp |
0x21 | R_386_PC32(Références relatives) | p2 |
B
.data Modifié dans la section xpValeur de, Repositionnement à xAdresse.Alors... .data Le noeud n'est repositionné qu'une seule fois , Section offset to 0x4, Le type de repositionnement est la référence absolue de repositionnement , Le nom du symbole est xp.
Décalage de section | Type de repositionnement | Nom du symbole |
---|---|---|
0x4 | R_386_32(Références absolues) | xp |
8.23
Le processus parent reçoit et capture le premier signal , Pendant que le processeur traite encore le premier signal , Un second signal est ajouté à l'ensemble à traiter , Il n'est pas encore reçu s'il est bloqué par le gestionnaire , Quand le troisième signal arrive , Comme le type est le même que le deuxième signal, il est rejeté ,No4、5 Il en va de même pour les signaux . Quand le premier signal aura été traité , Le noyau a remarqué un autre signal en attente (Signal2) Force le processus parent à accepter , Puis exécutez le processus , Après le deuxième traitement , Il n'y a plus de signal à traiter ,C'est fini.. Donc seulement deux signaux seront reçus et traités ,counter Ça ne vaut que 2,Au lieu de5.
8.24
L'exigence du titre est d'écrire des segments de texte en lecture seule dans un sous - processus , Cela peut entraîner une erreur de segment , Donc la deuxième exigence est de sortir une erreur de segment . Pour déterminer la fin anormale, on peut utiliser WIFSIGNALEDPour juger,Si non0 Une terminaison anormale s'est produite ,Le Code modifié est le suivant::
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#define N 2
int main()
{
int status,i;
pid_t pid;
for(i = 0;i < N;i++)
if((pid = fork()) == 0)
{
int *pt = 0x0;
*pt = 15213;
exit(100+i);
}
while((pid = waitpid(-1,&status,0)) > 0)
{
if(WIFEXITED(status))
printf("child %d terminated normally with exit status = %d\n",pid,WEXITSTATUS(status));
else if(WIFSIGNALED(status))
{
fprintf(stderr,"child %d terminated by signal %d",pid,WTERMSIG(status));
psignal(WTERMSIG(status)," ");
}
else
printf("child %d terminated abnormally\n",pid);
}
if(errno != ECHILD)
printf("waitpid error\n");
exit(0);
}
Les résultats sont les suivants:
9.11
A. L'adresse virtuelle est0x027c,Convertir en binaire:00 0010 0111 1100
13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
B .Selon9.6.4L'hypothèse de la section,VPOPour l'adresse0Bit to5Bits,Ce titre est111100,VPNPour6Bit to13Bits,Ce titre est00001001,C'est - à - dire:0x9,TLBI- Oui.6-7Bitwise0x1,TLBTPour8-13Bitwise0x2. Consultez le tableau pour les bits d'index 0x1、Tag bit is0x2,Raté.,MMU Besoin de PTERetirerPPN, Obtenir un PPNPour0x17, Il n'y a pas de page manquante .
Le tableau complet est :
Paramètres | Valeur |
---|---|
VPN | 0x9 |
TLBIndex | 0x1 |
TLBMarquage | 0x2 |
TLBHit?(- Oui./Non) | Non |
Pages manquantes?(- Oui./Province) | Non |
PPN | 0x17 |
C. Numéro de cadre de la page physique à obtenir 0x17( 01 0111 ) Avant d'être l'adresse physique réelle 6Bits, Le décalage est constant ,Toujours.VPO( 11 1100 ),Obtenir l'adresse physique finale: 0101 1111 1100
11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
D. L'adresse physique 6-11Bitwise010111En tant queCT,Sa valeur est0x17,2-5Bitwise1111En tant queCISa valeur est0xf,0-1 Bits offset as Block COLa valeur est:0x0. Trouver un bit d'index dans le cache 0xfGroupe、Tag bit0x17Oui.、Offset as0x0Octets de, Comme le montre la table cache 0xf Aucun groupe pour 0x17 Lignes marquées , C'est pour ça que , Aucun octet retourné . Les résultats sont présentés dans le tableau ci - dessous.:
Paramètres | Valeur |
---|---|
Byte offset | 0x0 |
Index de cache | 0xf |
Jetons de cache | 0x17 |
Cache hit?(- Oui./Non) | Non |
Octets de cache retournés | - |
9.12
A.L'adresse virtuelle est0x03a9,Son binaire est00 0011 1010 1001
13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 |
B. Selon9.6.4L'hypothèse de la section,VPOPour l'adresse0Bit to5Bits,Ce titre est101001,VPNPour6Bit to13Bits,Ce titre est0000 1110,C'est - à - dire:0xe,TLBI- Oui.6-7Bitwise0x2,TLBTPour8-13Bitwise0x3. Consultez le tableau pour les bits d'index 0x2、Tag bit is0x3, Parce que les bits valides sont 0Raté.,MMU Besoin de PTERetirerPPN, Obtenir un PPNPour0x11, Il n'y a pas de page manquante .
Le tableau complet est :
Paramètres | Valeur |
---|---|
VPN | 0xe |
TLBIndex | 0x2 |
TLBMarquage | 0x3 |
TLBHit?(- Oui./Non) | Non |
Pages manquantes?(- Oui./Province) | Non |
PPN | 0x11 |
C. Numéro de cadre de la page physique à obtenir 0x11( 01 0001) Avant d'être l'adresse physique réelle 6Bits, Le décalage est constant ,Toujours.VPO( 10 1001 ),Obtenir l'adresse physique finale: 0100 0110 1001
11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 |
D: L'adresse physique 6-11Bitwise010001En tant queCT,Sa valeur est0x11,2-5Bitwise1010En tant queCISa valeur est0xa,0-1 Bits offset as Block COLa valeur est:0x1. Trouver un bit d'index dans le cache 0xaGroupe、Tag bit0x11Oui.、Offset as0x1Octets de, Comme le montre la table cache 0xa Aucun groupe pour 0x11 Lignes marquées , C'est pour ça que , Aucun octet retourné .
Formulaire complet :
Paramètres | Valeur |
---|---|
Byte offset | 0x1 |
Index de cache | 0xa |
Jetons de cache | 0x11 |
Cache hit?(- Oui./Non) | Non |
Octets de cache retournés | - |
9.13
A.L'adresse virtuelle est0x0040,Son binaire est00 0000 0100 0000
13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
B. Selon9.6.4L'hypothèse de la section,VPOPour l'adresse0Bit to5Bits,Ce titre est000000,,VPNPour6Bit to13Bits,Ce titre est0000 0001,C'est - à - dire:0x1,TLBI- Oui.6-7Bitwise0x1,TLBTPour8-13Bitwise0x0. QuandVPN=1Heure,Le BIT valide est0,PPNAucune. Donc il n'y a pas d'adresse physique . Il manque des pages .
Paramètres | Valeur |
---|---|
VPN | 0x1 |
TLBIndex | 0x1 |
TLBMarquage | 0x0 |
TLBHit?(- Oui./Non) | Non |
Pages manquantes?(- Oui./Province) | - Oui. |
PPN | 0x11 |
C.Pages manquantes
D.Pages manquantes
9.14
Les codes sont les suivants:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <fcntl.h>
int main(int argc, char const *argv[])
{
int fd;
if ((fd = open("hello.txt", O_RDWR)) == -1) {
perror("Failed to open hello.txt");
exit(EXIT_FAILURE);
}
struct stat stat_of_file;
if (fstat(fd, &stat_of_file) == -1) {
perror("Failed to get stat of hello.txt");
exit(EXIT_FAILURE);
}
char *p;
if ((p = mmap(NULL, stat_of_file.st_size, PROT_WRITE, MAP_SHARED, fd, 0)) == (void *)-1) {
perror("Failed to mmap");
exit(EXIT_FAILURE);
}
p[0] = 'J';
munmap(p, stat_of_file.st_size);
close(fd);
return 0;
}
Résultats des opérations:
边栏推荐
- Statistics 8th Edition Jia Junping Chapter 3 after class exercises and answer summary
- STC-B学习板蜂鸣器播放音乐2.0
- Query method of database multi table link
- Zhejiang University Edition "C language programming experiment and exercise guide (3rd Edition)" topic set
- 浙大版《C语言程序设计实验与习题指导(第3版)》题目集
- Function: find the maximum common divisor and the minimum common multiple of two positive numbers
- Global and Chinese markets of MPV ACC ECU 2022-2028: Research Report on technology, participants, trends, market size and share
- 5 minutes to master machine learning iris logical regression classification
- Database monitoring SQL execution
- 《统计学》第八版贾俊平第五章概率与概率分布
猜你喜欢
Build your own application based on Google's open source tensorflow object detection API video object recognition system (II)
Résumé des points de connaissance et des réponses aux exercices après la classe du chapitre 7 de Jia junping dans la huitième édition des statistiques
[Ogg III] daily operation and maintenance: clean up archive logs, register Ogg process services, and regularly back up databases
Statistics 8th Edition Jia Junping Chapter XIII Summary of knowledge points of time series analysis and prediction and answers to exercises after class
What is the transaction of MySQL? What is dirty reading and what is unreal reading? Not repeatable?
数字电路基础(三)编码器和译码器
Get started with Matplotlib drawing
Database monitoring SQL execution
High concurrency programming series: 6 steps of JVM performance tuning and detailed explanation of key tuning parameters
The common methods of servlet context, session and request objects and the scope of storing data in servlet.
随机推荐
函数:计算字符串中大写字母的个数
[Ogg III] daily operation and maintenance: clean up archive logs, register Ogg process services, and regularly back up databases
MySQL learning notes (stage 1)
【指针】数组逆序重新存放后并输出
Cadence physical library lef file syntax learning [continuous update]
Logstack introduction and deployment -- elasticstack (elk) work notes 019
Want to learn how to get started and learn software testing? I'll give you a good chat today
《统计学》第八版贾俊平第一章课后习题及答案总结
Face and eye recognition based on OpenCV's own model
函数:字符串反序存放
Vysor uses WiFi wireless connection for screen projection_ Operate the mobile phone on the computer_ Wireless debugging -- uniapp native development 008
《统计学》第八版贾俊平第四章总结及课后习题答案
浙大版《C语言程序设计实验与习题指导(第3版)》题目集
Numpy快速上手指南
Keil5 MDK's formatting code tool and adding shortcuts
How does SQLite count the data that meets another condition under the data that has been classified once
移植蜂鸟E203内核至达芬奇pro35T【集创芯来RISC-V杯】(一)
函数:求两个正数的最大公约数和最小公倍
[pointer] find the length of the string
[pointer] counts the number of times one string appears in another string