2025/3/23
ROP前置知识点
*自用
gadget
获取 gadget 可以使用工具 ROPgadget 获取到 elf 文件中的大部分 gadget。
例如
pop rdi
ret
其下一个地址的字符串会被弹入rdi中,成为ret(下一个函数地址,例如system)中的参数。
C程序调用过程与函数栈变化
#此文为PWN入门(1.1.2)C程序调用过程与函数栈变化(32位 vs 64位)(Intel)_文章阅读笔记
1.栈帧
其本质就是一种栈,只是这种栈专门用于保存函数调用过程中的各种信息(参数,返回地址,本地变量等)。栈帧有栈顶和栈底之分,其中栈顶的地址最低,栈底的地址最高,SP(栈指针)就是一直指向栈顶的。在x86-32bit中,我们用 ebp 指向栈底,也就是基址指针;用 esp 指向栈顶,也就是栈指针。
2.func(参数1, 参数2 ,参数3 )
在执行call func之前程序会执行一些push指令将func函数的参数1,2,3分别压入栈中
也就是push 参数3 push 参数2 push 参数1 这三条指令。#32位程序
3.64位的区别
在64位程序中,函数的参数会依次放入rdi rsi rdx rcx r8 r9 这六个寄存器中,只有把这六个寄存器塞满后,才会从右到左依次放入栈中
阅读文献
栈知识补充
1.函数状态主要涉及三个寄存器--esp,ebp,eip。esp 用来存储函数调用栈的栈顶地址,在压栈和退栈时发生变化。ebp 用来存储当前函数状态的基地址,在函数运行时不变,可以用来索引确定函数参数或局部变量的位置。eip 用来存储即将执行的程序指令的地址,cpu 依照 eip 的存储内容读取指令并执行,eip 随之指向相邻的下一条指令,如此反复,程序就得以连续执行指令。

posted on 2025-03-26 19:59 dreamfish_miu 阅读(61) 评论(0) 收藏 举报
浙公网安备 33010602011771号