0% found this document useful (0 votes)
29 views1 page

计算机系统基础

System Basic

Uploaded by

naro.ypj
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
29 views1 page

计算机系统基础

System Basic

Uploaded by

naro.ypj
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 1

删除水印 万兴PDF

计算机系统概论


表示数据

进制转换 浮点数是无法精确的表示所有很大的数(数越小,精度越好),比如在 2^-125


~ 2^-126之间,他只有2^23个点(尾数frac从全0-全1),当需要表示的数无
法精确表示时,计算机便舍入到最近的一个数。

字:一串数码作为一个整体来处理或运算的,简单来说,可以看成一个计量单
数据表示与存储
位,针对不同系统约定俗成的。eg:一般一个字设为16位(∵当初是由x86-
8086(16位的系统)发展过来的,∴保留下来了)
字长:指的是CPU一次能并行处理的二进制位数,
数据宽度 eg:x86-32(32位系统)是字长也是32位,x86-64字长是64位

对应一个int x 的变量,它占4个字节(单元),那么它对应的地址是最大的地址
还是最小的地址?
最小的地址 eg:已知x的地址位 100#,则这个变量的的存储空间为
100#~103#
多字节数据在各存储单元内存放顺序是如何?
数据存储 大端方式\小段方式(从左至右正常)

IA-32指令系统 指令

栈就是向下生长的,且栈的生长方向是从高地址到低地址的

每出现一个函数 即 对应一个函数栈帧
(包含对应的ebp(栈底指针)和esp(栈顶指针))

这里0x100、0x104的单位都是字节
∴是相差0x104-0x100 = 4个字节
基础知识
栈帧中每一块其实对应的是存储一个寄存器 eg:ebp esp
32位系统中这些寄存器都是32位的,即4个字节,∴每次偏移都是4的倍数

另外1个字节对应16进制的两位

$后面接数字代表的是立即数,eg: movl $100 -0x10(%ebp)


(后面的0x10单位也是字节,相当于是16个字节)


eg:

入口参数(就是实参)
存放于该函数EBP的上面

函数调用的表示

递归过程调用

在IA-32中,double是64位,对应2个4字节
在IA-32中,long int是32位,对应1个4字节

缓冲区溢出实例

缓冲区溢出可导致 程序运行失败、系统关机、重新启动等后果

if-else的机器级表示

eg:

注意:其中case的跨度不易太长
像这里就是10-17,如果太长会导致调转表过大

switch-case的机器级表示

选择循环的表示
eg:

C语言语句的机器级表示

for、while、do-while的机器级表示

eg:递归和循环的区别

计算机系统基础

数组在内存的存放与访问

结构体数据的分配与访问

对齐可以减少访存周期
虽然浪费些空间(且很小),但是加快
时间更为值得

F
PD


对齐方式设定
数据的对齐

整体是自然边界对齐

eg:

整体∵都比1大,∴按1对齐

应用eg:

原理

对应机器级表示
越界访问和缓冲区溢出
UNIX/Linux系统中可以通过
程序的加载和运行 调用execve()函数来加载并执行程序

eg:

IA-32

各类数据的长度

x86-64

概述

IA-32

通用寄存器

x86-64

传送指令

eg:

eg:常规的

算术逻辑运算指令
x86-64基本指令
X86-64指令系统

eg:特殊的

比较和测试指令

x86-64 逆向工程举例

eg:比较IA-32和x86-64 IA-32:在栈的上面存储入口参数,通过对栈顶指针移动来引用
x86-64:直接通过寄存器存储入口参数(前六个参数),通过寄存器来引用

x86-64的参数传递和返回地址

x86-64函数调用 函数调用时各寄存器的使用约定

caller函数部分
eg:

test函数部分

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy