0x00本文视频:

    如果文字过于枯燥可观看在线视频:https://edu.51cto.com/sd/16514

0x01基础知识:

在c语言中printf的使用方法为printf(format,<参量表>),printf是c语言中少见的可变参数的库函数,printf在调用前无法知道传入的参数到底有多少个(在32位汇编中参数都是压入栈中,也就是说printf不知到有多少个参数入栈了),例如printf("My name is %s,%s"),这里format指定了要传递2个参数,但我们并没有传,这时候printf就会去栈中高地址四字节数据来填充%s,也就是:format+4,format+8的值进行填充。

下面举个例子:

1.png

编译:gcc -m32 -O0 base.c -o ./base 编译为32位。

这是我们的测试代码,在printf里没有给printf传递%s对应的值&#