- 论坛徽章:
- 0
|
实现的还是很不爽,
抛砖引玉,这个代码可以可以动态的调用printf,目前只支持%s和%d两种参数。
主要就是用detect_stack_pos检测stack位置,
然后手动填写stack.
特别要满足 detect_stack_pos 和 被调用的函数(这里是printf)处在一摸一样的stack位置,
这个可以通过 数组 any_fn funcs[ 3 ]; 保证。
VC2008和cygwin下测试通过,cygwin 结果
$ ./a.exe '---%s---%d--%d---%s' ffeww 333 22 abcd
---ffeww---333--22---abcd
$ ./a.exe '---bbs%d.chinaunix.%s--' 3 net
---bbs3.chinaunix.net--
但是不足:
1. 需要用动态数组预留stack空间,VC只能用静态的代替。
2. 需要一个全局变量记录 stack检测结果,开始认为c++可以用类成员代替全局变量,但实际上代替不了(this指针怎么都必须有)
如果全局变量的问题能解决,就比较好包装一个通用的库了。
还有返回值可以不可以用,还没验证。
[ 本帖最后由 群雄逐鹿 于 2009-9-8 14:50 编辑 ] |
|