You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.5 KiB
39 lines
1.5 KiB
#include <vmprofiler.hpp>
|
|
|
|
#include <coff/image.hpp>
|
|
#include <iostream>
|
|
#include <sstream>
|
|
#include <string>
|
|
|
|
#define VM_ENTER_NAME "vmenter_"
|
|
#define VM_EXIT_NAME "vmexit_"
|
|
#define VM_RTN_NAME "rtn_"
|
|
|
|
#define FIX_MAKE_ZERO_OFFSET 0x25
|
|
#define FIX_MAKE_RELOC_OFFSET 0x30
|
|
#define FIX_MAKE_JMP_OFFSET 0x43
|
|
|
|
namespace devirt
|
|
{
|
|
namespace util
|
|
{
|
|
/// <summary>
|
|
/// helper function to serialize vmp2 file data to vm::instr::code_block's...
|
|
/// </summary>
|
|
/// <param name="virt_rtns">vector of pairs {vm enter offset, vector of code blocks} which gets filled up with
|
|
/// serialized data</param>
|
|
/// <param name="vmp2file">a vector of bytes containing the vmp2 file...</param>
|
|
/// <returns>returns true if serialization was successful</returns>
|
|
bool serialize_vmp2(
|
|
std::vector< std::pair< std::uint32_t, std::vector< vm::instrs::code_block_t > > > &virt_rtns,
|
|
std::vector< std::uint8_t > &vmp2file );
|
|
} // namespace util
|
|
|
|
/// <summary>
|
|
/// append devirtualized functions to the original binary... patches vm enter jmps to devirtualized code...
|
|
/// </summary>
|
|
/// <param name="obj">compiled obj file... generated by llvm...</param>
|
|
/// <param name="bin">original binary in a vector... this binary gets patched...</param>
|
|
/// <returns>returns true if new .devirt section has been appended and all linking was successful...</returns>
|
|
bool append( std::vector< std::uint8_t > &obj, std::vector< std::uint8_t > &bin );
|
|
} // namespace devirt
|