当前位置:网站首页>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:
边栏推荐
- 使用 flask_whooshalchemyplus jieba实现flask的全局搜索
- Numpy Quick Start Guide
- CSAPP家庭作业答案7 8 9章
- What level do 18K test engineers want? Take a look at the interview experience of a 26 year old test engineer
- Flash implements forced login
- Mysql的事务是什么?什么是脏读,什么是幻读?不可重复读?
- Using flask_ Whooshalchemyplus Jieba realizes global search of flask
- Differences between select, poll and epoll in i/o multiplexing
- Database monitoring SQL execution
- High concurrency programming series: 6 steps of JVM performance tuning and detailed explanation of key tuning parameters
猜你喜欢
Keil5 MDK's formatting code tool and adding shortcuts
HackTheBox-Emdee five for life
Build your own application based on Google's open source tensorflow object detection API video object recognition system (II)
Statistics 8th Edition Jia Junping Chapter 7 Summary of knowledge points and answers to exercises after class
Software testing interview summary - common interview questions
Statistics, 8th Edition, Jia Junping, Chapter 11 summary of knowledge points of univariate linear regression and answers to exercises after class
1.支付系统
Statistics, 8th Edition, Jia Junping, Chapter VIII, summary of knowledge points of hypothesis test and answers to exercises after class
Get started with Matplotlib drawing
servlet中 servlet context与 session与 request三个对象的常用方法和存放数据的作用域。
随机推荐
Global and Chinese markets for GaN on diamond semiconductor substrates 2022-2028: Research Report on technology, participants, trends, market size and share
Expanded polystyrene (EPS) global and Chinese markets 2022-2028: technology, participants, trends, market size and share Research Report
To brush the video, it's better to see if you have mastered these interview questions. Slowly accumulating a monthly income of more than 10000 is not a dream.
Statistics, 8th Edition, Jia Junping, Chapter 11 summary of knowledge points of univariate linear regression and answers to exercises after class
The common methods of servlet context, session and request objects and the scope of storing data in servlet.
Soft exam information system project manager_ Project set project portfolio management --- Senior Information System Project Manager of soft exam 025
Pointeurs: maximum, minimum et moyenne
Quaternion -- basic concepts (Reprint)
[pointer] solve the last person left
Software testing interview summary - common interview questions
Oracle foundation and system table
Summary of thread implementation
STC-B学习板蜂鸣器播放音乐2.0
[pointer] use the insertion sorting method to arrange n numbers from small to large
“Hello IC World”
Flash implements forced login
MySQL learning notes (stage 1)
Opencv recognition of face in image
Statistics, 8th Edition, Jia Junping, Chapter 6 Summary of knowledge points of statistics and sampling distribution and answers to exercises after class
函数:计算字符串中大写字母的个数