一个诡异的C调用 实现的是一个空调用实现一个函数调用,这话说得就很奇怪吧。^_^ 看程序 void f() { printf("this is a call"); } int main() { int buf[1]; buf[2] = (int)f; return 0; } 这个函数没有一个地方是调用f的,注意这一点哦 这是因为buf[2]的溢出覆盖了main的返回地址 高 -- 》 低 [buf[0]] f函数f的地址 被放到了 ebp+8的地方,也就是刚好是的位置。 ebp+8是怎么产生出来的呢?嘿嘿。对于栈的访问c的策略就是ebp+位置,ebp-8放的是buf[0]的值 ebp 是buf[1]嘿嘿。知道了吧 可以 cl /FA 来产生汇编码细细的看这个。 mov DWORD PTR _buff$[ebp+8], OFFSET FLAT:_f |
一个诡异的C调用
最新推荐文章于 2023-11-06 10:49:39 发布