Dynamic Downloading and executing of ELF files


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Dynamic Downloading and executing of ELF files
# 1  
Old 01-07-2010
Dynamic Downloading and executing of ELF files

Dear Group,

I want to prepare an ELF file which can be downloaded dynamically to any address in the moemory and executes as a new task/thread/process.

1) for this what are all the compileation, linker options while building the ELF file?
2) which parts of ELF file has to modified while loading?(what setions or offset)
3) please suggest me how the Dynamic download loader should be to achieve this.

Thanks,
Ravinder
# 2  
Old 01-07-2010
You can't just download an ELF file into memory and execute it because an ELF file needs processing to load in the first place. An ELF file has potentially many separate memory segments with different characteristics, not one glob that it just lives in.

Build a shared library, use dlopen, that's what they're there for. Not to mention that how libraries are handled can depend a lot on your architecture and configuration, doing that manually yourself would be very unportable(not to mention reinventing the wheel.)

It handles everything for you, from filename to symbol name in two easy steps. Here's an example:
Code:
// shared.c
// compile like:  gcc shared.c -shared -fPIC -o shared.so
#include <stdio.h>

int library_function(int argc, char *argv[])
{
        fprintf(stderr, "library_function called\n");
        return(0);
}

Code:
// main.c
// compile like:  gcc main.c -ldl -o main
#include <stdio.h>
#include <dlfcn.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main(int argc, char *argv[])
{
        void *h=dlopen("./shared.so", RTLD_NOW);
        int (*fn)(int argc, char *argv[]);
        pid_t pid;

        if(h == NULL)
        {
                fprintf(stderr, "Couldn't open shared.so\n");
                return(1);
        }

        fn=dlsym(h, "library_function");
        if(fn == NULL)
        {
                fprintf(stderr, "Couldn't find library_function\n");
        }

        pid=fork();  // Create new process
        if(pid == 0)    // child code
        {       return(fn(argc, argv));         }
        else // Wait for child process
        {
                int status;
                wait(&status);
                fprintf(stderr, "Child returned %d\n", WEXITSTATUS(status));
        }

        dlclose(h);

        return(0);
}


Last edited by Corona688; 01-07-2010 at 12:39 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

Executing if dynamic conditions in awk

Hi All, I got struck at the below point where i am unable to get the desired output after forming the dynamic conditions.Below is the design. 1. We are getting inputs from the shell arguments and storing in a variable like below. CONDITIONS="1=CT,2=US_10,3=CT_US_10" 2. After this i am... (14 Replies)
Discussion started by: cskumar
14 Replies

2. Shell Programming and Scripting

Comparing 2 text files & downloading a file if the last lines are different

Hello I'm having a little difficulty in writing a shell script for a few simple tasks. First I have two files "file1.txt" and "file2.txt" and I want to read and compare the last line of each file. The files look like this. File1.txt File2.txt After comparing the two lines I would... (2 Replies)
Discussion started by: RustikGaming
2 Replies

3. Shell Programming and Scripting

downloading mutilple files

hey i have a text file thats filled with info like this $ cat /private/var/lib/apt/lists/idwaneo.org_repo_._Packages Package: org.idwaneo.ldid Priority: optional Section: iDWANEO.org Maintainer: Admin <admin@idwaneo.org> Architecture: iphoneos-arm Version: 610-5 Pre-Depends: dpkg... (1 Reply)
Discussion started by: lewisdenny
1 Replies

4. Shell Programming and Scripting

Help Dynamic looping based on files

Hi I have to run the script (a part of the code) in a loop for the no of times the files present in the directory, by taking one file and process and next another file. For example, if we do ls and the result have: $ls abc.dat def.dat ghi.dat The script code should loop for 3... (4 Replies)
Discussion started by: karumudi7
4 Replies

5. Shell Programming and Scripting

Downloading FTP Files

Hi every one, I have the requirement to download the files from FTP and move those files to unix box. Once after coping the files, i need to remove the files in FTP. I'm a newbie in Unix script. Can you please suggest a script for this.. Thanks in advance.. (2 Replies)
Discussion started by: Murali4u
2 Replies

6. Shell Programming and Scripting

Help with dynamic configure cfg files

hi; i have one configuration file(configuration.cfg),where contents are below.. filename = charge.cfg sectionname = networkid = 1 retrytimes = 2 ------------- -------------- sectionname = networkid = 1 retrytimes = 2 filename = xyz.cfg ------------------ ----------------- There is... (7 Replies)
Discussion started by: suryanarayan
7 Replies

7. Shell Programming and Scripting

shell script - ftp downloading serveral files without mget

Hello guys, i'm searching for a solution how to download all files from root-directory of an ftp-server through an ftp proxy getting through the ftp proxy and download one file with get ist no problem, but mget * does nothing! ftp -n -i -v <<EOF open proxyHost proxyPort user... (19 Replies)
Discussion started by: macProgger23
19 Replies

8. Shell Programming and Scripting

Problem in Downloading one day old files from FTP site

HI, I'm downloading one day old files from ftp site. Below is my script ---------------------------- printf "open $HOST \n" > ftp.cmd printf "user $USER $PASSWD\n" >> ftp.cmd printf "bin\n" >> ftp.cmd #printf "cd /Models/\n" >> ftp.cmd printf "prompt\n" >> ftp.cmd printf "for oldfile... (4 Replies)
Discussion started by: shekhar_v4
4 Replies

9. UNIX for Dummies Questions & Answers

Running elf files

I have a few questions about elf files and how they are executed. When gcc compiles a elf file it creates an executable. Is this executable then run directly by the hardware or does the kernel get involved, interpret the elf file and place the asm code directly in memory. Cheers (0 Replies)
Discussion started by: mshindo
0 Replies

10. HP-UX

dynamic names for .tar.gz files?

Hi All, I have a requirement to zip and compress files with dynamic names (which includes date and time component in their names) needs to be compressed with same name. for example I have a file T.30.SLS_ORD.SO.27.2_2_2.20080623.041415.dat which needs to archived as... (1 Reply)
Discussion started by: srinivas_paluku
1 Replies
Login or Register to Ask a Question