根据综合研究5的showchar()函数,可以了解参数都是由栈传递的,所要传递参数的个数也可以由栈传递。那么printf函数要输出的参数肯定也是由栈传递。另外一点就是printf函数肯定有某种信息,这种信息记录了需要打印的个数。
main()
{
printf("%c,%d/n",'a',2);
}
函数如上,编译连接后用反汇编查看cs:01fa
能看出来,打印的参数‘a’,2都是由栈传递。入栈的时候还有一个未知信息:mov ax,0194
Push ax
0194肯定不是我们需要打印的参数,那么它就是printf函数自己添加的。根据上面的假设,printf自己能够获取信息,得知所要打印参数的个数。这个信息应该也放在内存的某个位置。那么会不会0194就是那个位置的IP?
查看一下: