本文整理汇总了C++中BinaryWriter::WriteBinaryFile方法的典型用法代码示例。如果您正苦于以下问题:C++ BinaryWriter::WriteBinaryFile方法的具体用法?C++ BinaryWriter::WriteBinaryFile怎么用?C++ BinaryWriter::WriteBinaryFile使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BinaryWriter
的用法示例。
在下文中一共展示了BinaryWriter::WriteBinaryFile方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
//.........这里部分代码省略.........
CodeGenerator *codegen = NULL;
//Generate assembly code from IL
/* if (CompilationContext::GetInstance()->CodeType == CODE_TYPE_DISA) {
//Generate DISA assembly code from IL
codegen = new DisaCodeGenerator();
} else */
if (CompilationContext::GetInstance()->CodeType == CODE_TYPE_I0) {
codegen = new I0CodeGenerator();
} else {
printf("Error: unsupported CodeType.\n");
return -1;
}
codegen->Generate(context->IL);
for(std::vector<std::string>::iterator it = inputFiles.begin(); it != inputFiles.end(); ++it)
{
std::string inputFile = context->InputFiles.front();
std::string fileExt = inputFile.substr(inputFile.find_last_of(".") + 1);
if(fileExt == "s")
{
SourceParser *parser = NULL;
/* if (CompilationContext::GetInstance()->CodeType == CODE_TYPE_DISA) {
parser = new DisaAssemblyParser();
} else
*/
{
// TODO: support i0 assembly
printf(".s file is not supported for i0.\n");
return -1;
}
parser->Parse(inputFile);
}
}
if(context->Debug)
{
std::string baseFileName = CompilationContext::GetInstance()->OutputFile;
std::string dumpFileName, mapFileName;
int pos = baseFileName.find_last_of(".");
if(pos != -1)
{
baseFileName = baseFileName.substr(0, pos);
}
dumpFileName = baseFileName + ".objdump";
mapFileName = baseFileName + ".map";
std::ofstream objdump(dumpFileName.c_str());
int64_t currentText = context->TextStart;
for(std::vector<TargetInstruction *>::iterator iit = context->Target->Code.begin(); iit != context->Target->Code.end(); ++iit)
{
TargetInstruction *inst = *iit;
char buffer[32];
sprintf(buffer, "%0llX> \t", (long long)currentText);
objdump << buffer << inst->ToString().c_str() << std::endl;
currentText += inst->GetLength();
}
objdump.close();
std::ofstream mapdump(mapFileName.c_str());
DumpScope(SymbolScope::GetRootScope(), mapdump);
}
printf("Maximum stack frame size: 0x%llX\n", (long long )(context->MaxStackFrame));
// TODO: Optimize the assembly code
TargetOptimizer *targetOpt = NULL;
char *textBuf = new char[0x100000];
int64_t textSize = 0;
for(std::vector<TargetInstruction *>::iterator it = context->Target->Code.begin(); it != context->Target->Code.end(); ++it)
{
TargetInstruction *inst = *it;
inst->Encode(&textBuf[textSize]);
textSize += inst->GetLength();
}
// Write the binary into file
std::string outputFile = CompilationContext::GetInstance()->OutputFile;
BinaryWriter *binwt = new FlatFileWriter();
std::vector<SectionInfo> sections;
SectionInfo textSection;
textSection.Name = ".text";
textSection.RawData = textBuf;
textSection.RawDataSize = textSize;
textSection.VirtualBase = context->TextStart;
textSection.VirtualSize = textSize;
sections.push_back(textSection);
binwt->WriteBinaryFile(context->OutputFile, §ions, context->TextStart);
return 0;
}