+ -
当前位置:首页 → 问答吧 → 天!GetFullPathName() 竟然对 DF 位有要求

天!GetFullPathName() 竟然对 DF 位有要求

时间:2010-11-22

来源:互联网

写了个小程序,用到了 GetFullPathName() 这个系统函数。开始时用得都好好的,后来有改动,运行到这个函数就出错了,Ollydbg 时提示是 ntdll 内 int3 中断;将 EIP 重设下再运行这个函数,似又正常了;如果将错误交回,在该函数是返回 0, GetLastError() 提示 ERROR_NOT_ENOUGH_MEMORY。
对着这个问题,真是百思不得其解啊。左看,右看,上看,下看,终还是很茫然。网上搜索了下,也无结果。
再仔细瞪着这个语句看了半天,一闪念间,想想修改的有上面反向检索个字符串 std 设置了递减方向标记位。于是,在 GetFullPathName() 语句之前加上了个 cld 指令,再运行,竟然就正常了!

很少写东西的,用到什么函数,也就是查下 Win32API.HLP。一直都没看到有对 DF 标记位有要求的啊!这个,算怎么回事儿呢?

我的系统是 xp/sp3,GetFullPathName() 函数所在的 kernel32.dll 版本为 5.1.2600.5512

作者: zara   发布时间: 2010-11-22

系统API函数,遇到串操作,不会去设置DF,所以楼主应当检查自己是否改动了DF而又没有恢复?

作者: coohai   发布时间: 2010-11-22

我自己程序里,怎么动 DF 是我自己的事儿了,也是我的自由吧。如果系统 API 要求 DF 的状态,要么自己进行设置,要么就应在文档里显著地、明确地说明了才对吧。

作者: zara   发布时间: 2010-11-22