2
我只是想混淆選擇的名字,但我不知道如何將一個常數*轉換爲數值*:如何在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.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);
}
}
}
謝謝!
但是當我直接傳遞值,當Xcode的編譯測試項目產出: 開始混淆... 選擇名稱:ALLOC迷惑性:8e6yx4sg2hsihyr 斷言失敗:(新建 - >的getType()==的getType() &&「用不同類型的新值替換所有值的使用!」),函數replaceAllUsesWith,文件/Users/renqiming/Desktop/llvm_3.9_mod/llvm-3.9.1.src/lib/IR/Value.cpp,第380行。 –
該問題不是從常量*轉換爲值*,而是您正在創建的新常量(具有混淆名稱)不具有與原始常量相同的類型。嘗試傾銷這兩種類型,並檢查它們是否相同。 –
我會試試看,謝謝! –