MisterY52 34af6b47ac Replaced vmread with memflow
..
examples Replaced vmread with memflow
src Replaced vmread with memflow
.gitignore Replaced vmread with memflow
Cargo.toml Replaced vmread with memflow
README.md Replaced vmread with memflow
binddestr.h Replaced vmread with memflow
bindgen.sh Replaced vmread with memflow
cbindgen.toml Replaced vmread with memflow
memflow.h Replaced vmread with memflow
memflow_cpp.h Replaced vmread with memflow

README.md

memflow-ffi

Crates.io build and test codecov MIT licensed Discord

The memflow FFI crate provides an interface to the memflow API for C/C++. Currently a single memflow.h file is generated aside from the dynamic library that can be used to interact with memflow.

A simple example that initializes the library:

#include "memflow.h"
#include <stdio.h>

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

	ConnectorInventory *inv = inventory_try_new();
	printf("inv: %p\n", inv);

	const char *conn_name = argc > 1? argv[1]: "kvm";
	const char *conn_arg = argc > 2? argv[2]: "";

	CloneablePhysicalMemoryObj *conn =
        inventory_create_connector(inv, conn_name, conn_arg);
	printf("conn: %p\n", conn);

	if (conn) {
		PhysicalMemoryObj *phys_mem = downcast_cloneable(conn);
		printf("phys_mem: %p\n", phys_mem);

		uint64_t read = phys_read_u64(phys_mem, addr_to_paddr(0x30000));

		printf("Read: %lx\n", read);

		phys_free(phys_mem);

		connector_free(conn);
		printf("conn freed!\n");
	}

	inventory_free(inv);
	printf("inv freed!\n");

	return 0;
}

Additional examples can be found in the examples folder as well as in the memflow-win32-ffi crate.