指令跳转
call
jmp【无条件跳转】
(cmp)jl【条件跳转】:
jl jg
jb ja
栈调用
ret
相对转移地址,pc的值存放在eip寄存器中。
指令的执行顺序并不是一定按照在存储器中放的顺序
有一个约定——eax ecx edx 由调用者保存【P】
ebx esi edi 由被调用者保存【Q】
P调用Q:进入Q的准备阶段,把Q的ebp内容压入栈中【把P的“栈底指针”保存下来】
从Q返回P,call指令的下一条:改esp、回收栈空间。
这条ADD指令【esp指针上移】:回收了空间
任务:
1、swap怎么做的;
3分16秒。运行hack.c前的一些配置
【】:sudo、需要恢复
:::还有哪些库函数会带来缓冲区溢出漏洞。。
【我自己实践】
终于从main函数转到另一个函数了。esp的值赋给ebp
sum就是“另一个函数”
push %ebp时,esp指针继续下移...
【保存ebp有必要,esp当栈回收时,esp自然而然后退、没有问题!】
你定义了,是分配了空间,but内存当中的数确实“野值”
"野值"
“正儿八经”计算出来的。似乎大了一些???
毕竟上面那个13xw的也有0x56555619
leave【非常厉害】、ebp旧值弹出、回到原来的栈帧结构。
ret【】弹出返回地址(反汇编文档中左边一列“地址”)
【看栈帧】从sum函数ret回来后,esp+8上移,参数被回收空间。
int sum(int a[],int n)先给n传参,再左边——从左到右
【?】printf后续没有尽头吗???
mov $0x1,%ecx
这个到底是相对地址吗?还是数值1、16进制的
【缓冲区】
gcc -o0 -m32 -g -fno-stack-protector -z execstack -no-pie -fno-pic ......
好复杂,()有啥用
【些些课设】
try2.txt是破坏了内存
破坏了返回地址等一系列重要信息,导致在运行时发生了内存的访问错误。