update memory

This commit is contained in:
firmianay 2017-08-10 23:25:09 +08:00
parent 5330ed1487
commit 321ae62e58
8 changed files with 177 additions and 4 deletions

View File

@ -12,7 +12,7 @@
- [1.5.4 Windows PE](doc/1.5.4_pe.md) - [1.5.4 Windows PE](doc/1.5.4_pe.md)
- [1.5.5 静态链接](doc/1.5.5_static_link.md) - [1.5.5 静态链接](doc/1.5.5_static_link.md)
- [1.5.6 动态链接](doc/1.5.6_dynamic_link.md) - [1.5.6 动态链接](doc/1.5.6_dynamic_link.md)
- [1.5.7 内存与虚拟内存](doc/1.5.7_memory.md) - [1.5.7 内存管理](doc/1.5.7_memory.md)
- [1.6 密码学基础](doc/1.6_crypto_basic.md) - [1.6 密码学基础](doc/1.6_crypto_basic.md)
- [1.7 Android 安全基础](doc/1.7_android_basic.md) - [1.7 Android 安全基础](doc/1.7_android_basic.md)

View File

@ -2,6 +2,7 @@
- [常用基础命令](#常用基础命令) - [常用基础命令](#常用基础命令)
- [进程管理](#进程管理) - [进程管理](#进程管理)
- [UID 和 GID](#uid-和-gid)
- [权限设置](#权限设置) - [权限设置](#权限设置)
- [字节序](#字节序) - [字节序](#字节序)
- [输入输出](#输入输出) - [输入输出](#输入输出)
@ -47,6 +48,40 @@ nano / vim / emacs 字符终端的文本编辑器
- 删除进程某 PID 指定的进程:`$ kill [PID]` - 删除进程某 PID 指定的进程:`$ kill [PID]`
## UID 和 GID
Linux 是一个支持多用户的操作系统,每个用户都有 User ID(UID) 和 Group ID(GID)UID 是对一个用户的单一身份标识,而 GID 则对应多个 UID。知道某个用户的 UID 和 GID 是非常有用的,一些程序可能就需要 UID/GID 来运行。可以使用 `id` 命令来查看:
```text
$ id root
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),19(log)
$ id firmy
uid=1000(firmy) gid=1000(firmy) groups=1000(firmy),3(sys),7(lp),10(wheel),90(network),91(video),93(optical),95(storage),96(scanner),98(power),56(bumblebee)
```
UID 为 0 的 root 用户类似于系统管理员,它具有系统的完全访问权。我自己新建的用户 firmy其 UID 为 1000是一个普通用户。GID 的关系存储在 `/etc/group` 文件中:
```text
$ cat /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,firmy
......
```
所有用户的信息(除了密码)都保存在 `/etc/passwd` 文件中,而为了安全起见,加密过的用户密码保存在 `/etc/shadow` 文件中,此文件只有 root 权限可以访问。
```text
$ sudo cat /etc/shadow
root:$6$root$wvK.pRXFEH80GYkpiu1tEWYMOueo4tZtq7mYnldiyJBZDMe.mKwt.WIJnehb4bhZchL/93Oe1ok9UwxYf79yR1:17264::::::
firmy:$6$firmy$dhGT.WP91lnpG5/10GfGdj5L1fFVSoYlxwYHQn.llc5eKOvr7J8nqqGdVFKykMUSDNxix5Vh8zbXIapt0oPd8.:17264:0:99999:7:::
```
由于普通用户的权限比较低,这里使用 `sudo` 命令可以让普通用户以 root 用户的身份运行某一命令。使用 `su` 命令则可以切换到一个不同的用户:
```text
$ whoami
firmy
$ su root
# whoami
root
```
`whoami` 用于打印当前有效的用户名称shell 中普通用户以 `$` 开头root 用户以 `#` 开头。在输入密码后,我们已经从 firmy 用户转换到 root 用户了。
## 权限设置 ## 权限设置
 Linux 中,文件或目录权限的控制分别以读取、写入、执行 3 种一般权限来区分,另有 3 种特殊权限可供运用。  Linux 中,文件或目录权限的控制分别以读取、写入、执行 3 种一般权限来区分,另有 3 种特殊权限可供运用。

View File

@ -1 +1,12 @@
# x86 汇编基础 # x86/x64/ARM 汇编基础
- [x86](#x86)
- [x64](#x64)
- [ARM](#arm)
## x86
## x64
## ARM

View File

@ -1 +1,30 @@
# 内存与虚拟内存 # 内存管理
- [什么是内存](#什么是内存)
- [栈与调用约定](#栈与调用约定)
- [堆与内存管理](#堆与内存管理)
## 什么是内存
为了使用户程序在运行时具有一个私有的地址空间、有自己的 CPU就像独占了整个计算机一样现代操作系统提出了虚拟内存的概念。
虚拟内存的主要作用主要为三个:
- 它将内存看做一个存储在磁盘上的地址空间的高速缓存,在内存中只保存活动区域,并根据需要在磁盘和内存之间来回传送数据。
- 它为每个进程提供了一致的地址空间。
- 它保护了每个进程的地址空间不被其他进程破坏。
现代操作系统采用虚拟寻址的方式CPU 通过生成一个虚拟地址Virtual Address(VA)来访问内存然后这个虚拟地址通过内存管理单元Memory Management Unit(MMU))转换成物理地址之后被送到存储器。
![](../pic/1.5.7_va.png)
前面我们已经看到可执行文件被映射到了内存中Linux 为每个进程维持了一个单独的虚拟地址空间,包括了 .text、.data、.bss、栈stack、堆heap共享库等内容。
32 位系统有 4GB 的地址空间,其中 0x08048000~0xbfffffff 是用户空间3GB0xc0000000~0xffffffff 是内核空间GB
![](../pic/1.5.7_vm.png)
## 栈与调用约定
## 堆与内存管理

View File

@ -11,6 +11,6 @@
- [1.5.4 Windows PE](1.5.4_pe.md) - [1.5.4 Windows PE](1.5.4_pe.md)
- [1.5.5 静态链接](1.5.5_static_link.md) - [1.5.5 静态链接](1.5.5_static_link.md)
- [1.5.6 动态链接](1.5.6_dynamic_link.md) - [1.5.6 动态链接](1.5.6_dynamic_link.md)
- [1.5.7 内存与虚拟内存](1.5.7_memory.md) - [1.5.7 内存管理](1.5.7_memory.md)
- [1.6 密码学基础](1.6_crypto_basic.md) - [1.6 密码学基础](1.6_crypto_basic.md)
- [1.7 Android 安全基础](1.7_android_basic.md) - [1.7 Android 安全基础](1.7_android_basic.md)

View File

@ -3,6 +3,7 @@
- [重定向输入字符](#重定向输入字符) - [重定向输入字符](#重定向输入字符)
- [从可执行文件中提取 shellcode](#从可执行文件中提取-shellcode) - [从可执行文件中提取 shellcode](#从可执行文件中提取-shellcode)
- [查看进程虚拟地址空间](#查看进程虚拟地址空间) - [查看进程虚拟地址空间](#查看进程虚拟地址空间)
- [ASCII 表](#ascii-表)
## 重定向输入字符 ## 重定向输入字符
@ -95,3 +96,100 @@ ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsysca
- **设备**:映像文件的主设备号和次设备号,可以通过通过 `cat /proc/devices` 查看设备号对应的设备名 - **设备**:映像文件的主设备号和次设备号,可以通过通过 `cat /proc/devices` 查看设备号对应的设备名
- **节点**:映像文件的节点号 - **节点**:映像文件的节点号
- **路径**: 映像文件的路径,经常同一个地址有两个地址范围,那是因为一段是 `r-xp` 为只读的代码段,一段是 `rwxp` 为可读写的数据段 - **路径**: 映像文件的路径,经常同一个地址有两个地址范围,那是因为一段是 `r-xp` 为只读的代码段,一段是 `rwxp` 为可读写的数据段
## ASCII 表
ASCII 表将键盘上的所有字符映射到固定的数字。有时候我们可能需要查看这张表:
```text
$ man ascii
Oct Dec Hex Char Oct Dec Hex Char
────────────────────────────────────────────────────────────────────────
000 0 00 NUL '\0' (null character) 100 64 40 @
001 1 01 SOH (start of heading) 101 65 41 A
002 2 02 STX (start of text) 102 66 42 B
003 3 03 ETX (end of text) 103 67 43 C
004 4 04 EOT (end of transmission) 104 68 44 D
005 5 05 ENQ (enquiry) 105 69 45 E
006 6 06 ACK (acknowledge) 106 70 46 F
007 7 07 BEL '\a' (bell) 107 71 47 G
010 8 08 BS '\b' (backspace) 110 72 48 H
011 9 09 HT '\t' (horizontal tab) 111 73 49 I
012 10 0A LF '\n' (new line) 112 74 4A J
013 11 0B VT '\v' (vertical tab) 113 75 4B K
014 12 0C FF '\f' (form feed) 114 76 4C L
015 13 0D CR '\r' (carriage ret) 115 77 4D M
016 14 0E SO (shift out) 116 78 4E N
017 15 0F SI (shift in) 117 79 4F O
020 16 10 DLE (data link escape) 120 80 50 P
021 17 11 DC1 (device control 1) 121 81 51 Q
022 18 12 DC2 (device control 2) 122 82 52 R
023 19 13 DC3 (device control 3) 123 83 53 S
024 20 14 DC4 (device control 4) 124 84 54 T
025 21 15 NAK (negative ack.) 125 85 55 U
026 22 16 SYN (synchronous idle) 126 86 56 V
027 23 17 ETB (end of trans. blk) 127 87 57 W
030 24 18 CAN (cancel) 130 88 58 X
031 25 19 EM (end of medium) 131 89 59 Y
032 26 1A SUB (substitute) 132 90 5A Z
033 27 1B ESC (escape) 133 91 5B [
034 28 1C FS (file separator) 134 92 5C \ '\\'
035 29 1D GS (group separator) 135 93 5D ]
036 30 1E RS (record separator) 136 94 5E ^
037 31 1F US (unit separator) 137 95 5F _
040 32 20 SPACE 140 96 60 `
041 33 21 ! 141 97 61 a
042 34 22 " 142 98 62 b
043 35 23 # 143 99 63 c
044 36 24 $ 144 100 64 d
045 37 25 % 145 101 65 e
046 38 26 & 146 102 66 f
047 39 27 ' 147 103 67 g
050 40 28 ( 150 104 68 h
051 41 29 ) 151 105 69 i
052 42 2A * 152 106 6A j
053 43 2B + 153 107 6B k
054 44 2C , 154 108 6C l
055 45 2D - 155 109 6D m
056 46 2E . 156 110 6E n
057 47 2F / 157 111 6F o
060 48 30 0 160 112 70 p
061 49 31 1 161 113 71 q
062 50 32 2 162 114 72 r
063 51 33 3 163 115 73 s
064 52 34 4 164 116 74 t
065 53 35 5 165 117 75 u
066 54 36 6 166 118 76 v
067 55 37 7 167 119 77 w
070 56 38 8 170 120 78 x
071 57 39 9 171 121 79 y
072 58 3A : 172 122 7A z
073 59 3B ; 173 123 7B {
074 60 3C < 174 124 7C |
075 61 3D = 175 125 7D }
076 62 3E > 176 126 7E ~
077 63 3F ? 177 127 7F DEL
Tables
For convenience, below are more compact tables in hex and decimal.
2 3 4 5 6 7 30 40 50 60 70 80 90 100 110 120
------------- ---------------------------------
0: 0 @ P ` p 0: ( 2 < F P Z d n x
1: ! 1 A Q a q 1: ) 3 = G Q [ e o y
2: " 2 B R b r 2: * 4 > H R \ f p z
3: # 3 C S c s 3: ! + 5 ? I S ] g q {
4: $ 4 D T d t 4: " , 6 @ J T ^ h r |
5: % 5 E U e u 5: # - 7 A K U _ i s }
6: & 6 F V f v 6: $ . 8 B L V ` j t ~
7: ' 7 G W g w 7: % / 9 C M W a k u DEL
8: ( 8 H X h x 8: & 0 : D N X b l v
9: ) 9 I Y i y 9: ' 1 ; E O Y c m w
A: * : J Z j z
B: + ; K [ k {
C: , < L \ l |
D: - = M ] m }
E: . > N ^ n ~
F: / ? O _ o DEL
```

BIN
pic/1.5.7_va.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
pic/1.5.7_vm.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB