[linux] getting the start address of an executable

Started by
2 comments, last by Katie 11 years, 2 months ago

Hello there,

I'm trying to find a better way to get the base address of an executable from within a module.

The library is loaded with LD_PRELOAD and gets initialized via the constructor attribute.

On windows it's possible to call (unsigned int)GetModuleHandle("nameofprog.exe") to get that address.

I tried it with dlopen but it doesn't seem to work, getting invalid returns as it's an executable.

My current approach is to iterate through all the modules of the process, which seems unnecessary.


static int callback(struct dl_phdr_info *info, size_t size, void *data)
{

    if( info->dlpi_name[0] == 0 ){

	debug_print("Process found.");
	Dl_info dl;
	int ret = dladdr( (void *) (info->dlpi_addr + info->dlpi_phdr[0].p_vaddr), &dl );
   }

    return 0;
}

void load()
{
	dl_iterate_phdr(callback, NULL);
}

Purpose:

The library has no information exchange with the application, it loads and detours a specified address

Advertisement

You say you are in a module. Where is the module run from?

More detailed info is needed.

Look over the man pages and look for anything you might have missed. In the mean time I will think your situation over and get back to you in an hour or so.

edit: Possible solution, another.

How exactly did you use dlopen? Also why must it obtain the address of an executable, would it not be easier to compile it as a library, then obtain that address. A library can just as easily be run like an executable, only it requires a separate launcher to do so.

Here is a link to something similar.

Why are you trying to do this -- what is that you're actually trying to achieve?

This topic is closed to new replies.

Advertisement