Skip to content
This repository was archived by the owner on Apr 20, 2023. It is now read-only.

merces/libpe

Folders and files

NameName
Last commit message
Last commit date

Latest commit

0d988cc · Apr 20, 2023
Mar 17, 2020
Feb 15, 2021
Jul 11, 2017
Aug 9, 2017
Apr 18, 2013
Nov 1, 2013
Apr 29, 2015
Aug 18, 2021
Apr 20, 2023
Jan 28, 2021
May 30, 2021
Feb 23, 2021
Feb 4, 2021
Feb 4, 2021
Feb 11, 2023
Feb 18, 2023
Feb 23, 2021

Repository files navigation

libpe

⚠️ libpe has moved under @mentebinaria/readpe. ⚠️

LGPLv3 C/C++ CI

The PE library used by pev - the PE file toolkit purely written in C and available to many platforms.

Features

  • Support for both 32 and 64-bits PE files.
  • ssdeep support (built-in libfuzzy).
  • Disassemble support (built-in libudis86).
  • Imphash support.
  • Crypographic digests calculation (using OpeenSSL).

How to get the source code

git clone https://github.com/merces/libpe.git

How to build on Linux

cd libpe
make

NOTE: You may need to install OpenSSL using your package manager. Examples:

apt install libssl-dev
yum install openssl-devel

How to build on macOS

cd libpe
CFLAGS="-I/usr/local/opt/openssl/include/" LDFLAGS="-L/usr/local/opt/openssl/lib/" make

NOTE: You may need to install OpenSSL and PCRE via Homebrew:

brew update
brew install openssl

Usage example

#include <stdio.h>
#include "../include/libpe/pe.h"

int main(int argc, char *argv[]) {

    if (argc < 2)
        return 1;

    pe_ctx_t ctx;
    pe_err_e err = pe_load_file(&ctx, argv[1]);

    if (err != LIBPE_E_OK) {
        pe_error_print(stderr, err);
        return 1;
    }

    err = pe_parse(&ctx);
    if (err != LIBPE_E_OK) {
        pe_error_print(stderr, err);
        return 1;
    }

    if (!pe_is_pe(&ctx))
        return 1;

    printf("Entrypoint: %#llx\n", ctx.pe.entrypoint);

    return 0;
}

Compile with:

cc -o example example.c -lpe

Troubleshooting

  • Error while loading shared libraries: libpe.so.1

    • The prefix used in libpe's makefile is /usr/local/lib
    • If your system isn't set to look here, you can add it to ld.so.conf
    • Alternatively, change prefix to whatever suits, ie. /usr/lib
  • Undefined reference to log

    • Linux' glibc does not define math functions, they live instead in libm
    • Link against both libpe and libm to fix this (ie. -lm)