【计算机系统】

  • 常用的寄存器%rsp、%rip、%rdi、%rsi、%rax有什么特殊作用
  • %rsp:保存栈顶地址
  • %rip:保存下一条将要被执行的指令的内存地址
  • %rdi:函数第一个参数传参
  • %rsi:函数第二个参数传参
  • %rax:保存函数返回值
  • 程序GDB、GCC、OBJDUMP、READELF各有什么作用
  • GDB:调试程序
  • GCC:编译程序
  • OBJDUMP:反编译程序
  • READELF:解析elf文件
  • 变量a的二进制位模式为0000 1111,b的二进制位模式为1111 0000,则
  • a:0000 1111
  • b:1111 0000
    ————————
  • a | b = 1111 1111
  • a & b = 0000 0000
  • a ^ b = 1111 1111
  • ~a = 1111 0000

按位异或运算将两个运算分量的对应位按位遵照以下规则进行计算:

  • 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 1, 1 ^ 1 = 0
    相应位的值相同的,结果为 0,不相同的结果为 1
  • 二进制补码1000 1111,转换为十进制是多少

= - 2^7 + 2^3 + 2^2 + 2 +1
= -128 +15
= -113

  • 在x86-64中,类型char、short、int、long、float、double一般各占多少字节
  • char:1字节
  • short:2字节
  • int:4字节
  • long:8字节
  • float:4字节
  • double:8字节
  • *(地址):8字节
  • 常见的指令movq、addq、subq、leaq、andq各起什么作用
  • movq:数据传输
  • movq:a,b
  • a的值 ——> b的值
  • addq:相加
  • addq:a,b
  • b = a + b
  • subq:相减
  • subq:a,b
  • b = a - b
  • leaq:地址加载
  • leap:2(%rdi,%rcx,2),%rsi
  • 2 + %rdi + 2 * %rcx
  • andq:按位与
  • 程序的编译要经过哪几个步骤
  1. 预处理 ——> 可汇编文件
  2. 编译 ——> 可重定位目标文件
  3. 汇编 ——> 可执行目标文件
  4. 链接
  • 可重定位目标文件、可执行目标文件、共享目标文件各用来干什么的
  • 可重定位目标文件:程序的链接输入文件
  • 可执行目标文件:可加载到内存直接执行
  • 共享目标文件:动态链接用的
  • ELF文件中常见的.text节、.data节、.rodata节、.symtab节、.rel.data节、.rel.text节各存放什么东西
  • .text节:存放程序指令的机器码(代码)
  • .data节:存放程序可读写的数据(程序可读数据)
  • .rodata节:存放程序的只读数据
  • .symtab节:存放符号表
  • .rel.data节:存放.data节的重定位信息
  • .rel.text节:存放.text节的重定位信息
  • 链接中的两个重要的工作是什么?各有什么用?
  • 符号解析:将每个符号找到对应的定义
  • 重定位:将地址信息修改正确
  • IEEE754标准下,十进制的浮点数float a = 1.0(规则化浮点数)转换成位模式是多少?
  • 0011 1111 1000 0000 0000 0000 0000 0000
  • 小端模式和大端模式的系统分别是什么样的
  • 小端模式:内存低地址存数据的低权重位
  • 大端模式:内存低地址存数据的高权重位
  • 二进制1010 0111转成十六进制是多少?十六进制数0xA7CB转成二进制是多少?
  • 1010 = 2^3 + 2 = 10 = A
  • 0111 = 2^2 + 2 + 1 = 7
  • 即 0xA7
  • A = 1010
  • 7 = 0111
  • C = 1100
  • B = 1011
  • 即1010 0111 1100 1011
  • 汇编指令的b、w、l、q这些后缀表示什么
  • 表示操作的字节数量
  • b 为 1 字节
  • w 为 2 字节
  • l 为 4 字节
  • q 为 8 字节
  • 什么是强符号?什么是弱符号?存在同名的强符号会怎么样?如果没有强符号,存在同名的弱符号会怎么样?
  • 强符号:函数、已初始化的全局变量
  • 弱符号:没被初始化的全局变量
  • 存在同名的强符号:会报错
  • 如果没有强符号,存在同名的弱符号,则链接时会随机选择一个弱符号作为最终的符号解析
  • 什么是缓冲区溢出攻击?什么是金丝雀值?什么是ASLR?什么是限制可执行代码区?
  • 缓冲区溢出攻击:指往缓冲区填充恶意代码并覆盖返回点地址,使得程序跳转到攻击代码并执行
  • 金丝雀值:在缓冲区与程序状态数据之间插入的一个特殊值,用来检测有没有发生缓冲区溢出
  • ASLR:指栈空间随机化,程序每次运行都有不同的栈地址,用来对抗缓冲区溢出攻击
  • 限制可执行代码区:指将栈空间等内存区域标识为不能执行,使得所注入的攻击代码得不到运行,用来对抗缓冲区溢出攻击
  • 在64位Linux系统中,%rdx用于函数返回值
  • 在x86-64体系结构的汇编语言中,%rax 和 %rdx 是寄存器的名称
  • %rax 是一个64位的寄存器,它是32位寄存器 EAX 的扩展。在某些情况下,%rax 用于存储函数的返回值
  • %rdx 也是一个64位的寄存器,它是32位寄存器 EDX 的扩展。在某些情况下,%rdx 用于存储函数的返回值或者作为某些指令的操作数
  • 在现代系统中,链接是由叫做链接器(linker)的程序自动执行的
  • 所有函数参数都传递给堆栈
  • x86-64不需要帧指针寄存器,即RBP可用作普通寄存器使用
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值