当前位置:网站首页>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:
边栏推荐
- 5分钟掌握机器学习鸢尾花逻辑回归分类
- [pointer] solve the last person left
- Logstack introduction and deployment -- elasticstack (elk) work notes 019
- Global and Chinese markets of Iam security services 2022-2028: Research Report on technology, participants, trends, market size and share
- Login the system in the background, connect the database with JDBC, and do small case exercises
- Function: string storage in reverse order
- {1,2,3,2,5} duplicate checking problem
- Global and Chinese market of barrier thin film flexible electronics 2022-2028: Research Report on technology, participants, trends, market size and share
- 数字电路基础(三)编码器和译码器
- 指针:最大值、最小值和平均值
猜你喜欢
《統計學》第八版賈俊平第七章知識點總結及課後習題答案
数字电路基础(三)编码器和译码器
DVWA exercise 05 file upload file upload
Statistics, 8th Edition, Jia Junping, Chapter 11 summary of knowledge points of univariate linear regression and answers to exercises after class
Software testing interview summary - common interview questions
How does SQLite count the data that meets another condition under the data that has been classified once
关于交换a和b的值的四种方法
Want to learn how to get started and learn software testing? I'll give you a good chat today
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
STC-B学习板蜂鸣器播放音乐
随机推荐
1. Payment system
[pointer] solve the last person left
Quaternion -- basic concepts (Reprint)
【指针】查找最大的字符串
Function: calculates the number of uppercase letters in a string
JDBC 的四种连接方式 直接上代码
Statistics 8th Edition Jia Junping Chapter 7 Summary of knowledge points and answers to exercises after class
Transplant hummingbird e203 core to Da Vinci pro35t [Jichuang xinlai risc-v Cup] (I)
Matplotlib绘图快速入门
Mysql的事务是什么?什么是脏读,什么是幻读?不可重复读?
[oiclass] maximum formula
Query method of database multi table link
Don't you even look at such a detailed and comprehensive written software test question?
How to use Moment. JS to check whether the current time is between 2 times
1.支付系统
数据库多表链接的查询方式
"If life is just like the first sight" -- risc-v
Expanded polystyrene (EPS) global and Chinese markets 2022-2028: technology, participants, trends, market size and share Research Report
STC-B学习板蜂鸣器播放音乐
C language do while loop classic Level 2 questions