操作数:
立即数:
寄存器:
内存地址:
寄存器:
通用寄存器:CPU在执行期间使用。
段寄存器:用于定位内存节。
状态标志:用于做出决定。
指令指针:用于定位要执行的下一条指令。
寄存器
32位 EAX = _ _ _ _ | _ _ _ _
E AX H L
通用寄存器:
-用于存储数据或内存地址,乘法和除法只能用 EAX 和 EDX
-EAX通常存储函数的返回值。
知识点
[ ]括起来的操作数是对内存中 数据的引用,地址中存的数的值进行操作。
inc 和 dec 将一个寄存器加一和减一
add sub
mul(乘 --操作:‘值’*EAX放入 EAX和EDX中 EDX存高32位 EAX存低32位)
div(除 --操作:将EAX 和 EDX 中放的值 除以 ’值‘放到 EAX(商) 和 EDX(余数)中)
imul 和 idiv 是上两个的有符号版本
shr 和 shl 对寄存器的移位运算 填零
ror 和 rol 循环移位 补上来
图片.png
图片.png
知识点
-条件指令
test 和 cmp 作比较的指令
test 与 and 指令功能一样,但它不会修改其使用的操作数,只设置标志位
cmp 与 sub指令功能,但不修改操作数,只设置标志位。
-分支指令
工具
-ltrace ./程序名 查看程序执行过程
-cat /proc/程序pid/maps 查看程序执行中的栈的情况
-查看pid pidof + 程序名
-nact(nmap) -v(信息)-c(程序) -l(监听那个端口)-k(keep)
-nc 连接
灌入程序.png
-./程序名 运行 +& 显示程序的pid
-vim
- /+字符 搜索字符 n 下一个匹配
- tabe + 文件名 新建一个文件 gt 命令切换标签
- %!xxd 打开xxd 在 vim 中 - %!xxd -r 保存之前得修改
-连接器 编译器 分配器
-perl
-gcc
-o 输出文件
-m32 32位程序
-zexecstack 关闭NX
-fno-stack-protector 关闭canary
-nasm
-o 指定输出文件名
-f 指定文件类型
-objdump
-d 反汇编
-M
-objcopy
-O (binary)指定文件
-xxd
-i 生成一段code
-vim
:tabe + 文件名 新开一个文件
-nact
-v 调试信息
-c 运行程序
-l 监听端口主机
-k 保持
-strace
-i 显示运行地址
-(cat shell;cat) | nc ip 端口
-cat /proc/`pidof test3`/maps
-dmesg 查看程序坏在哪
-cyclic + num [pwntools 工具] 生成 num 个字符
-l + 字符串 查找偏移长度
1.打remote 会直接结束按 回车 2.按回车会一直可以回车
-which 查看程序位置
-hexedit
-
- 0A 机器码为换行 eb 是跳转
- ROPgadget
--binary
pwntools 错误解法
-
-视频
ais3
-(1)
-工具
-shellcode
-ret to shellcode(无保护)
-rop(+NX 增加了 NX难度)
rop用途
-syscall