我看到有人问了一些相关的问题,但它们要么太先进,我无法掌握,要么缺乏从头到尾的分步指南(其中大多数最终都是内部人士谈论他们自己的实验结果)。好的,给定这个简单的程序:
#include <stdio.h>
#include <string.h>
int main()
{
FILE * f;
char buffer[100];
memset(buffer, 0, 100);
fun();
f = fopen("main.cpp", "r");
fread(buffer, 1, 99, f);
printf(buffer);
fclose(f);
return 0;
}
它所做的基本上是打印自身(假设文件名为main.cpp
)。
问题
我怎样才能让它打印另一个文件,比如foobar.txt
不修改源代码?它与通过 VS 运行它、单步执行函数并在fread()
调用之前劫持 FILE 指针有关。无需担心调用fclose()
.
我尝试了简单f = fopen("foobar.txt", "r")
的
CXX0017: Error: symbol "fopen" not found
有任何想法吗?
编辑
我在Debugging Mozilla on Windows FAQ 上偶然发现了解决方案。放入即时窗口的正确命令是
f = {,,MSVCR100D}fopen("foo.txt", "r")
但是,它并没有真正回答这个问题:
- 我仍然不明白这里发生了什么。
- 如何系统地找出
{,,MSVCR100D}
任何给定方法的部分?我知道 MSVCR 版本因系统而异。我怎样才能知道呢? - 谁能解释一下大括号语法,特别是那两个逗号在那里做什么?使用这种语法是否有更多隐藏的宝石?