曲径通幽

programming_with_fun();

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  18 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks

常用链接

留言簿(6)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

  最近拿到一个第三方厂家的库,由于Delphi的同事看不懂c++的例子,所以让我用C++封装一个简单的Wrapper给其调用。
  后来发现一个问题,由于原始的函数声明中的参数使用字符数组 (char szData[MAX_PATH])  而不是用常用的指针(char *),给Delphi同事调用后,发现函数调用完退栈时候程序本溃,原因是访问违例,非法地址访问0x72。
  这么一来感觉比较奇怪,0x72 这个地址显然是个垃圾地址,一般如果是空指针的话因该是 0x00,如果是野指针,一般也不至于会那么小,0x72与程序加载地址都相去甚远。
  在vc6(公司只准用vc6)里跟了一下反汇编,感觉信息缺少比较多,能看到的地方已经堆栈被破坏了。于是用了OD跟一下。发现Delphi调用我封装的 函数时,明明2个入参,却传入了3个。多传了个260。260对于vc程序员应该比较熟悉了,就是MAX_PATH的值。于是乎,告知了Delphi程序 员,方才得知,原来Delphi是可以在声明时指定数组长度的,也就是说,函数的入参,数组和指针是两种声明,如此一来,水落石出了。
posted on 2010-06-20 23:34 Meiosis 阅读(354) 评论(0)  编辑 收藏 引用 所属分类: Windows GenericDebug \ Reverse EngineeringWork Experience

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理