经过一段时间的学习,发现还是需要不断整理的。于是决定从今天开始,定期更新博客记录自己的学习。
1.linux指令
指令结尾加&可以让进程后台运行
jobs命令可以查询后台运行程序
fg将程序调至前台 bg让后台暂停运行程序继续运行
2.32位和64位系统
注意某些情况64位地址要补00 00 00 00
32位用栈帧来传递参数 64位使用寄存器分别用rdi(目的地址寄存器) rsi (源地址寄存器)rdx(i/o指针) rcx(循环寄存器) r8 r9 作为第1-6个传参
rax 累加寄存器 rbx数据寄存器
具体信息可以查询:
https://w3challs.com/syscalls/?arch=x86_64
本地:
/usr/include/asm/unistd_64.sh
3.0 [ ]
只有SI,DI,BX,BP 还有常熟可以加[ ]
mov ax,[di] 即将di中存的数据作为偏移地址,然后将该地址存入的数据传入ax
mov ax,[1]即将偏移为1的地址存放的数据传入ax
3.lea指令和mov指令区别
lea(load effective address)即加载有效地址, 但是不能直接从字面意思理解。
lea ax,[1000]即将偏移地址1000传入ax
附加查阅的资料:
AT&T
语法要在常数前加
$、在寄存器名前加 % 符号;Intel 语法没有相应的东西要加
AT&T
语法先写源操作数,再写目标操作数;Intel 语法先写目标操作数,再写源操作数
AT&T
语法将操作数的大小表示在指令的后缀中(b、w、l);Intel 语法将操作数的大小表示在操作数的前缀中(BYTE PTR、WORD
PTR、DWORD PTR)
4.xxd指令
将c语言转为十六位
5.objump objcopy
- -d:将代码段反汇编
- -S:将代码段反汇编的同时,将反汇编代码和源代码交替显示,编译时需要给出-g,即需要调试信息。
6.gcc编译去除保护措施
-fno-stack-protector用来关闭gcc编译器gs验证码机制,
-z execstack用来关闭ld链接器堆栈段不可执行机制
7.netcat
具体使用随着日后学习
8.uid gid groups
uid是指用户id,gid是首要组id,groups是附属组
9.大端小端法
查过n次的东西....现在又来查了
首先 : 0x12345678 12是低地址 78是高地址
小端法:x86,DEC
即: \x78\x56\x34\x12 即高地址在左 低地址在右
大端法:PowerPC,IBM,网络协议(大部分)
即:\x12\x34\x56\x78
10.gdb-peda部分指令
checksec 检测保护措施
pattern create 1000 生成1000的偏移
pattern offset AA0A找偏移(具体情况具体分析)
p指令:输出
11.乱七八糟的一堆工具和指令
hexedit
ldd :打印所需so文件
vim 拷贝:yy复制 p是拷贝 但是多文件件拷贝情况略有不同
ROPgadget: https://github.com/JonathanSalwan/ROPgadge 构造ROP
file:该指令可以查看运行环境和魔数等
plt表是可用地址,并非真正的地址