From 4034b843977b76efe21eeef7e98fe5f2707f4ed4 Mon Sep 17 00:00:00 2001 From: William Tan <1284324+Ninja3047@users.noreply.github.com> Date: Thu, 29 Feb 2024 10:02:32 -0500 Subject: [PATCH 1/2] return decl instead of nullptr --- lib/Lifters/FunctionLifter.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/Lifters/FunctionLifter.cpp b/lib/Lifters/FunctionLifter.cpp index 216bd1de..b864cc14 100644 --- a/lib/Lifters/FunctionLifter.cpp +++ b/lib/Lifters/FunctionLifter.cpp @@ -409,13 +409,6 @@ llvm::Function *FunctionLifter::LiftFunction(const FunctionDecl &decl) { return nullptr; } - // Function has no valid instructions. - auto &cfg = decl.cfg; - if (cfg.find(decl.entry_uid) == cfg.end()) { - LOG(ERROR) << "Function missing entry block " << std::hex << decl.address; - return nullptr; - } - // This is our higher-level function, i.e. it presents itself more like // a function compiled from C/C++, rather than being a three-argument Remill // function. In this function, we will stack-allocate a `State` structure, @@ -440,6 +433,14 @@ llvm::Function *FunctionLifter::LiftFunction(const FunctionDecl &decl) { return native_func; } + // Function has no valid instructions. + auto &cfg = decl.cfg; + if (cfg.find(decl.entry_uid) == cfg.end()) { + LOG(WARNING) << "Function missing entry block " << std::hex << decl.address; + return native_func; + } + + // Every lifted function starts as a clone of __remill_basic_block. That // prototype has multiple arguments (memory pointer, state pointer, program // counter). This extracts the state pointer. From 3f8ca7bae7a4beab2aff36936d79d473efd86562 Mon Sep 17 00:00:00 2001 From: William Tan <1284324+Ninja3047@users.noreply.github.com> Date: Thu, 29 Feb 2024 10:11:11 -0500 Subject: [PATCH 2/2] return error/null instead of decl --- lib/Lifters/FunctionLifter.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Lifters/FunctionLifter.cpp b/lib/Lifters/FunctionLifter.cpp index b864cc14..d601aebf 100644 --- a/lib/Lifters/FunctionLifter.cpp +++ b/lib/Lifters/FunctionLifter.cpp @@ -436,8 +436,8 @@ llvm::Function *FunctionLifter::LiftFunction(const FunctionDecl &decl) { // Function has no valid instructions. auto &cfg = decl.cfg; if (cfg.find(decl.entry_uid) == cfg.end()) { - LOG(WARNING) << "Function missing entry block " << std::hex << decl.address; - return native_func; + LOG(ERROR) << "Function missing entry block " << std::hex << decl.address; + return nullptr; }