Jump to content
  • Advertisement
Sign in to follow this  
Gnarmock

[linux] getting the start address of an executable

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

If you intended to correct an error in the post then please contact us.

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

Share this post


Link to post
Share on other sites
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.

Edited by kd7tck

Share this post


Link to post
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

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!