我注意到,即使从我的可执行文件中去除符号后,类名及其方法仍然包含在可执行文件的末尾。
例如:
#include <iostream>
using namespace std;
class Clingons
{
public:
void clingForever()
{
cout << "Qapla" << endl;
}
};
int main(int argc, char *argv[])
{
Clingons cling;
cling.clingForever();
return 0;
}
然后编译并链接:
g++ cling.cpp -o cling
现在,当我使用十六进制编辑器查看生成的“cling”文件的底部时,我可以看到“Clingons”类名称及其方法。我也可以在调试时看到这个信息..
即使在我剥掉它们之后:
strip -x cling
我仍然可以看到相同的信息。
那么为什么当我使用上面的命令时这些信息没有被删除?除了手动,有没有办法剥离(或破坏)这些信息?
使用的 GCC 版本是 i686-apple-darwin10-llvm-g++-4.2 (GCC) 4.2.1
这只是一个例子。我的真实项目涉及 Qt 框架。