Use the following sample code segment to obtain and then print the contents of a memory map:
#include <stdio.h>
#include <backtrace.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int main(int argc, char *argv[])
{
char out[1024];
bt_accessor_t acc;
bt_memmap_t memmap;
if (bt_init_accessor(&acc, BT_SELF) == -1)
{
fprintf( stderr, "%s:%i %s (%i)%s\n", __FUNCTION__, __LINE__,
"bt_init_accessor", errno, strerror(errno));
return EXIT_FAILURE;
}
if (bt_load_memmap( &acc, &memmap) == -1)
{
fprintf( stderr, "%s:%i %s (%i)%s\n", __FUNCTION__, __LINE__,
"bt_load_memmap", errno, strerror(errno));
return EXIT_FAILURE;
}
if (bt_sprn_memmap(&memmap, out, sizeof(out)) == -1)
{
fprintf( stderr, "%s:%i %s (%i)%s\n", __FUNCTION__, __LINE__,
"bt_sprn_memmap", errno, strerror(errno));
return EXIT_FAILURE;
}
/* Make sure that the string is null-terminated. */
out[sizeof(out) - 1] = '\0';
puts(out);
bt_unload_memmap( &memmap );
if (bt_release_accessor(&acc) == -1)
{
fprintf( stderr, "%s:%i %s (%i)%s\n", __FUNCTION__, __LINE__,
"bt_release_accessor", errno, strerror(errno));
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
Additional notes about memory:
(16 + strlen(filename)) * num_files