《CSAPP》(第3版)答案(第三章)(二)

P67

  • A
    104 ±-----------------+
    | |
    | |
    | |
    | |
    | |
    | |
    | |
    | |
    64 ±-----------------+ <-- %rdi
    | |
    | |
    | |
    | |
    | |
    | |
    32 ±-----------------+
    | z |
    24 ±-----------------+
    | &z |
    16 ±-----------------+
    | y |
    8 ±-----------------+
    | x |
    0 ±-----------------+ <-- %rsp
  • B
    %rsp+64
  • C
    %rsp+offset
  • D
    eval 把地址%rsp+64传给进程,进程从该地址开始存储数据,最后返回该地址
  • E
    104 ±-----------------+
    | |
    | |
    | |
    | |
    | |
    | |
    88 ±-----------------+
    | z |
    80 ±-----------------+
    | x |
    72 ±-----------------+
    | y |
    64 ±-----------------+ <-- %rdi(eval pass in)
    | |
    | | – %rax(process pass out)
    | |
    | |
    | |
    | |
    32 ±-----------------+
    | z |
    24 ±-----------------+
    | &z |
    16 ±-----------------+
    | y |
    8 ±-----------------+
    | x |
    0 ±-----------------+ <-- %rsp in eval
    | |
    -8 ±-----------------+ <-- %rsp in process
    (图转自github)
  • F
    调用者给被调用者传递地址和需要的空间大小,被调用者存储数据后,返回传入的地址值。

P68

4 < B <= 8
5 < A <= 10
44 < A*B <= 46
解得 A=9 B=5

P69

  • A
    CNT=7
  • B
typedef struct {
   
  long idx,
  long x[4]
} a_struct

P70

  • A
val offset
e1.p 0
e1.y 8
e2.x 0
e2.next 8
  • B
    16
  • C
union ele{
   
    struct{
   
        long* p;
        long y;
    }e1;
    struct{
   
        long x;
        union ele* next;
    }e2;
};
void proc(union ele* up){
   
   up->e2.x = *(up->e2.next->e1.p) - up->e2.next->e1.y;
}
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值