pwn入门(0.0)

单字节:byte

双字节:词或字word

四字节:双词Dword,doubleword

八字节:四词Qword,quadword

16字节:double quadword

RBX:存储地址

RCX:计数器循环

RDX:整除取余

RSP:栈顶

RBP:栈底

RSI:源目标索引寄存器,寻址
RDI:源目标索引寄存器,寻址

lea:取地址

push:操作数压入栈顶,栈顶指针减小

pop:对应

pushad:所有通用寄存器压到栈顶

popad:堆栈栈顶数弹出到所有的通用寄存器中

ret:从函数返回

inc/dec:递增递减

mil/imul:无符号整数乘法/有符号整数乘法

div/idiv:无符号整数除法/有符号整数除法

and/or/not/neg:与/或/逻辑非(反码)/非(补码)

je:相等跳转

jne:不相等跳转

loop返回循环入口

xor:异或,可以避免坏字节/x00的出现;xor eax eax;赋值0

反编译工具

IDA

Objdump,默认AT&T语法。可以-M intel参数改变

内存

代码区,数据区,堆区,栈区

堆区可以自己请求内存,再返还给堆区。

栈区存储函数调用关系。

函数调用

程序执行要确定下一条指令的地址,就是PC,寄存器位EIP即指针寄存器。控制程序执行流就可以控制EIP指针来做到

每个函数都有属于自己的栈帧,如何保证函数栈帧正确,通过esp和ebp。
pwn入门(0.0)_第1张图片
pwn入门(0.0)_第2张图片

sub esp,xxx;
add esp,xxx;

为定义变量扩展空间,定义一个char a[10],就把栈顶指针向上抬。

objdump -d 文件 -M intel

也可以查找程序含有对应指令的地址

objdump -d file | grep 指令(例如pop)
objdump -d file -M intel | grep 指令(例如pop)

pwn入门(0.0)_第3张图片
返回finish

删除断点

d num

修改寄存器

set $rax=0x66666666

Linux查看进程PID

ps -a

ps -aux

插件功能

查看地址等信息

vmmap

查看栈的信息

stack

查看堆信息

heap

例如

#include 
#include 
int main
{
    char *str1=malloc(100);
    scanf("%s",str1);
    printf("%s",str1);
    char *str2=malloc(100);
    char *str3=malloc(100);
    free(str1);
    free(str2);
    return 0;
}

向堆空间索要内存;

gdb a.out
b main
r
heap

pwn入门(0.0)_第4张图片

 x/20gx 0x555555756000

查看对应堆空间内存的情况

你可能感兴趣的:(pwn,linux)