Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在LLVM中将常量*转换为值*?_Llvm - Fatal编程技术网

如何在LLVM中将常量*转换为值*?

如何在LLVM中将常量*转换为值*?,llvm,Llvm,我只想混淆选择器名称,但我不知道如何将常量*转换为值*: void symObfs(Module &M) { errs()<<"Start Obfuscating...\n"; srand (time(NULL)); //Objective-C Method ClassName Stuff for(auto G=M.getGlobalList().begin();G!=M.getG

我只想混淆选择器名称,但我不知道如何将常量*转换为值*:

void symObfs(Module &M) {
            errs()<<"Start Obfuscating...\n";
            srand (time(NULL));
            //Objective-C Method ClassName Stuff
            for(auto G=M.getGlobalList().begin();G!=M.getGlobalList().end();G++){
                GlobalVariable &GL=*G;
                if (GL.getName().str().find("OBJC_METH_VAR_NAME_")==0||GL.getName().str().find("OBJC_CLASS_NAME_")==0){
                    ConstantDataArray* Initializer=dyn_cast<ConstantDataArray>(GL.getInitializer ());
                    // string newName = fakeNameGenerator();
                    string newName = randomString(16);
                    Constant *Value =ConstantDataArray::getString(Initializer->getContext(),newName,true);
                    //GL.setInitializer(Value);
                    errs()<<"Selector Name: "<<Initializer->getAsCString ()<<" Obfuscated to: "<<newName<<"\n";
                    Initializer->Value::replaceAllUsesWith(Value);
                }
            }
}
void symObfs(模块与模块){
errs()该类继承自该类

<> P> >您不需要做任何事情来从<代码>常数*转换为<代码>值*/COD>。您可以直接将<代码>常数*<代码>分配给<代码>值*/COD>。因为在C++指针中,子类对象可以被分配给父类指针变量。< /P> 另一方面,如果要从
值*
分配到
常数*
则必须使用
dyn\u cast
作为

Constant * C = dyn_cast<Constant*>(V);
常数*C=dyn\u cast(V);

如果V中的对象实际上不是常量,这将把C设置为
NULL

但是当我直接传递值时,当Xcode编译测试项目输出时:开始模糊处理…选择器名称:alloc模糊处理为:8E6YX4SG2HiHyr断言失败:(新建->getType()==getType()&&“用不同类型的新值替换值的引用!”),函数replaceAllUsesWith,file/Users/renqiming/Desktop/llvm_3.9_mod/llvm-3.9.1.src/lib/IR/value.cpp,第380行。问题不在于从常量*转换为值*,而是您正在创建的新常量(名称模糊)与原始常量的类型不同。请尝试转储这两种类型并检查它们是否相同。