本文整理汇总了C++中CInput::getFather方法的典型用法代码示例。如果您正苦于以下问题:C++ CInput::getFather方法的具体用法?C++ CInput::getFather怎么用?C++ CInput::getFather使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CInput
的用法示例。
在下文中一共展示了CInput::getFather方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: callPintool
void FuzzwinAlgorithm::callPintool()
{
// ligne de commande pour appel de PIN avec l'entree en cours
std::string cmdLine(this->getCmdLinePintool());
// mise à zéro de la formule
_formula.erase();
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
ZeroMemory(&pi, sizeof(pi));
si.cb = sizeof(si);
if (CreateProcess(nullptr,
(LPSTR) cmdLine.c_str(),
NULL, // process security attributes
NULL, // primary thread security attributes
TRUE, // handles are inherited
CREATE_NO_WINDOW, // creation flags
NULL, // use parent's environment
NULL, // use parent's current directory
&si, &pi))
{
/***********************/
/** CONNEXION AU PIPE **/
/***********************/
BOOL fSuccess = ConnectNamedPipe(_hPintoolPipe, NULL);
if (!fSuccess && GetLastError() != ERROR_PIPE_CONNECTED)
{
this->logTimeStamp();
this->log("erreur de connexion au pipe FuzzWin GLE=" + std::to_string(GetLastError()));
this->logEndOfLine();
return; // formule vide
}
// envoi dans le pipe du chemin vers l'entrée étudiée
if (EXIT_FAILURE == sendArgumentToPintool(_pCurrentInput->getFilePath()))
{
return; // formule vide
}
/********************************************************/
/** ATTENTE DE L'ARRIVEE DES DONNEES DEPUIS LE PINTOOL **/
/********************************************************/
char buffer[512]; // buffer de récupération des données
DWORD cbBytesRead = 0;
// lecture successive de blocs de 512 octets
// et construction progressive de la formule
do
{
fSuccess = ReadFile(_hPintoolPipe, // pipe handle
&buffer[0], // buffer to receive reply
512, // size of buffer
&cbBytesRead, // number of bytes read
NULL); // not overlapped
if ( ! fSuccess && (GetLastError() != ERROR_MORE_DATA) ) break;
// ajout des données lues au resultat
_formula.append(&buffer[0], cbBytesRead);
} while (!fSuccess); // repetition si ERROR_MORE_DATA
// deconnexion du pipe
DisconnectNamedPipe(_hPintoolPipe);
// attente de la fermeture de l'application
WaitForSingleObject(pi.hProcess, INFINITE);
// recupération du code de retour du pintool
// (NON ENCORE IMPLEMENTE)
DWORD exitCode = 0;
GetExitCodeProcess(pi.hProcess, &exitCode);
// fermeture des handles processus et thread
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
// si option 'keepfiles' ou 'traceonly': sauvegarde de la formule (extension .smt2)
if (_keepFiles || _traceOnly)
{
std::ofstream ofs(_pCurrentInput->getLogFile());
// entete (version pin Z3 etc) et nom de l'entrée
ofs << infoHeader << '\n';
ofs << "; Fichier instrumenté : ";
ofs << _pCurrentInput->getFileName();
// ajout de l'arbre généalogique (si objet non-root et mode verbeux)
CInput *pFather = _pCurrentInput->getFather();
if (_verbose && pFather)
{
ofs << '(';
do // boucle récursive de déclaration des parents de chaque fichier
{
ofs << " <- " << pFather->getFileName();
pFather = pFather->getFather();
//.........这里部分代码省略.........