Hello, I'm trying to create my client using DR, but I have problems
my client:
#include "dr_api.h"
#include "drmgr.h"
#include "drsyms.h"
#include "drwrap.h"
#if defined(TARGET_MAC)
char *MALLOC = "_malloc";
char *FREE = "_free";
#else
char *MALLOC = "malloc";
char *FREE = "free";
#endif
static void
event_exit();
static void module_load_event(void *, const module_data_t *, bool);
static void
MallocBefore(void *wrapcxt, OUT void **user_data)
{
dr_printf("function \"mallocBEFORE\" is running..\n");
}
static void
MallocAfter(void *wrapcxt, OUT void *user_data)
{
dr_printf("function \"mallocAFTER\" is running..\n");
app_pc address = (app_pc)drwrap_get_retval(wrapcxt); // возвращаемое значение malloc, которое указывает на начало где выделена память
dr_printf(" (malloc)drwrap_get_retval - %x \n", address);
}
static void
module_load_event(void *drcontext, const module_data_t *mod, bool loaded)
{
app_pc orig_malloc;
size_t offs_malloc;
orig_malloc = (app_pc)dr_get_proc_address((module_handle_t)mod->start, MALLOC);
if (orig_malloc != NULL) {
dr_printf("function \"%s\" is found..\n", MALLOC);
bool wrapped = drwrap_wrap(orig_malloc, MallocBefore, MallocAfter);
}
}
DR_EXPORT void
dr_client_main(client_id_t id, int argc, const char *argv[])
{
drsym_init(0);
drmgr_init();
drwrap_init();
drmgr_register_module_load_event(module_load_event);
dr_register_exit_event(event_exit);
}
static void
event_exit() {
drmgr_exit();
drsym_exit();
drwrap_exit();
}
and my test application:
#include <stdio.h>
#include <malloc.h>
#include <iostream>
int main() {
char* t = NULL;
t = (char*)malloc(7 * sizeof(char));
int* n = NULL;
n = (int*)malloc(2 * sizeof(int));
int* k = new int;
printf("t - %x\n", t);
printf("n - %x\n", n);
printf("k - %x\n", k);
free(t);
free(n);
delete k;
}
It works correctly but what the trash in the end ->
function "free" is found..
function "free" is wrapped..
function "malloc" is found..
function "mallocBEFORE" is running..
function "mallocAFTER" is running..
(malloc)drwrap_get_retval - da3dec0
function "mallocBEFORE" is running..
function "mallocAFTER" is running..
(malloc)drwrap_get_retval - da3de20
function "mallocBEFORE" is running..
function "mallocAFTER" is running..
(malloc)drwrap_get_retval - da30850
t - da3dec0
n - da3de20
k - da30850
function "malloc" is found..
function "mallocBEFORE" is running..
function "mallocAFTER" is running..
(malloc)drwrap_get_retval - 8e131250
function "mallocBEFORE" is running..
function "mallocAFTER" is running..
(malloc)drwrap_get_retval - 8e131a00
function "mallocBEFORE" is running..
function "mallocAFTER" is running..
(malloc)drwrap_get_retval - 8e131250
function "mallocBEFORE" is running..
function "mallocAFTER" is running..
(malloc)drwrap_get_retval - 8e131300
function "mallocBEFORE" is running..
function "mallocAFTER" is running..
(malloc)drwrap_get_retval - 8e131320
what's wrong? and how can I fix it?
thanks