• 11
• 14
• 19
• 27
• 9

# [linux] getting the start address of an executable

This topic is 1883 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

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;
}

return 0;
}

{
dl_iterate_phdr(callback, NULL);
}

Purpose:

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

##### Share on other sites

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.

Edited by kd7tck

##### Share on other sites

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.

Edited by kd7tck